离散傅里叶变换(DFT)是数字信号处理的主要工具。该产品的基础是快速傅里叶变换(FFT),这是一种计算DFT并减少执行时间的方法。工具箱中的许多函数(包括Z-频域响应,频谱和倒谱分析,以及一些滤波器的设计和实现功能)包括FFT。
MATLAB®环境提供了这些函数fft
和传输线
分别计算离散傅里叶变换及其反变换。对于输入序列x以及它的变形版本X(在单位圆周围等间隔频率的离散时间傅里叶变换),这两个函数实现了这些关系
和
在这些方程中,级数的下标从1开始,而不是从0开始,因为MATLAB中的向量标引方案是这样的
请注意MATLAB的惯例是用负号j为fft
函数。这是一个工程惯例;物理学和纯数学通常使用正数j。
fft
,只有一个输入参数,x
,计算输入向量或矩阵的DFT。如果x
是一个矢量,fft
计算向量的DFT;如果x
是一个矩形数组,fft
计算每个数组列的DFT。
例如,创建一个时间矢量和信号:
t = 0:1/100:10-1/100;%的时间向量x = sin(2* *15*t) + sin(2* *40*t);%的信号
计算信号的DFT和变换序列的幅度和相位。通过将小量值转换为零来减少相位计算时的舍入误差。
y = fft (x);计算DFT (xm = abs (y);%级y (m < 1 e-6) = 0;p =打开(角(y));%的阶段
要绘制星等和相位的度数,请输入以下命令:
f =(0:长度(y) 1) * 100 /长度(y);%频率向量次要情节(2,1,1)情节(f, m)标题(“级”) ax = gca;斧子。XTick = [15 40 60 85]; subplot(2,1,2) plot(f,p*180/pi) title(“阶段”) ax = gca;斧子。XTick = [15 40 60 85];
第二个论证是fft
指定点数的数目n
对于变换,表示DFT长度:
n = 512;y = fft (x, n);m = abs (y);p =打开(角(y));f =(0:长度(y) 1) * 100 /长度(y);次要情节(2,1,1)情节(f, m)标题(“级”) ax = gca;斧子。XTick = [15 40 60 85]; subplot(2,1,2) plot(f,p*180/pi) title(“阶段”) ax = gca;斧子。XTick = [15 40 60 85];
在这种情况下,fft
如果输入序列短于0,则用0填充它n
,如果序列的长度大于,则将其截断n
。如果n
未指定,它默认为输入序列的长度。执行时间为fft
取决于长度,n
,它所执行的DFT;看到fft
关于算法的详细信息的参考页面。
请注意得到的FFT振幅为* n / 2
,在那里一个
原始振幅和n
为FFT点数。只有当FFT点的数量大于或等于数据样本的数量时才成立。如果FFT点的数量较少,则FFT振幅比原振幅低上一倍。
离散傅里叶反变换函数传输线
还可以接受输入序列和转换所需点的数目(可选)。试试下面的例子;原来的顺序x
重构序列相同(在舍入误差范围内)。
t = 0:1/255:1;x =罪(2 *π* 120 * t);y =实际(传输线(fft (x)));图绘制(t, x - y)
这个工具箱还包括二维FFT及其逆函数,fft2
和ifft2
。这些函数对二维信号或图像处理很有用。goertzel函数是计算DFT的另一种算法,它也包含在工具箱中。这个函数对于计算长信号部分的DFT是有效的。
的输出有时很方便fft
或fft2
所以零频率分量在序列的中心。这个函数fftshift
将零频率分量移到矢量或矩阵的中心。