离散傅立叶变换与快速傅立叶变换
1. 用离散傅立叶变换程序处理时间抽样信号,并根据实序列离散傅立叶变换的对称性,初步判定程序的正确性
%实验二(1) 验证离散傅里叶变换的对称性 clc;clear; %清除命令行 %close all; %关闭所有窗口 N=8;a=0.7; n=[0:N-1]; xn=a.^n; k=n; WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^nk; Xk=xn*WNnk; %求出DFT变换 subplot(3,1,1) stem(n,xn,'filled','k'); axis([0,8,0,1.5]) %原序列 title('X(n) a=0.7'); subplot(3,1,2) stem(n,abs(Xk),'filled','k'); axis([0,8,0,5]) %幅度特性 title('X(k)幅度'); subplot(3,1,3) stem(n,angle(Xk),'filled','k'); axis([0,8,-1.5,1.5]) %相位特性 title('X(k)相位');
%实验二(2) 三角波序列与反三角波序列的频谱对比 clc;clear; close all; N=8;n=0:N-1; xc=[1:4,4:-1:1]; %三角波序列 xd=[4:-1:1,1:4]; %反三角序列 Xck=fft(xc,N); %xc的8点FFT变换 Xdk=fft(xd,N); %xd的8点FFT变换 subplot(2,2,1) stem(n,xc,'.k'); title('三角波序列时域波形'); %xc序列 subplot(2,2,3) stem(n,abs(Xck),'.k'); title('三角波序列幅频特性|Xc(k)|'); %幅频特性 axis([0,8,0,10]) subplot(2,2,2) stem(n,xd,'.k'); title('反三角波序列时域波形'); %xd序列 subplot(2,2,4) stem(n,abs(Xdk),'.k'); title('反三角波序列幅频特性|xd(k)|'); %幅频特性 axis([0,8,0,10]) figure subplot(2,1,1) [Hc,w]=freqz(xc,[1,zeros(1,7)]);plot(w,abs(Hc));grid on; %xc序列在单位圆上的Z变换频谱(|Xc(jw)|) title('三角波的单位圆上Z变换频谱|Xc(jw)|'); subplot(2,1,2) [Hd,w]=freqz(xd,[1,zeros(1,7)]);plot(w,abs(Hd));grid on; %xd序列在单位圆上的Z变换频谱(Xd(jw)|) title('反三角波的单位圆上Z变换频谱|Xd(jw)|'); %三角波的主瓣对应的低频分量更多,反三角波高频分量多
%实验二(3) 不同F、N、T条件下的FFT变换对比 clc;clear; close all; F=50;N=32;T=[0.000625,0.005,0.0046875,0.004]; n=[0:N-1]; xn=zeros(4,N);Xk=zeros(4,N); label={'F=50, N=32,T=0.000625';'F=50, N=32,T=0.005';'F=50, N=32,T=0.0046875';'F=50, N=32,T=0.004';'F=50, N=64,T=0.000625'}; for m=1:4 subplot(5,1,m) xn(m,:)=cos(2*pi*F*T(m).*n); Xk(m,:)=fft(xn(m,:),N); %进行N点FFT变换 stem(n,abs(Xk(m,:)),'.k'); %幅频特性 title(label(m)); end subplot(5,1,5) F=50;N=64;T=0.000625; n=[0:N-1];xn5=cos(2*pi*F*T.*n);Xk5=fft(xn5,N); stem(n,abs(Xk5),'.k');title(label(5));
比较DFT与FFT的运行速度
%实验二(4) DFT与FFT运行时间 clc; clear; close all; N=1024;M=80;x=[1:M,zeros(1,N-M)]; t=cputime; %添加定时器 y1=fft(x,N); Time_fft=cputime-t %得到FFT运算时间 t1=cputime; n=[0:N-1]; k=n;WN=exp(-j*2*pi/8);nk=n'*k; WNnk=WN.^nk; y2=x*WNnk; Time_dft=cputime-t1 %得到DFT运行时间
利用编制的计算卷积的计算程序,分别给出一下三组函数的卷积结果。
%实验二(5) 利用FFT的循环卷积计算线性卷积 clc; close all; n=0:14; x=ones(1,15); h=(0.8).^n; L=length(x)+length(h)-1; X=fft(x,L); H=fft(h,L); y=ifft(X.*H); %得到卷积后的序列 figure subplot(3,3,1);stem(n,x,'filled');title('x(n)'); subplot(3,3,4);stem(n,h,'filled');title('h(n)'); n=0:L-1; subplot(3,3,7);stem(n,real(y),'filled');title('卷积结果y(n)'); n=0:19; x=[ones(1,10),zeros(1,10)]; h=0.5*sin(0.5.*n); L=length(x)+length(h)-1; X=fft(x,L); H=fft(h,L); y=ifft(X.*H); %得到卷积后的序列 subplot(3,3,2);stem(n,x,'filled');title('x(n)'); subplot(3,3,5);stem(n,h,'filled');title('h(n)'); n=0:L-1; subplot(3,3,8);stem(n,real(y),'filled');title('卷积结果y(n)'); n=0:9; x=1-0.1.*n; h=0.1.*n; L=length(x)+length(h)-1; X=fft(x,L); H=fft(h,L); y=ifft(X.*H); %得到卷积后的序列 subplot(3,3,3);stem(n,x,'filled');title('x(n)'); subplot(3,3,6);stem(n,h,'filled');title('h(n)'); n=0:L-1; subplot(3,3,9);stem(n,real(y),'filled');title('卷积结果y(n)');