Matlab中的高通滤波器设计

信息处理 matlab 过滤器设计 数字通信 数字滤波器 高通滤波器
2022-02-02 05:00:30

我希望从传递函数设计一阶高通滤波器。在一阶低通滤波器的例子中,我首先得到变量“b”和“a”中分子和分母的系数。如果是一阶申报者,

b = 1/tau;
a = [1, 1/tau];
h = freqs(b, a, w) % LPF
[digital_b, digial_a] = bilinear(b, a, fs) % Analog to Digital transformation. 

顺序如上。首先,我们获得传递函数的系数,然后通过 MATLAB 中的“freq”函数制作 LPF。之后,我可以使用“双线性”功能将模拟滤波器转换为数字滤波器。

但是,在 HPF 的情况下,我无法使用“双线性”函数对其进行转换。当我在 MATLAB 中为一阶 HPF 运行“双线性”函数时,出现以下错误

Numerator cannot be higher order than denominator.

我使用下面的代码来制作数字 HPF。

b = [1, 1/tau];
a = 1;
h = freqs(b, a, w) % LPF
[digital_b, digial_a] = bilinear(b, a, fs) % Analog to Digital transformation. 

问题是什么?我应该如何在 MATLAB 上设计 HPF?

2个回答

一阶 HP 滤波器的传递函数为:

H(s)=ss+wc=swc1+swc,wherewc=2πfc

&

a = [1 w0];
b = [w0 1e-48]; % ! two coefficients

低通

注意:向下滚动查看高通。

我已经通过修复参数来运行您的代码,例如τ,fs,w我没有错误。但是,以下是低通的,使用“fvtool”我们看到

tau = 1e-3;
fs = 1e3;
w = 0:1e-2:pi;
b = 1/tau;
a = [1, 1/tau];
h = freqs(b, a, w) % LPF
[digital_b, digital_a] = bilinear(b, a, fs) 
fvtool(digital_b,digital_a)

这给了我

digital_b =
    0.0050    0.0050
digital_a =
    1.0000   -0.9900

图如下 在此处输入图像描述


高通

另一方面,改变你的a,b向量到对应于高通的传递函数,例如如下

a = [1 1/tau];
b = [1/tau 0];

给出所需的高通

在此处输入图像描述