• 正文
  • 相关推荐
申请入驻 产业图谱

如何理解时域、s域和z域的联系?

05/28 14:34
1475
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

如何理解时域、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写加法器、乘法器和寄存器()实现时域迭代。

相关推荐