Drop links or images here to add them to the editor.

We versturen een reeks van bits over een draad, en spreken hierbij af dat een hoge spanning voor een "1"-bit staat en een lage spanning voor een "0"-bit. We stellen dit signaal voor door de functie $$V(t)$$. Tijdens dit versturen, komt er wat ruis te zitten op dit signaal, zodat we het eigenlijk het signaal $$V(t) + r(t)$$ ontvangen (waarbij $$r(t)$$ uiteraard voldoende klein moet zijn om het originele signaal te kunnen reconstrueren).

Gegeven zijn de verwachte spanningsniveaus $$V_{hoog}$$ en $$V_{laag}$$, en de opgemeten spanningen na versturen. Schrijf een functie reconstrueer() met als argumenten:

Het resultaat van deze functie is een NumPy-rij of een geheel getal. Dit resultaat stelt de verstuurde bitsequentie voor (dus een opeenvolging van 1 en 0). Het resultaat is een NumPy-rij indien het eerste argument een NumPy-rij is, en een geheel getal indien dit eerste argument ook een reëel getal is. Om te bepalen of een "1"- dan wel een "0"-bit verstuurd werd, kijk je telkens na of het ontvangen signaal dichtst bij $$V_{hoog}$$ ("1"-bit) dan wel dichtst bij $$V_{laag}$$ ("0"-bit) ligt. Je mag aannnemen je nooit een situatie zal ontmoeten waarbij je geen beslissing kan nemen omdat de gemeten waarde even ver van $$V_{hoog}$$ als van $$V_{laag}$$ ligt.

TIP : een NumPy-rij van booleans r kan je omzetten naar een rij van gehele getallen via de constructie r*1.

Voorbeeld

reconstrueer(np.array([5.0, 4.9, 0.0, -0.1, 3.9, -1.0]), 5.0, 1.0) = [1 1 0 0 1 0]
reconstrueer(4.5, 5.0, 1.0) = 1