Skip to content

MATLAB - 变换

数学变换是科学和工程的基石,提供了一种强大的方式将问题转换到不同的域中,在那里可能更容易解决或分析。MATLAB 为符号变换和数值变换提供了强大的工具。

例如,傅里叶变换将信号从时域转换到频域,揭示其频率分量。拉普拉斯变换将线性常微分方程 (ODE) 转换为代数方程,这要简单得多。

拉普拉斯变换,使用 Symbolic Math Toolbox 中的 laplace 函数执行,用于解析求解微分方程。它将函数 f(t) 转换为 F(s)。

我们来计算一些常见函数的拉普拉斯变换。请注意使用 syms 声明符号变量。

% 声明符号变量 t (时间)、s (拉普拉斯变量) 和常量
syms t s a w
% 常量 'a' 的变换
L1 = laplace(a, t, s) % 明确说明从 t 到 s 的变换
% 结果: a/s
% 指数衰减的变换
L2 = laplace(exp(-a*t), t, s)
% 结果: 1/(a + s)
% 正弦波的变换
L3 = laplace(sin(w*t), t, s)
% 结果: w/(s^2 + w^2)

ilaplace 函数将函数 F(s) 转换回 f(t)。这通常是求解 s 域方程后的最后一步。

syms s t w
% 简单极点的逆变换(对应指数衰减)
f1 = ilaplace(1/(s + 5), s, t)
% 结果: exp(-5*t)
% 对应余弦波项的逆变换
f2 = ilaplace(s/(s^2 + w^2), s, t)
% 结果: cos(t*w)

傅里叶变换在 MATLAB 中有两个主要应用:用于解析工作的符号 fourier 变换,以及用于数据分析的数值快速傅里叶变换 (fft),后者在实践中更为常见。

与 laplace 类似,fourier 函数作用于符号表达式。它对于求数学函数的解析变换很有用。

syms x w
% 定义一个高斯函数(钟形曲线)
f = exp(-x^2);
% 找到它的傅里叶变换
FT = fourier(f, x, w)
% 结果: pi^(1/2)*exp(-w^2/4)
% 高斯函数的傅里叶变换是另一个高斯函数。
% 我们可以找到逆变换来验证
inv_FT = ifourier(FT, w, x)
% 结果: exp(-x^2)

fft 函数是一种高度优化的算法,用于计算数值数组(如录制的音频信号或传感器数据)的离散傅里叶变换。它是数字信号处理中最重要的算法之一。

想象我们有一个由 50 Hz 和 120 Hz 正弦波组成的信号,被噪声损坏。我们使用 fft 来识别这些原始频率。

% 1. 信号生成
Fs = 1000; % 采样频率,单位 Hz
T = 1/Fs; % 采样周期
L = 1500; % 信号长度
t = (0:L-1)*T; % 时间向量
% 创建一个包含两个频率(50 Hz 和 120 Hz)并带有噪声的信号
f1 = 50;
f2 = 120;
signal = 0.7*sin(2*pi*f1*t) + sin(2*pi*f2*t) + 2*randn(size(t));
% 2. 计算 FFT
Y = fft(signal);
% 3. 计算双边频谱,然后是单边频谱
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
% 4. 定义频域并绘制单边幅值谱
f = Fs*(0:(L/2))/L;
figure;
plot(f, P1);
title('Single-Sided Amplitude Spectrum of the Signal');
xlabel('Frequency (f) [Hz]');
ylabel('|P1(f)|');
axis([0 200 0 1.2]); % 聚焦于相关的频率范围

当您运行此代码时,它将生成一个频谱图。尽管原始信号中存在噪声,但您将在图上看到两个清晰的尖峰。一个峰值位于 x 轴的 50 Hz 处,另一个位于 120 Hz 处,清晰地识别出原始信号的组成频率。