如何理解时域、s域和z域的联系?
时域、s域和z域是信号处理与控制工程领域必须掌握的概念。这三个域其实不是三种不同的物理现象,而是同一个线性时不变(LTI)系统在三种不同视角下的投影。
有一句经典话语:时域看波形,s域看模拟频率与衰减,z域看数字频率与稳定性。
一、 三域的物理本质与映射关系
1. 时域
时域是最直观的感受,描述系统状态随时间的变化。
连续时域:用微分方程描述,系统的核心操作是对时间的导数 。
离散时域:用差分方程描述,系统的核心操作是延迟(上一时刻的状态),即 。
2. s域(拉普拉斯变换)
拉普拉斯变换引入复频率 。
核心映射:将时域的导数 映射为s域的乘法 。微分方程变成了代数方程。
物理意义: 的实部 代表指数衰减/发散速度,虚部 代表振荡频率。s平面上的点,对应时域的包络 。
3. z域(Z变换)
计算机无法处理连续的导数,必须离散化。Z变换引入复变量 。
核心映射:将时域的延迟()映射为z域的乘法 。差分方程变成代数方程。
物理意义: 的模 代表幅度变化,相角 代表数字角频率。 在硬件(FPGA/DSP)中就是一个寄存器(D触发器)。
二、 从s域到z域的跨越:双线性变换
如何将模拟滤波器(s域)变成数字滤波器(z域)?
最常用的方法是双线性变换。
梯形积分法:s域的 代表积分。在离散时域,我们用梯形面积来近似积分:
Z变换:对上式做Z变换得:
推导映射:整理得出传递函数的映射关系:双线性变换公式将s平面的虚轴(频率轴)扭曲后映射到了z平面的单位圆上,避免了频谱混叠。
三、 MATLAB实战分析:一阶RC低通滤波器的三域穿越
以一阶RC低通滤波器为例,用MATLAB实现从s域到z域的转换,以及时域波形的对应。
MATLAB 代码实现
%% ============================================================
% 一阶RC低通滤波器:时域 / s域 / z域 完整分析
%% ============================================================
clear; clc; close all;
% ==========================================
% 1. 系统参数定义
% ==========================================
R = 1000; % 电阻 1kΩ
C = 1e-6; % 电容 1μF
fc = 1/(2*pi*R*C); % 截止频率 ~159 Hz
fs = 1000; % 采样率 1kHz (必须大于2*fc)
Ts = 1/fs; % 采样周期
% ==========================================
% 2. s域:连续时间传递函数 (拉普拉斯域)
% ==========================================
s = tf('s');
H_s = 1 / (R*C*s + 1); % 一阶RC低通滤波器传递函数
fprintf('s域传递函数 H(s):n');
H_s
% ==========================================
% 3. z域:离散时间传递函数 (Z域) - 双线性变换
% ==========================================
H_z = c2d(H_s, Ts, 'tustin'); % 使用双线性变换(tustin)将s域转为z域
fprintf('z域传递函数 H(z):n');
H_z
% 提取差分方程系数 (用于FPGA/C语言实现)
[b, a] = tfdata(H_z, 'v');
fprintf('差分方程系数: b = [%f, %f], a = [1, %f]n', b(1), b(2), a(2));
% ==========================================
% 4. 时域仿真对比
% ==========================================
t = 0:Ts:0.05; % 仿真时间 0~50ms
u = sin(2*pi*50*t) + sin(2*pi*500*t); % 输入:50Hz(低频) + 500Hz(高频)混合信号
% 连续系统响应
y_c = lsim(H_s, u, t);
% 离散系统响应 (差分方程迭代)
y_d = filter(b, a, u);
% ==========================================
% 5. 频域响应对比
% ==========================================
figure;
% 时域波形对比
subplot(2,1,1);
plot(t, u, 'k:', 'LineWidth', 1.5); hold on;
plot(t, y_c, 'b-', 'LineWidth', 2);
stem(t, y_d, 'r', 'MarkerFaceColor', 'r');
legend('输入信号', '连续输出 y(t)', '离散输出 y[n]');
title('时域响应对比'); xlabel('时间'); ylabel('幅值');
% 频域Bode图对比
subplot(2,1,2);
bode(H_s, 'b-', H_z, 'r--');
legend('s域 H(s)', 'z域 H(z)');
title('频域响应对比 (Bode图)');
四、 代码分析与原理分析
运行上述代码,通过输出结果来分析实现细节:
1. s域表达式分析
MATLAB输出:这直接来源于基尔霍夫定律。
极点位于 (即 ),对应时域的指数衰减 ,系统稳定。
2. z域表达式与差分方程
MATLAB输出:
理解 :分母中的 移项后,就是 。
在时域就是取上一拍的输出值,在FPGA中就是触发器(寄存器)!
差分方程实现:将 展开得:这就是代码中 filter(b, a, u) 函数底层运行的逻辑,也是在FPGA中写RTL代码时要实现的加法与乘法逻辑。
3. 频率扭曲现象
观察MATLAB画出的Bode图:
-
- 在低频段(<100Hz),s域和z域的曲线几乎完全重合。在高频段(接近奈奎斯特频率 fs/2 = 500Hz),z域的曲线发生“扭曲”,迅速跌落至-∞。
原因:s平面的虚轴是无限长的(频率从0到 ),而z平面的单位圆周长是有限的(数字频率从0到 )。双线性变换是一种非线性映射,公式 把无限长的频率轴硬生生“压缩”塞进了单位圆里。因此,数字滤波器在接近 fs/2 处的频率响应会发生畸变。
4. 时域图
连续曲线 y(t):完美的模拟滤波效果,500Hz的高频噪声被平滑滤除,只留下50Hz的正弦波。
离散杆状图 y[n]:它在每个采样点上的值,与连续曲线完全一致!这证明了通过z域传递函数算出的差分方程,完美复现了模拟系统的动态行为。注意y[n]是阶梯状的,因为零阶保持器(ZOH)的作用,在两个采样点之间数值保持不变。
五、 总结
时域是根本:描述了系统真实的物理演进。微分方程难解,差分方程适合计算机算。
s域是连续的抽象:把微分变代数,用来设计模拟系统的极点(衰减)和零点(频率陷落)。
z域是离散的抽象:把差分变代数,是数字信号处理的灵魂。 就是时间延迟,就是FPGA里的寄存器。
在s域根据指标设计出模拟传递函数 通过双线性变换转为 提取差分方程系数 用Verilog写加法器、乘法器和寄存器()实现时域迭代。
1475