Wolfram Alpha和MATLAB以不同的方式绘制传递函数

Wolfram Alpha和MATLAB以不同的方式绘制传递函数,matlab,filter,wolframalpha,Matlab,Filter,Wolframalpha,我试图得到一个简单的180°相移全通滤波器的数字IIR滤波器的滤波器系数,其传递函数为:(1+s)/(1-s) 这就是Wolfram给我的: 这是我从MATLAB得到的: 我的代码是: clc; clear; close all; z = [-1]; %zeros p = [1]; %poles k = 1; %gain [num,den] = zp2tf(z,p,k); %con

我试图得到一个简单的180°相移全通滤波器的数字IIR滤波器的滤波器系数,其传递函数为:
(1+s)/(1-s)

这就是Wolfram给我的:

这是我从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);

嘿,谢谢你的回复!这对我来说是有道理的。我尝试用
bilinear()
将其转换为基于z的离散函数,但这也给了我一个使用
fvtool()
的奇怪绘图。你知道如何使用
fvtool()
实现这一点吗,因为我的主要目标不是绘制它。我的主要目标是检索系数,以便在我的STM32上用C创建一个过滤器。@SeverinGetzner您可以使用
c2d(My\u filter,sample\u rate)
在给定采样率的情况下,为连续过滤器获得一个离散过滤器。我尝试了以下方法:
Hd=c2d(My\u filter,Ts)然后<代码>fvtool(Hd) FvTooe<代码>,它刚好在那里。嘿,我刚刚发现了设置中的点数:<代码> fvTooToE(“分析参数”)。
设置得太低,无法看到整个曲线。现在一切正常。谢谢你的帮助。