fft算法的matlab实现过程详解(一)实验目的:了解离散傅里叶变换中信号分析与处理的一个重要变换,尤其是FFT在数字信号处理中的高效应用。(2
fft算法的matlab实现过程详解(一)实验目的:了解离散傅里叶变换中信号分析与处理的一个重要变换,尤其是FFT在数字信号处理中的高效应用。
(2)实验原理:
1、有限长序列x(n)的DFT概念和公式;
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 ');
格里登;
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 ');
格里登;
实验结果
实验结果分析:
用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;
支线剧情(l,2,l),剧情(f,mag);
Xlabel(频率/赫兹');
Ylabel(振幅’);标题(N=102 4);网格打开;
支线剧情(1,2,2),剧情(f( l:N/2),mag(1:N/2);
Xlabel(“频率/赫兹”);
Ylabel(振幅);标题(N=1024);格子
开;
实验结果;
实验结果分析:
使用FFT运算,将序列变换到频域。虽然信号受到平均随机噪声的干扰,但是通过分析频谱可以清楚地看到原始信号的频率,50hz和120hz。
3、问题3:调用原始语音信号mtlb,对其进行FFT变换,去除幅度小于1的FFT,最后重构语音信号。转换值,最后重构语言信号。
(要求在同一个图形窗口中有四个语音信号的频谱图进行对比1、原始语音信号;2、FFT变换;3.去除幅度小于1的FFT变换值;重建语音信号)
源程序:
clc
装载mtlb
%加载数据
N=512
子情节(2,2,l)
plot([ l:N],mtlb(1:N));
标题(属于I-初始语音信号’);网格;
y=ff(mtlb(1:N));
声明本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们