安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第11页页共共1111页页安安富富莱莱SSTTMM3322--VV55开开发发板板数数字字信信号号处处理理教教程程文档版本:V1.0安安富富莱莱电电子子日日版版本本::11..00第第22页页共共1111页页声声明明本本文文档档的的版版权权归归武武汉汉安安富富莱莱电电子子有有限限公公司司所所有有。。任任何何公公司司或或者者个个人人未未经经许许可可,,不不得得将将本本文文档档用用于于商商业业目目的的。。本本文文档档由由安安富富莱莱电电子子原原创创,,非非我我们们原原创创的的资资料料已已经经在在章章节节的的开开头头进进行行申申明明((特特别别是是FFFFTT部部分分))。。教教程程中中使使用用的的DDSSPP库库是是来来自自AARRMM公公司司。。教教程程参参考考资资料料如如下下::CCoorrtteexx--MM44权权威威指指南南。。数数字字信信号号处处理理理理论论、、算算法法与与实实现现第第二二版版((作作者者::胡胡广广书书))。。信信号号与与系系统统第第二二版版((作作者者::奥奥本本海海姆姆))。。MMaattllaabb的的hheellpp文文档档。。力力科科示示波波器器基基础础应应用用系系列列文文档档。。百百度度百百科科,,wwiikkii百百科科。。网网络络资资源源。。SSTT官官方方相相关关文文档档。。安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第33页页共共1111页页第第2277章章FFFFTT的的MMaattllaabb实实现现本章主要讲解fft,ifft和fftshift在matlab上的实现。27.1FFT函数27.2IFFT函数27.3FFTSHIFT函数27.4总结2277..11FFFFTT函函数数2277..11..11语语法法Y=fft(x)Y=fft(X,n)Y=fft(X,[],dim)Y=fft(X,n,dim)2277..11..22定定义义Y=fft(x)和y=ifft(X)分别用于实现正变换和逆变换,公式描述如下:2277..11..33描描述述Y=fft(x)此函数用于返回向量x的离散傅立叶变换(DFT),计算时使用快速傅里叶算法(fastFouriertransform(FFT))。如果输入X是一个矩阵,Y=fft(X)返回该矩阵的每列的傅里叶变换。安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第44页页共共1111页页如果输入X是一个多维数组,实现第一个尺寸不为1的维度的FFT变化,注意这里第一个尺寸不为1是指一个矩阵的第一个尺寸不为1的维。比如一个矩阵是2*1,那么第一个尺寸不为1的维就是行(尺寸为2)X是1*2*3表示第一个尺寸不为1的维就是列(尺寸为2)X为维数5*6*2的话,第一个尺寸不为1的维就是行(尺寸为5))Y=fft(X,n)此函数用于返回n点的DFT。fft(n)和fft(X,n)是等同的,其中n是向量X中第一个尺寸不为1的维度。如果X的长度小于n,则X的长度通过填充零达到长度为n。如果X的长度大于n,序列X被截断。当X是一个矩阵,各列的长度都以相同的方式进行调整。Y=fft(X,[],dim)Y=fft(X,n,dim)上面两个函数用于实现指定维度的FFT运算。2277..11..44FFFFTT实实例例一一::幅幅频频响响应应傅里叶变换的一个常见用途就是查找埋藏在噪声信号中的实际信号的频率成分。下面我们考虑一个这样的例子:采样率是1000Hz,信号由如下三个波形组成。(1)50Hz的正弦波、振幅0,7。(2)70Hz正弦波、振幅1。(3)均值为0的随机噪声。实际运行代码如下:Fs=1000;%采样率T=1/Fs;%采样时间单位L=1000;%信号长度t=(0:L-1)*T;%时间序列x=0.7*sin(2*pi*50*t)+sin(2*pi*120*t);%原始信号y=x+2*randn(size(t));%原始信号叠加了噪声后plot(Fs*t(1:50),y(1:50));%绘制波形title('原始信号+零均值随机噪声');xlabel('时间单位:ms');运行Matlab后,显示波形如下:安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第55页页共共1111页页通过上面的截图,我们是很难发现波形中的频率成分,下面我们通过FFT变换,从频域观察就很方便了,Matlab运行代码如下:Fs=1000;%采样率T=1/Fs;%采样时间单位L=1000;%信号长度t=(0:L-1)*T;%时间序列x=0.7*sin(2*pi*50*t)+sin(2*pi*120*t);%原始信号y=x+2*randn(size(t));%原始信号叠加了噪声后NFFT=2^nextpow2(L);%求得最接近采样点的2^n,由于上面是1000点,那么最近的就是1024点。Y=fft(y,NFFT)/L;%进行FFT变换,除以总的采样点数,方便观察实际值。f=Fs/2*linspace(0,1,NFFT/2+1);%频率轴,这里只显示Fs/2部分,另一半是对称的。plot(f,2*abs(Y(1:NFFT/2+1)))%绘制波形title('幅频相应');xlabel('频率');ylabel('幅度');01020304050-4-3-2-1012345原始信号+零均值随机噪声时间单位:ms安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第66页页共共1111页页从上面的幅频相应,我们可以看出,两个正弦波的频谱并不是准确的0.5和1,而是比较接近,这个就是咱们在上节教程中所示的频谱泄露以及噪声的干扰。2277..11..55FFFFTT实实例例二二::相相频频响响应应这里我们以采样率=256Hz采样信号1.5*sin(2*pi*50*t+pi/3),并求出其幅频和相频响应,Matlab上面运行的代码如下:Fs=256;%采样率N=256;%采样点数n=0:N-1;%采样序列t=0:1/Fs:1-1/Fs;%时间序列f=n*Fs/N;%真实的频率x=1.5*sin(2*pi*50*t+pi/3);%原始信号y=fft(x,N);%对原始信号做FFT变换Mag=abs(y);%求FFT转换结果的模值subplot(2,1,1);plot(f,Mag);%绘制幅频相应曲线010020030040050000.10.20.30.40.50.60.70.80.91幅频相应频率幅度安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第77页页共共1111页页title('幅频相应');xlabel('频率/Hz');ylabel('幅度');subplot(2,1,2);plot(f,angle(y)*180/pi);%绘制相频响应曲线,注意这将弧度转换成了角度title('相频响应');xlabel('频率/Hz');ylabel('幅度');运行后求出的幅频相应和相频响应结果如下:2277..22IIFFFFTT函函数数2277..22..11语语法法y=ifft(X)y=ifft(X,n)y=ifft(X,[],dim)y=ifft(X,n,dim)050100150200250300050100150200幅频相应频率/Hz幅度050100150200250300-200-1000100200相频响应频率/Hz幅度安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第88页页共共1111页页y=ifft(...,'symmetric')y=ifft(...,'nonsymmetric')2277..22..22描描述述y=ifft(X)此函数用于返回向量X的离散傅立叶变换(DFT)逆变换结果,计算时使用快速傅里叶算法(fastFouriertransform(FFT))。y=ifft(X,n)此函数用于返回n点的IDFT。y=ifft(X,[],dim)y=ifft(X,n,dim)上面两个函数用于实现指定维度的IFFT运算。2277..22..33IIFFFFTT实实例例下面我们对信号:0.7*sin(2*pi*50*t)+sin(2*pi*120*t)求FFT和IFFT,并绘制原始信号和转换后的信号。Matlab上运行的代码如下:Fs=1000;%采样率T=1/Fs;%采样时间L=1024;%信号长度t=(0:L-1)*T;%时间序列y=0.7*sin(2*pi*50*t)+sin(2*pi*120*t);%50Hz正弦波和120Hz的正弦波的叠加subplot(2,1,1);plot(Fs*t(1:50),y(1:50));%绘制原始信号title('原始信号');Y=fft(y,L);%分别调用正变换和逆变换Z=ifft(Y);subplot(2,1,2);plot(Fs*t(1:50),Z(1:50));%绘制逆变换后的波形title('FFT和IFFT转换后的信号');运行后求出的结果如下:安安富富莱莱电电子子UUMM440033日日版版本本::11..00第第99页页共共1111页页通过上面的运行结果可以看出,转换后的波形与原始的波形基本是一样的。2277..33FFFFTTSSHHIIFFTT函函数数fftshift的作用正是让正半轴部分和负半轴部分的图像分别关于各自的中心对称。因为直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来以下是Matlab的帮助文件中对fftshift的说明:Y=fftshift(X)rearrangestheoutputsoffft,fft2,andfftnbymovingthezero-frequencycomponenttothecenterofthearray.ItisusefulforvisualizingaFouriertransformwiththezero-frequencycomponentinthemiddleofthespect