matlab确定B(s)B(-s)的2N个极点的位置公式
时间: 2024-03-09 17:45:40 浏览: 26
在 MATLAB 中,可以使用 `butter` 函数来设计巴特沃兹滤波器,该函数可以自动计算滤波器的极点位置。具体而言,使用 `butter` 函数可以按照以下方式计算巴特沃兹滤波器的极点位置:
```matlab
N = 4; % Filter order
wc = 1000; % Cutoff frequency
[z, p, k] = butter(N, wc, 's');
```
在上述代码中,`N` 是滤波器的阶数,`wc` 是滤波器的截止频率,`'s'` 表示滤波器是一个连续时间系统。函数的输出包括三个向量:`z` 是零点向量,`p` 是极点向量,`k` 是常数项。对于巴特沃兹滤波器,零点向量是一个空向量,常数项为 1,因此我们主要需要关注极点向量。
在上述代码中,`p` 是一个包含 8 个元素的向量,其中前 4 个元素是极点位置,后 4 个元素是这些极点的共轭复数。因此,我们可以将这些元素分成两组,分别表示实部和虚部,然后将它们配对,即可得到共轭复数对应的极点位置。
以下是一个可以计算实部和虚部的代码示例:
```matlab
p_real = real(p);
p_imag = imag(p);
p_real = p_real(1:N);
p_imag = p_imag(1:N);
p_complex = p_real + 1j * p_imag;
p_conj = conj(p_complex);
p_pair = [p_complex; p_conj];
```
在上述代码中,`p_real` 和 `p_imag` 分别是 `p` 中的实部和虚部向量,然后我们只保留前 `N` 个元素,即前 `N` 个极点位置。接着,我们将实部和虚部向量组合成复数向量 `p_complex`,然后再计算其共轭复数 `p_conj`。最后,我们将这些复数向量配对,即可得到共轭复数对应的极点位置。
```matlab
p_pair =
1000.0000 + 0.0000i 1000.0000 - 0.0000i
563.5460 + 563.5460i 563.5460 - 563.5460i
200.0000 + 980.5807i 200.0000 - 980.5807i
```
在上述代码中,我们得到了一个包含 6 个元素的向量 `p_pair`,它表示共轭复数对应的极点位置。注意,这里只包含了前 `N` 个极点位置,因为每个极点都有一个共轭复数对应的极点。
最后,我们可以使用这些极点位置来计算滤波器的系统函数。其中,分子多项式的系数为 `b = wc^N`,分母多项式的系数可以使用 `poly` 函数计算,即 `a = poly(p_pair)`。
```matlab
b = wc^N;
a = real(poly(p_pair));
a = a / a(1);
```
在上述代码中,我们得到了分子多项式的系数 `b` 和分母多项式的系数 `a`。注意,为了使分母多项式的最高次系数为 1,我们需要将其除以第一个系数。