离散傅立叶变换与快速傅立叶变换

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)');

 

posted @ 2021-03-28 23:36  为红颜  阅读(766)  评论(0编辑  收藏  举报