0001 // declarations
0002 filter[M]
0003 signal[M]
0004 b[N]
0005 output[N/2+1]
0006 // generate filter
0007 FOR i in M
0008 // sinc function
0009 filter[i] = sinc((i-M/2)/N)
0010 // window
0011 filter[i] *= 0.5-0.5*cos(2*PI*i/M)
0012 ENDFOR
0013 // acquire signal
0014 READ signal
0015 // perform polyphase structure
0016 FOR i in N
0017 b[i] = 0
0018 FOR j in P
0019 b[i] += filter[j*N+i]*signal[j*N+i]
0020 ENDFOR
0021 ENDFOR
0022 // perform FFT
0023 CALL fft(b,output,N)
0024 // write output
0025 WRITE out
0026
0027 fs=100;
0028 x = sin(2*pi*1e3/fs*n);
0029 M=2^17
0030 N=1024
0031 P=4
0032 filter=zeros(1,M);
0033 signal=zeros(1,M);
0034 out=zeros(1,M);
0035 for i=1:M
0036 filter(i)=sinc((i-M/2)/N);
0037 filter(i)=filter(i)*0.5-0.5*cos(2*3.1457*i/M);
0038 signal(i)=sin(i./(2*3.1457));
0039 end
0040
0041 b=zeros(1,N)
0042 for i=1:N
0043 for j = 1:P
0044 b(i)=b(i)+filter(j*N+i)*signal(j*N+i);
0045 end
0046 end
0047
0048 tt=abs(fft(b))