Wolfram Alpha 和 MATLAB 绘图传递函数不同

Wolfram Alpha and MATLAB plot transfer function differently

我正在尝试获取具有传递函数的简单 180° 相移全通滤波器的数字 IIR 滤波器的滤波器系数:(1+s)/(1-s)

这就是 Wolfram 给我的: Bode Plot in Wolfram

这就是我从 MATLAB 得到的: Bode Plot in MATLAB

我的代码是:

clc; clear; close all;
z = [-1];                  %zeros
p = [1];                   %poles
k = 1;                     %gain
[num,den] = zp2tf(z,p,k);  %convert zero-pole into numerator denominator
freqz(num,den);            %bode plot

我想在 MATLAB 中获得与在 Wolfram Alpha 中相同的绘图,以使用 fvtool 获得滤波器系数,以便我可以在 C 中编写滤波器。因此我的问题是如何设法转换极点和将传递函数的零点转换为正确的格式,以便 MATLAB 绘制与 Wolfram Alpha 相同的图?我做错了什么?

你的问题是你混淆了概念

freqz 用于基于 z 的离散频率变换,而您正在使用基于 s 的连续拉普拉斯变换。这些显然不是一回事。

只需使用函数进行连续变换。

z = [-1];                  %zeros
p = [1];                   %poles
k = 1;                     %gain
[num,den] = zp2tf(z,p,k);  %convert zero-pole into numerator denominator
my_filter=tf(num,den);
bode(my_filter);