实验五快速傅里叶变换.docx
《实验五快速傅里叶变换.docx》由会员分享,可在线阅读,更多相关《实验五快速傅里叶变换.docx(14页珍藏版)》请在冰豆网上搜索。
![实验五快速傅里叶变换.docx](https://file1.bdocx.com/fileroot1/2023-1/28/196670d3-de3b-4ba4-89b7-e1512ad4239a/196670d3-de3b-4ba4-89b7-e1512ad4239a1.gif)
实验五快速傅里叶变换
实验五快速傅里叶变换(FFT)及其应用
实验目的:
快速傅里叶变换并不是一种新的变换方法,它是计算DFT的一种有效算法。
他是信号谱分析的有力工具。
通过本次试验,学习使用FFT进行信号分析的方法,加深对FFT的理解;理解应用FFT进行信号谱分析可能出现的问题,如:
频谱混叠,栅栏效应,频谱泄漏等,以便在实际中正确处理。
实验任务:
1通过实际例子学习使用FFT分析信号的方法。
对信号
进行DFT,对其结果进行IDFT,并IDF的结果和原信号进行比较。
程序如下:
%第一题
Fs=1/0.01
figure
(1)
N=50;n=0:
N-1;t=0.01*n;
q=n*Fs./N;
x=sin(80*pi*t)+2*sin(30*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=100');
%
figure
(2)
yf=ifft(fft(x,N));
stem(q,abs(yf));
title('IFFTN=100');
得到图像如下:
2.通过采样点数的不同,了解对此信号幅度谱的影响。
已知信号由15Hz幅值0.5的正弦信号和40Hz幅值为2的正弦信号组成,数据采样频率为100Hz,试分别复制N=128点和N=1024点的DFT幅频图。
程序如下:
%第二题
Fs=1/0.01
figure
(1)
N=128;n=0:
N-1;t=0.01*n;
q=n*Fs./N;
x=0.5*sin(30*pi*t)+2*sin(80*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=128');
%
figure
(2)
N=1024;n=0:
N-1;t=0.01*n;
q=n*Fs./N;
x=0.5*sin(30*pi*t)+2*sin(80*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFTN=1024');
图像如下所示:
3.编程实现对下列正弦信号的FFT分析,并讨论实验结果。
a.信号频率F=50Hz,采样长度N=32,采样时间T=0.000625s,
b信号频率F=50Hz,采样长度N=32,采样时间T=0.005s,
c.信号频率F=50Hz,采样长度N=32,采样时间T=0.0046875s,
d.信号频率F=50Hz,采样长度N=32,采样时间T=0.004s,
e.信号频率F=50Hz,采样长度N=64,采样时间T=0.000625s,
f.信号频率F=250Hz,采样长度N=32,采样时间T=0.005s,
g.信号频率F=50Hz,采样长度N=32,采样时间T=0.0046875s,后补32个0做64点FFT。
程序如下:
%第三题。
figure
(1)
Fs=1/0.000625
N=32;n=0:
N-1;t=0.000625*n;
q=2*n*pi/N;
x=sin(100*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=32');
figure
(2)
Fs=1/0.005
N=32;n=0:
N-1;t=0.005*n;
q=2*n*pi/N;
x=sin(100*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=32');
figure(3)
Fs=1/0.0046875
N=32;n=0:
N-1;t=0.0046875*n;
q=2*n*pi/N;
x=sin(100*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=32');
figure(4)
Fs=1/0.004
N=32;n=0:
N-1;t=0.004*n;
q=2*n*pi/N;
x=sin(100*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=32');
figure(5)
Fs=1/0.000625
N=64;n=0:
N-1;t=0.000625*n;
q=2*n*pi/N;
x=sin(100*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=64');
figure(6)
Fs=1/0.005
N=32;n=0:
N-1;t=0.005*n;
q=2*n*pi/N;
x=sin(500*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=32');
figure(7)
Fs=1/0.0046875
N=32;n=0:
N-1;t=0.0046875*n;
q=2*n*pi/N;
x=sin(500*pi*t);
y=fft(x(1:
32),zeros(1,32))
stem(q,abs(y));
title('FFTN=32');
得到图像如下:
4.线性卷积的FFT算法
【例5-1】模拟信号
,t=0.01,n(n=0:
N-1)进行取样。
求:
N东岸DFT的幅度值。
N分别为:
(1)N=15;
(2)N=25;(3)N=35;(4)N=55。
解:
matlab程序如下:
Fs=1/0.01
figure
(2)
N=50;n=0:
N-1;t=0.01*n;
q=n*Fs./N;
x=2*sin(4*pi*t)+5*sin(8*pi*t);
y=fft(x,N)
stem(q,abs(y));
title('FFTN=50');
figure
(1)
subplot(2,2,1)
N=15;n=0:
N-1;t=0.01*n;
q=2*n*pi/N;
x=2*sin(4*pi*t)+5*sin(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFTN=15');
subplot(2,2,2)
N=25;n=0:
N-1;t=0.01*n;
q=2*n*pi/N;
x=2*sin(4*pi*t)+5*sin(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFTN=25');
subplot(2,2,3)
N=35;n=0:
N-1;t=0.01*n;
q=2*n*pi/N;
x=2*sin(4*pi*t)+5*sin(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFTN=35');
subplot(2,2,4)
N=55;n=0:
N-1;t=0.01*n;
q=2*n*pi/N;
x=2*sin(4*pi*t)+5*sin(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFTN=55');
执行后可得如图所示的信号频谱。
分析取不同的N值时,其精度有什么样的变化,当N取何值时,其精度会与N值无关。
得到图像如下:
【例5-2】在上例的基础上,N=64,并在信号中加入噪声(正态)w(t),
试比较有无噪声时的信号谱。
figure
(1);
subplot(2,1,1)
N=64;n=0:
N-1;t=0.01*n;
q=2*n*pi/N;
x=2*sin(4*pi*t)+5*sin(8*pi*t);
y=fft(x,N);
plot(q,abs(y));
title('FFTN=64');
subplot(2,1,2)
N=64;n=0:
N-1;t=0.01*n;
q=2*n*pi/N;
x=2*sin(4*pi*t)+5*sin(8*pi*t)+0.8*randn(1,N);
y=fft(x,N);
plot(q,abs(y));
title('FFTN=64(withnoise)');
得到图像如下:
执行后可得如图所示的信号频谱。
从图中可以看到,在信号检测的意义上,这种噪声不会影响信号的频谱。
【例5-3】用函数conv和FFT计算长度为1000的序列的卷积,比较其计算时间。
编程如下:
clf;
L=5000;N=2*L-1;
n=1:
L;
x1=0.5*n;x2=2*n;
t0=clock
yc=conv(x1,x2);
tc=etime(clock,t0)
yf=ifft(fft(x1,N).*fft(x2,N));
tf=etime(clock,t0)
n1=0:
length(yf)-1;
figure
(1)
plot(n1,yc,'r')
figure
(2)
plot(n1,yf,'b')
图像如下
:
其中:
tc=0.2640s,tf=0.2760s.