MATLAB - 傅里叶变换
MATLAB - 傅里叶变换
Section titled “MATLAB - 傅里叶变换”傅里叶变换(Fourier Transform)是信号处理的基石,它就像一个数学棱镜,将信号(如随时间变化的声波)分解为其组成频率。这使您能够分析信号中存在哪些频率以及它们的强度。MATLAB 为解析(符号)和数值傅里叶变换提供了强大的工具。
1. 解析变换:fourier()
Section titled “1. 解析变换:fourier()”fourier 函数是 Symbolic Math Toolbox(符号数学工具箱)的一部分。它用于查找数学表达式的精确解析傅里叶变换。这适用于理论研究,不适用于处理测量的数值数据。
F = fourier(f) % Transform f with default variablesF = fourier(f, u) % Use u as the transform variable instead of wF = fourier(f, v, u) % Treat f as a function of v, transform to u示例:高斯函数的变换
Section titled “示例:高斯函数的变换”% 需要 Symbolic Math Toolboxsyms t w a
% 定义函数 f(t)f = exp(-a * t^2);
% 计算其傅里叶变换 F(w)F = fourier(f, t, w);
% 显示结果disp('Function f(t):');disp(f);disp('Fourier Transform F(w):');disp(F);
% --- 输出 ---% Function f(t):% exp(-a*t^2)%% Fourier Transform F(w):% (pi^(1/2)*exp(-w^2/(4*a)))/a^(1/2)该结果表明高斯函数的傅里叶变换是另一个高斯函数。
2. 数值变换:fft()
Section titled “2. 数值变换:fft()”fft(快速傅里叶变换)函数是实际信号处理的主力。它计算数值数据(例如音频信号、传感器读数或图像像素)的离散傅里叶变换 (DFT)。
Y = fft(X)Y = fft(X, n)Y = fft(X, n, dim)Y = fft(X):计算向量或矩阵X的 DFT。如果X是矩阵,它将处理每一列。Y = fft(X, n):计算n点 DFT。如果信号X短于n,则用零填充;如果长于n,则截断。Y = fft(X, n, dim):沿指定维度dim计算 DFT。
小项目:分析带噪声信号
Section titled “小项目:分析带噪声信号”让我们找出由 50 Hz 和 120 Hz 正弦波组成并被随机噪声破坏的信号的频率分量。这是通信和数据分析中的常见任务。
%% 步骤 1:创建信号Fs = 1000; % 采样频率 (Hz)T = 1/Fs; % 采样周期 (s)L = 1500; % 信号长度t = (0:L-1)*T; % 时间向量
% 创建一个包含两个频率(50 Hz 和 120 Hz)的信号S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
% 添加零均值随机噪声X = S + 2*randn(size(t));
% 绘制时域中的带噪声信号figure;plot(1000*t(1:100), X(1:100)); % 绘制前 100 毫秒title('Noisy Signal in Time Domain');xlabel('t (milliseconds)');ylabel('X(t)');
%% 步骤 2:计算 FFTY = fft(X);
%% 步骤 3:计算双边和单边频谱% fft 的输出是复数且对称的。我们需要对其进行处理。P2 = abs(Y/L); % 计算双边频谱 P2P1 = P2(1:L/2+1); % 计算单边频谱 P1P1(2:end-1) = 2*P1(2:end-1); % 将除了直流分量和奈奎斯特频率之外的所有频率的功率加倍
%% 步骤 4:定义频域并绘图% 为 x 轴创建频率向量f = Fs*(0:(L/2))/L;
figure;plot(f, P1);title('Single-Sided Amplitude Spectrum of X(t)');xlabel('f (Hz)');ylabel('|P1(f)|');grid on;axis([0 200 0 1.2]); % 关注相关频率范围运行此代码时,您将得到两个图:
- 一个随时间变化的嘈杂、混乱的信号图,其中隐藏了底层正弦波。
- 一个频率频谱图,在 50 Hz 和 120 Hz 处有两个清晰的峰值,揭示了隐藏在噪声中的原始频率。120 Hz 处的峰值更高,对应于其在原始信号中更高的振幅。
常见陷阱和最佳实践
Section titled “常见陷阱和最佳实践”- 频率轴:不要将 FFT 输出与采样索引
1:L对比绘图。始终计算并使用示例中所示的正确频率向量f。 - 归一化:
fft的原始输出会随信号长度而缩放。通过长度L进行归一化以获得正确的幅值。 - 单边频谱:对于实值信号,FFT 是对称的。通常只需分析输出的前半部分(单边频谱)。请记住将幅值乘以 2,以解释另一半的能量。
fftshift:对于某些分析,将零频率(直流)分量置于图的中心会很有用。fftshift函数可用于为此目的重新排列fft输出。