fft算法的matlab实现过程详解

matlab实验

10人已加入

描述

  fft算法的matlab实现过程详解

        (一) 实验目的: 理解离散傅立叶变换时信号分析与处理的一种重要变换,特别是FFT 在数字信号处理中的高效率应用。

  (二) 实验原理:

  1、有限长序列x(n)的DFT的概念和公式:

  matlab

  2、FFT 算法

  调用格式是

  X= fft(x) 或X=fft(x.N)

  对前者,若x 的长度是2的整数次幂,则按该长度实现x 的快速变换,否则,实现的是慢速的非2的整数次幂的变换; 对后者,N应为2的整数次幂,若x的长度小于N,则补零,若超过N,则舍弃N 以后的数据。Ifft 的调用格式与之相同。

  (三) 实验内容

  l、题- ~:若x(n)=cos(n*pi/6)是- 一个N=l2 的有限序列,利用MATLAB 计算它的

  DFT 并画出图形。

  源程序:

  clc;

  N=12;

  n=0:N- 1;

  k=0:N- 1;

  xn=cos( n *pi/6);

  W=exp(-j* 2* pi/N );

  kn=n‘*k

  Xk=xn*(W.^kn)

  stem( n,Xk );

  xlabel(k

  ylabel(Xk’);

  gridon ;

  也可用FFT 算法直接得出结果,程序如F:

  clc;

  N=l2;

  n=0: N- 1;

  xn=cos(n*pi/6);

  Xk=fft(xn,N):

  stem( n,Xk );

  xlabel( k );

  ylabel( Xk‘);

  gridon;

  实验结果

  matlab

  分析实验结果:

  用DFT 和用FFT对序列进行运算,最后得到的结果相同。但用快速傅立叶变换的运算速度可以快很多。

  2、题二:一被噪声污染的信号,很难看出它所包含的频率分量,如- -个由50HZ和120HZ 正弦信号构成的信号,受均值随机噪声的干扰,数扒采样率为1000Hz,

  通过FFT 来分析其信号频率成分,用MATLAB实现。

  源程序:

  clc;

  fs = 1000;

  N=1024;

  n=0:N- l;

  t=n/fs;

  x=sin(2*pi*50*t)+sin(2*pi* 120*[)+rand( l,N);

  y=fft(x,N );

  mag=abs( y );

  f=n t fs/N ;

  subplot( l,2,l),plot(f,mag );

  xlabel(频率/Hz‘);

  ylabel(振幅’);title( N= 102 4);grid on;

  subplot( 1,2,2),plot(f( l:N/2),mag( 1:N/2 );

  xlabel(“频率/Hz);

  ylabel(振幅);title( N= 1024 );grid

  on;

  实验结果;

  matlab

  分析实验结果:

  用FFT 运算,将序列转变到频域上,虽然信号受到均值随机噪声的干扰,但分析频谱可清楚看到原信号的频率,50Hz 120Hz。

  3、题三:调用原始语音信号mtlb,对其进行FFT 变换尼去掉幅值小于1的FFT最后重构语音信号。变换值,最后重构语言信号。

  (要求有四幅语音信号的频谱图在同一图形窗口以便比较: 分别是1、原始语音信号;2、FFT 变换; 3 去掉幅值小于1的FFT 变换值;4、重构语音信号)

  源程序:

  clc;

  load mtlb

  % Load data

  N=512;

  subplot(2,2,l)

  plot([ l:N],mtlb( 1:N));

  title(属i始语音信号‘); grid;

  y=ff(mtlb( 1:N));

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分