离散傅里叶变换

离散傅里叶变换(DFT)是数字信号处理的主要工具。该产品的基础是快速傅里叶变换(FFT),这是一种计算DFT并减少执行时间的方法。工具箱中的许多函数(包括Z-频域响应,频谱和倒谱分析,以及一些滤波器的设计和实现功能)包括FFT。

MATLAB®环境提供了这些函数fft传输线分别计算离散傅里叶变换及其反变换。对于输入序列x以及它的变形版本X(在单位圆周围等间隔频率的离散时间傅里叶变换),这两个函数实现了这些关系

X ( k + 1 ) = n = 0 N - 1 x ( n + 1 ) W N k n

x ( n + 1 ) = 1 N k = 0 N - 1 X ( k + 1 ) W N - k n

在这些方程中,级数的下标从1开始,而不是从0开始,因为MATLAB中的向量标引方案是这样的

W N = e - j 2 π / N

请注意MATLAB的惯例是用负号jfft函数。这是一个工程惯例;物理学和纯数学通常使用正数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及其逆函数,fft2ifft2。这些函数对二维信号或图像处理很有用。goertzel函数是计算DFT的另一种算法,它也包含在工具箱中。这个函数对于计算长信号部分的DFT是有效的。

的输出有时很方便fftfft2所以零频率分量在序列的中心。这个函数fftshift将零频率分量移到矢量或矩阵的中心。

另请参阅

|||||