0001
0002
0003
0004 M = 31;
0005 N = 64;
0006 M = 8192;
0007 N = 8192;
0008
0009
0010
0011 wxT = 2*pi/4;
0012 A = 1;
0013 phix = 0;
0014
0015
0016 n = [0:N-1];
0017 x = A * exp(j*wxT*n+phix);
0018
0019
0020 nm = [0:M-1];
0021
0022 w=hamming(M)'
0023 w=blackman(M)'
0024 w=w.*sinc([-M/2:M/2])
0025
0026
0027 fs = 500e6;
0028 cutoff =8e6;
0029 t = -256:256;
0030 r = 2*cutoff/fs;
0031 pfbTaps=2;
0032 unPFBFFTsize=128;
0033 PFBFFTSize=128.*pfbTaps;
0034 t=[-8192./2:8192./2-1];
0035 t=[-unPFBFFTsize./2:unPFBFFTsize./2-1];
0036 tpfb=[-PFBFFTSize./2:PFBFFTSize./2-1];
0037
0038 wxT = 200e6;
0039 A = 1;
0040 phix = 0;
0041 x = A * exp(j*wxT*t+phix);
0042 xpfb = A * exp(j*wxT*tpfb+phix);
0043
0044 blackmanfft=fftshift(fft([blackman(length(t))' zeros(1,65536)]));
0045 hammingfft=fftshift(fft([hamming(length(t))' zeros(1,65536)]));
0046 Bblackman=[ x.*sinc(r*t).*r .* blackman(length(t))',zeros(1,65536)];
0047 Bsquare = [x.*sinc(r*t).*r ,zeros(1,65536)];
0048 Bfft=[x,zeros(1,65536)];
0049 Bhamming= [x.*sinc(r*t).*r .* hamming(length(t))' zeros(1,65536)];
0050 Bhammingpfb= [xpfb.*sinc(r*tpfb).*r .* hamming(length(tpfb))'];
0051
0052
0053 v=zeros(pfbTaps,length(t))
0054 for i=1:pfbTaps
0055 v(i,:)=Bhammingpfb(1+(i-1).*length(t):(i).*length(t))
0056 end
0057
0058 BhammingpfbAdded=[v(1,:)+v(2,:) zeros(1,65536)];
0059
0060
0061 fftBblackman=fftshift(fft(Bblackman));
0062 fftBsquare=fftshift(fft(Bsquare));
0063 fftBshamming=fftshift(fft(Bhamming));
0064 fftBpfbhamming=fftshift(fft(BhammingpfbAdded));
0065 fftB=fftshift(fft(Bfft,128));
0066 fsS=linspace(1,fs,length(fftBblackman));
0067 import measuredpfbResponse.mat
0068
0069
0070
0071
0072 fsSquare=linspace(1,fs,length(fftB))
0073
0074 plot(fsSquare,20*log10(abs(fftB)./max(abs(fftB))))
0075
0076 plot(fsS,20*log10(abs(fftBshamming)))
0077 hold all
0078 plot(fsS,20*log10(abs(fftBsquare)))
0079 plot(fsS,20*log10(abs(fftBpfbhamming)))
0080
0081
0082 wzp = [w,zeros(1,N-M)];
0083 xw = x .* wzp;
0084
0085
0086 plot(n,wzp,'-'); hold on;
0087 plot(n,real(xw),'*');
0088 title('Hanning Window and Windowed, Zero-Padded, Sinusoid (Real Part)');
0089 xlabel('Time (samples)'); ylabel('Amplitude'); hold off;
0090
0091
0092
0093
0094
0095
0096
0097
0098 Xw = fft(xw);
0099 fn = [0:1.0/N:1-1.0/N];
0100 spec = 20*log10(abs(Xw));
0101
0102 spec = max(spec,-100*ones(1,length(spec)));
0103 phs = angle(Xw);
0104 phsu = unwrap(phs);
0105
0106 Nzp = 16;
0107 Nfft = N*Nzp;
0108 xwi = [xw,zeros(1,Nfft-N)];
0109 Xwi = fft(xwi);
0110 fni = [0:1.0/Nfft:1.0-1.0/Nfft];
0111 speci = 20*log10(abs(Xwi));
0112 speci = max(speci,-100*ones(1,length(speci)));
0113 phsi = angle(Xwi);
0114 phsiu = unwrap(phsi);
0115
0116 xi = [x,zeros(1,Nfft-N)];
0117 Xi = fft(xi);
0118 specxi = 20*log10(abs(Xi));
0119 specxi = max(specxi,-20*ones(1,length(specxi)));
0120 phsi = angle(Xi);
0121 phsiu = unwrap(phsi);
0122
0123
0124
0125
0126
0127
0128
0129 plot(fni,abs(Xwi));
0130 title('Spectral Magnitude');
0131 xlabel('Normalized Frequency (cycles per sample))');
0132 ylabel('Amplitude (Linear)');
0133
0134
0135 plot(fni,abs(Xi));
0136 hold all
0137 plot(fni,abs(Xwi));
0138 title('Spectral Magnitude');
0139 xlabel('Normalized Frequency (cycles per sample))');
0140 ylabel('Amplitude (Linear)');
0141
0142 plot(fn,spec,'*'); hold all;
0143
0144 fni=[1:length(abs(Xi))]./Nzp;
0145 plot(fni,20*log10(abs(Xi)./max(abs(Xi))));
0146 hold all
0147 plot(fni,20*log10(abs(Xwi)./max(abs(Xwi))));
0148 title('Spectral Magnitude (dB)');
0149 xlabel('Normalized Frequency (cycles per sample))');
0150 ylabel('Magnitude (dB)');
0151 xlim([2040 2056])
0152 ylim([-60 0])
0153
0154
0155
0156
0157 pfbTaps=4;
0158
0159 tap1=xw(1:M./pfbTaps);
0160 tap2=xw(M./pfbTaps+1:2.*M./pfbTaps);
0161 tap3=xw(2.*M./pfbTaps+1:3.*M./pfbTaps);
0162 tap4=xw(3.*M./pfbTaps+1:4.*M./pfbTaps);
0163 xwPfb=tap1+tap2+tap3+tap4;
0164
0165 fftSize=2048
0166 pfbTaps=2
0167 dataWindowSize=fftSize*pfbTaps
0168 M=dataWindowSize
0169 tap1=xw(1:M./pfbTaps);
0170 tap2=xw(M./pfbTaps+1:2.*M./pfbTaps);
0171 xwPfb2=tap1+tap2;
0172
0173 Npoly=8192
0174 Nzp = 16;
0175 Nfft = Npoly*Nzp;
0176 xwi = [xw,zeros(1,Nfft-Npoly)];
0177 Xwi = fft(xwi);
0178 fnixw= [0:1.0/Nfft:1.0-1.0/Nfft];
0179
0180 XwiDec=Xwi(1:pfbTaps:length(Xwi))
0181 fnixw= [0:1.0/Nfft:1.0-1.0/Nfft];
0182
0183
0184 Npoly=8192
0185 Nzp = 16;
0186 Nfft = Npoly*Nzp;
0187 x = [x,zeros(1,Nfft-Npoly)];
0188 X = fft(x);
0189 fnix= [0:1.0/Nfft:1.0-1.0/Nfft];
0190
0191 Npoly=2048
0192 XwPfB = fft(xwPfb);
0193 Nzp = 16;
0194 Nfft = Npoly*Nzp;
0195 xwpfbi = [xwPfb,zeros(1,Nfft-Npoly)];
0196 XwPfbi = fft(xwpfbi);
0197 fniXwp = [0:1.0/Nfft:1.0-1.0/Nfft];
0198
0199 Npoly=2048
0200 XwPfB2 = fft(xwPfb2);
0201 Nzp = 16;
0202 Nfft = Npoly*Nzp;
0203 xwpfb2i = [xwPfb2,zeros(1,Nfft-Npoly)];
0204 XwPfb2i = fft(xwpfb2i);
0205 fni = [0:1.0/Nfft:1.0-1.0/Nfft];
0206
0207
0208
0209 Nfft=32768
0210 xwi = [xw,zeros(1,(Nfft-length(xw)))];
0211 Xwi = fft(xwi);
0212
0213
0214
0215 fni=[1:length(abs(XwPfbi))]./Nzp;
0216
0217
0218 plot(fni,20*log10(abs(XwPfbi)./max(abs(XwPfbi))));
0219 hold all
0220 plot(fni,20*log10(abs(XwPfb2i)./max(abs(XwPfb2i))));
0221
0222 plot(fnixw,20*log10(abs(Xwi)./max(abs(Xwi))));
0223 hold all
0224 plot(fnix,20*log10(abs(X)./max(abs(X))));
0225
0226
0227
0228
0229
0230
0231 plot(20*log10(abs(XwPfB)./max(abs(XwPfB))),'r');
0232 xlim([500 520])
0233
0234 plot(20*log10(abs(XwPfB)))
0235
0236
0237 xwPfbi=resample(xwPfb,16,1);
0238 XwPfbi = fft(xwpfbi);
0239
0240 plot(fni(1:4:length(fni)),20*log10(abs(Xwi(1:4:length(fni))./max(abs(Xwi)))));
0241
0242