搜索
您的当前位置:首页FFT算法(用matlab实现)

FFT算法(用matlab实现)

来源:智榕旅游


数字信号处理实验报告

实验二 FFT算法的MATLAB实现

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

(二)实验原理:

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

N1knx(k)x(n)WNn0N11knx(n)x(k)WNNk00kN10nN1

WNej(2/N)

2、FFT算法

调用格式是

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

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

(三)实验内容

1、题一:若x(n)=cos(n*pi/6)是一个N=12的有限序列,利用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');

grid on;

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

clc;

N=12;

n=0:N-1;

xn=cos(n*pi/6);

Xk=fft(xn,N);

stem(n,Xk);

xlabel('k');

ylabel('Xk');

grid on;

实验结果:

6543Xk210-10246k81012

分析实验结果:

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

2、题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz和120Hz正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz,通过FFT来分析其信号频率成分,用MATLAB实现。

源程序:

clc;

fs=1000;

N=1024;

n=0:N-1;

t=n/fs;

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

y=fft(x,N);

mag=abs(y);

f=n*fs/N;

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

xlabel('频率/Hz');

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

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

xlabel('频率/Hz');

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

实验结果:

N=1024600600N=1024500500400400振幅300振幅0500频率/Hz1000300200200100100000200400频率/Hz600

分析实验结果:

用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,1)

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

title('原始语音信号'); grid;

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

subplot(2,2,2)

plot([1:N],y);

title('原始语音信号FFT变换'); grid;

y(y<1)=0;

subplot(2,2,3)

plot([1:N],y);

title('去掉幅值小于1的FFT变换值'); grid;

subplot(2,2,4)

plot([1:N],ifft(y));

title('重构语音信号'); grid;

实验结果:

原始语音信号10-1-20200400600去掉幅值小于1的FFT变换值8060402000200400600分析实验结果:

原始语音信号FFT变换1000-100-2000200400600重构语音信号10.50-0.5-10200400600

对语音信号的FFT变换,可以看出其频率的主要成分。去掉幅值小于1的FFT变换值后,重构语音信号发现,与原来的信号存在着细微的差别。

(四)心得体会:通过Matlab的仿真,形象地得出了离散序列运用FFT运算后的频域图形。FFT运算较DFT运算快速,且适合计算机的运算。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top