用matlab将已知模拟滤波器的系统函数为Ha(s)=1/(s^2+s+1),分别用冲激响应不变法和双线性变换法将其变换成数字滤波器的系统函数H(Z),设采样间隔为2s
时间: 2024-12-24 10:24:54 浏览: 12
在MATLAB中,将连续时间滤波器转换成离散时间滤波器通常有两种常用方法:冲激响应不变法( impulse invariant method)和双线性变换(bilinear transform)。这里我们以给定的模拟滤波器系统函数 \( H(s) = \frac{1}{s^2 + s + 1} \) 为例说明:
1. 冲击响应不变法 (Impulse Invariant Method):
- 这种方法直接基于系统的单位阶跃响应来计算离散系统的输入和输出。由于这个滤波器的单位阶跃响应不容易直接求解,我们通常需要借助MATLAB内置函数如`impinvar`或手动设计一个适当的IIR滤波器结构。
- 使用 `impinvar` 的步骤大致如下:
```matlab
[b,a] = tf2zpk(butter(2,'low',2*fs),1); % 设定滤波器类型和采样频率 'fs'
```
2. 双线性变换 (Bilinear Transform or bilinear mapping):
- 这是一种更通用的方法,适用于任何类型的连续时间系统函数。它通过保持系统的稳定性来近似映射到离散域。对于二次型分母,公式是:
```matlab
z = (1 - 2*s*t + st^2) / (1 - 2*s*t*(1/fs) + st^2*(1/fs)^2);
H(Z) = H(s) * (z - 1) / (z + 1);
```
- 其中,`t` 表示采样周期 (`1/fs`)。
注意,这里的 `fs` 是采样频率,对于2倍的采样间隔 `2s`,你需要先确定实际的采样频率 `fs`。一旦得到 `H(Z)`,你可以进一步调整系数 `b` 和 `a` 来得到数字滤波器的形式。
阅读全文