Použití FFT (iFFT) při rekonstrukci zašuměného signálu - lze vynechat
>
N:=8:f:=2:
sumy:=stats[random,normald]:
vzorky_re:=array([evalf(seq(sin(x*2*Pi*f/2^N)+0.1*sumy(),x=1..2^N))]):
vzorky_im:=array([seq(0,x=1..2^N)]):
kernel_re:=array([seq(exp(-100.0*(k/2^N)^2),k=1..2^N)]):
kernel_im:=array([seq(0,x=1..2^N)]):
>
pl:=[seq([i*2*Pi*f/2^N,vzorky_re[i]],i=1..2^N)]:
plot(pl,style=POINT);
>
FFT(N,vzorky_re,vzorky_im):
FFT(N,kernel_re,kernel_im):
>
vystup:=[seq(vzorky_re[i]+I*vzorky_im[i],i=1..2^N)]:
kernel:=[seq(kernel_re[i]+I*kernel_im[i],i=1..2^N)]:
vystup_novy:=[seq(vystup[i]*kernel[i],i=1..2^N)]:
vystup_abs:=map(2/2^N*abs, vystup):
vystup_novy_re:=convert(map(Re, vystup_novy),vector):
vystup_novy_im:=convert(map(Im, vystup_novy),vector):
>
pl:=[seq([i-1,vystup_abs[i]],i=1..2^N)]:
plot(pl);
>
iFFT(N,vystup_novy_re,vystup_novy_im):
pl_zpet:=[seq([i*2*Pi*f/2^N,vystup_novy_re[i]],i=1..2^N)]:
plot(pl_zpet,style=POINT);