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