实验二快速傅里叶变换(FFT)及其应用 联系客服

发布时间 : 星期三 文章实验二快速傅里叶变换(FFT)及其应用更新完毕开始阅读8bedea61cf2f0066f5335a8102d276a2012960f8

在编辑调试窗中编写程序: function yy=xeni(N2,xen,i) for n=N2*i:1:N2*(i+1)-1 xeni(n-N2*i+1)=xen(n+1); end yy=xeni;

将上述文件存盘,文件名为xeni.m。

function yy=xenni(N1,N2,xen,i) for n=N2*i:1:N1+N2*(i+1)-2 xeni(n-N2*i+1)=xen(n+1); end yy=xeni;

将上述文件存盘,文件名为xenni.m。

function t=shiftmm(a,n) m=length(n); for i=1:1:a;

for j=m+i-1:-1:1 n(j+1)=n(j); end; end; for i=1:1:a n(i)=0; end; t=n;

将上述文件存盘,文件名为shiftmm.m。 退回到指令窗:

>> xcn=[0 1 2 3 4 3 2 1];xen=rand(1,512);

>> qqqqq=conv(xcn,xen);

>> stem([0:1:518],qqqqq);xlabel('n');ylabel('幅度');

>> N1=length(xcn);N2=length(xen)/8; >> xcn=[xcn zeros(1,N2-1)]; >> xck=fft(xcn); >> for i=1:1:8

xenii=xeni(N2,xen,i-1); xenii=[xenii zeros(1,N1-1)]; xeki=fft(xenii); yki=xck.*xeki; yni=ifft(yki); y(i,:)=yni; end;

>> for i=0:1:7 for j=0:1:i*N2-1

ynii(i+1,[0+1:1:i*N2-1+1])=0; end;

for j=i*N2:1:N1+(i+1)*N2-2

ynii(i+1,[i*N2+1:1:N1+(i+1)*N2-2+1])=y(i+1,:); end;

for j=N1+(i+1)*N2-1:1:N1+8*N2-2

ynii(i+1,[N1+(i+1)*N2-1+1:1:N1+8*N2-2+1])=0; end;

end;

>> yn=zeros(1,N1+8*N2-1); >> for i=1:1:8 yn=yn+ynii(i,:); end;

>> n=0:1:N1+8*N2-2;

>> stem(n,yn);xlabel('n');ylabel('幅度');legend('重叠相加法');

>> xen21=shiftmm(N1-1,xen); >> for i=1:1:8

xen2i(i,:)=xenni(N1,N2,xen21,i-1); end;

>> for i=1:1:8 xek2i=fft(xen2i(i,:)); yk2i=xck.*xek2i; yn2i=ifft(yk2i); y2(i,:)=yn2i;; end;

>> y2(:,1:N1-1)=[;;;;;;;;]; >> n2=0:1:8*N2-1;

>> stem(n2,[y2(1,:) y2(2,:) y2(3,:) y2(4,:) y2(5,:) y2(6,:) y2(7,:) y2(8,:)]);xlabel('n');ylabel('幅度');legend('重叠保留法');

(7)用FFT分别计算xa(n)(p?8,q?2)和xb(n)(a?0.1,f?0.0625)的16点循环相关和线性相关,问一共有多少种结果,它们之间有何异同点。

解答: 1)求线性相关 >> n=0:1:15;

>> xan=exp(-(n-8).^2/2);

>> xbn=exp(-0.1*n).*sin(2*pi*0.0625*n); >> k=length(xbn);

>> xan1=[xan zeros(1,k-1)]; >> xbn1=[xbn zeros(1,k-1)]; >> xak=fft(xan1); >> xbk=fft(xbn1);

>> rm=real(ifft(conj(xak).*xbk)); >> rm1=[rm(k+1:2*k-1) rm(1:k)]; >> m=(-k+1):(k-1);

>> stem(m,rm1);xlabel('n');ylabel('幅度');legend('线性相关');