matlab在DSP中的应用(七)---快速傅里叶变换(FFT)

一、实验目的
(1)加深对快速傅里叶变换(FFT)基本理论的理解。

(2)了解使用快速傅里叶变换(FFT)计算有限长序列和无限长序列信号频谱的方法。

(3)掌握用MATLAB语言进行快速傅里叶变换时常用的子函数。

二、实验涉及的MATLAB子函数
1.fft

功能:一维快速傅里叶变换(FFT)。

调用格式1:y=fft(x);

利用FFT算法计算矢量x的离散傅里叶变换,当x为矩阵时,y为矩阵x每一列的FFT。

当x的长度为2的幂次方时,则fft函数采用基2的FFT算法,否则采用稍慢的混合基算法。

调用格式2:y=fft(x,n);

采用n点FFT。

当x的长度小于n时,fft函数在x的尾部补零,以构成n点数据;

当x的长度大于n时,fft函数会截断序列x。当x为矩阵时,fft函数按类似的方式处理列长度。

2.ifft

功能:一维快速傅里叶逆变换(IFFT)。

调用格式1:y=ifft(x);

用于计算矢量x的IFFT。当x为矩阵时,计算所得的y为矩阵x中每一列的IFFT。

调用格式2:y=ifft(x,n);

采用n点IFFT。
当length(x) < n时,在x中补零;
当length(x) > n时,将x截断,使length(x)=n。

3.fftshift

功能:对fft的输出进行重新排列,将零频分量移到频谱的中心。

调用格式:y=fftshift(x);

对fft的输出进行重新排列,将零频分量移到频谱的中心。

当x为向量时,fftshift(x)直接将x中的左右两半交换而产生y。

当x为矩阵时,fftshift(x)同时将x的左右、上下进行交换而产生y。

三、实验原理

1.用MATLAB提供的子函数进行快速傅里叶变换

从理论学习可知,DFT是唯一在时域和频域均为离散序列的变换方法,它适用于有限长序列。尽管这种变换方法是可以用于数值计算的,但如果只是简单的按照定义进行数据处理,当序列长度很大时,则将占用很大的内存空间,运算时间将很长。

快速傅里叶变换是用于DFT运算的高效运算方法的统称,FFT只是其中的一种。FFT主要有时域抽取算法和频域抽取算法,基本思想是将一个长度为N的序列分解成多个短序列,如基2算法、基4算法等,大大缩短了运算的时间。 

MATLAB中提供了进行快速傅里叶变换(FFT)的子函数,用fft计算DFT,用ifft计算IDFT。

例1
已知xn=[0 0 0 1 1 1 1 1],对其进行FFT变换,作时域信号及DFT、IDFT的图形。

代码:

xn=[0 0 0 1 1 1 1];
N=length(xn);

Xk=fft(xn,N);
xn_=ifft(Xk,N);

n=0:N-1;k=0:N-1;
subplot(2,2,1);stem(n,xn);
title('变换之前的x[n]')
subplot(2,2,2);stem(n,xn_);
title('逆变换得到的x[n]')
subplot(2,2,[3,4]);stem(k,abs(Xk));
title('Xk幅值')

输出:

你可能感兴趣的:(matlab,matlab,fft,应用)