700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > matlab离散傅立叶变换的应用 离散傅里叶变换 - MATLAB Simulink - MathWorks 中国

matlab离散傅立叶变换的应用 离散傅里叶变换 - MATLAB Simulink - MathWorks 中国

时间:2023-04-07 10:30:10

相关推荐

matlab离散傅立叶变换的应用 离散傅里叶变换
- MATLAB  Simulink
- MathWorks 中国

离散傅里叶变换

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

MATLAB® 环境提供 fft 和 ifft 函数,分别用于计算离散傅里叶变换及其逆变换。对于输入序列 x 及其变换版本 X(围绕单位圆的等间隔频率的离散时间傅里叶变换),这两个函数实现以下关系

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

x(n+1)=1N∑k=0N-1X(k+1)WN-kn.

在这些方程中,序列下标从 1 而不是 0 开始,因为采用 MATLAB 向量索引方案,并且

WN=e-j2π/N.

注意MATLAB 约定是对 fft 函数使用负 j。这是工程约定;物理和纯数学通常使用正 j。

使用单个输入参数 x 的 fft 计算输入向量或矩阵的 DFT。如果 x 是向量,fft 计算向量的 DFT;如果 x 是矩形数组,fft 计算每个数组列的 DFT。

例如,创建时间向量和信号:

t = 0:1/100:10-1/100; % Time vector

x = sin(2*pi*15*t) + sin(2*pi*40*t); % Signal

计算信号的 DFT 以及变换后的序列的幅值和相位。通过将小幅值变换值设置为零来减少计算相位时的舍入误差。

y = fft(x); % Compute DFT of x

m = abs(y); % Magnitude

y(m<1e-6) = 0;

p = unwrap(angle(y)); % Phase

要以度为单位绘制幅值和相位,请键入以下命令:

f = (0:length(y)-1)*100/length(y); % Frequency vector

subplot(2,1,1)

plot(f,m)

title('Magnitude')

ax = gca;

ax.XTick = [15 40 60 85];

subplot(2,1,2)

plot(f,p*180/pi)

title('Phase')

ax = gca;

ax.XTick = [15 40 60 85];

fft 的第二个参数指定变换的点数 n,表示 DFT 的长度:

n = 512;

y = fft(x,n);

m = abs(y);

p = unwrap(angle(y));

f = (0:length(y)-1)*100/length(y);

subplot(2,1,1)

plot(f,m)

title('Magnitude')

ax = gca;

ax.XTick = [15 40 60 85];

subplot(2,1,2)

plot(f,p*180/pi)

title('Phase')

ax = gca;

ax.XTick = [15 40 60 85];

在本例中,如果输入序列比 n 短,fft 会用零填充输入序列,如果输入序列比 n 长,则会截断序列。如果未指定 n,则默认为输入序列的长度。fft 的执行时间取决于其执行的 DFT 的长度 n;有关该算法的详细信息,请参阅 fft 参考页。

注意得到的 FFT 幅值是 A*n/2,其中 A 是原始幅值,n 是 FFT 点数。仅当 FFT 点的数量大于或等于数据样本的数量时,上述情形才成立。如果 FFT 点数小于数据样本数,则 FFT 幅值比原始幅值低上述量。

离散傅里叶逆变换函数 ifft 也接受输入序列以及可选的变换所需点数。尝试以下示例;原始序列 x 和重新构造的序列是相同的(在舍入误差内)。

t = 0:1/255:1;

x = sin(2*pi*120*t);

y = real(ifft(fft(x)));

figure

plot(t,x-y)

该工具箱还包括二维 FFT 及其逆变换的函数,即 fft2 和 ifft2。这些函数对于二维信号或图像处理非常有用。goertzel 函数是计算 DFT 的另一种算法,它也包含在工具箱中。此函数可高效计算长信号中一部分的 DFT。

有时可以方便地重新排列 fft 或 fft2 函数的输出,使零频率分量位于序列的中心。函数 fftshift 将零频率分量移至向量或矩阵的中心。

另请参阅

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。