离散傅里叶变换及FFT应用实验
一、实验目的
   
1、掌握离散时间傅立叶变换(DTFT)的计算方法和编程技术。
2、掌握离散傅立叶变换(DFT)的计算方法和编程技术。
3、理解离散傅立叶变换(DFT)的性质并用MATLAB进行验证。
4、理解用FFT对周期序列进行频谱分析时所面临的问题并掌握其解决方法。
5、掌握用时域窗函数加权处理的技术。
6、理解用FFT对非周期信号进行频谱分析所面临的问题并掌握其解决方法。
二、实验器材
   
    MATLAB软件
三、实验原理
   
1、离散时间傅立叶变换
如果序列x(n)满足绝对可和的条件,即,则其离散时间傅立叶变换定义为:
                                             
如果x(n)是无限长的,则不能直接用MATLAB由x(n)计算X(ej ),但可以用它来估计X(ej )表达式在[0,π]频率区间的值并绘制它的幅频和相频(或实部和虚部)曲线。
如果x(n)是有限长的,则可以用MATLAB对任意频率 处的X(ej )进行数值计算。如果要在[0,π]间按等间隔频点估计X(ej ),则(1)式可以用矩阵-向量相乘的运算来实现。假设序列x(n)在(即不一定在[0, N-1])有N个样本,要估计下列各点上的X(ej ):
它们是[0,π]之间的(M+1)个等间隔频点,则(1)式可写成:
                                   
将{x(nl)}和{X(ej k)}分别排列成向量x和X,则有:
                                  X=Wx                               
其中W是一个(M+1)×N维矩阵:
    将{k}和{n}排成列向量,则
在MATLAB中,把序列和下标排成行向量,对(3)式取转置得:
其中nTk是一个N×(M+1)维矩阵。用MATLAB实现如下:
k=[0:M]; n=[n1:n2];
X=x*(exp(-j*pi/M)).^(n’*k);
2、离散傅立叶变换   
一个有限长序列的离散傅立叶变换对定义为:
                                       
                                       
以列向量x和X形式排列x(n)和X(k),则式(4)、(5)可写成:
matlab求傅里叶变换
X=WNx
其中矩阵WN由下式给出:
3、对时间序列作FFT时,实际上要作周期延拓(如果取长序列的一段进行计算还要先作截
断)。周期序列是无限长时间序列,如果截断区间刚好就是该序列周期的整数倍,那么在进行周期延拓后,将还原出原来的周期序列,由此可以较精确地计算出的该周期序列的频谱。反之,如果截断区间并不是该序列周期的整数倍,那么在进行周期延拓后,就不可能还原出原来的周期序列,由此计算出的频谱与该周期序列的频谱存在误差,而且误差的大小与截断区间的选取直接相关.
四、实验内容
1.用傅立叶变换出被噪声污染的时域信号中的信号的频率分量。1000Hz采样的数据,由50Hz振幅为0.7的正弦信号和120Hz振幅1的正弦信号组成合成信号,叠加形成零均值所污染的噪声。
程序代码:
clear
clc
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));
figure(1)
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
NFFT=2^nextpow2(L);
tic
Y=fft(y,NFFT)/L;
toc
f=Fs/2*linspace(0,1,NFFT/2+1);
figure(2)
plot(f,2*abs(Y(1:NFFT/2+1)))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。