Wolfram Alpha和MATLAB以不同的方式绘制传递函数
我试图得到一个简单的180°相移全通滤波器的数字IIR滤波器的滤波器系数,其传递函数为: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
(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)但是,命令窗口仅表示:“FVoToT不接受TF作为输入。”SeulgEngZnER考虑读取文档以了解如何捕获输出并将其作为输入到<代码> FvTooe<代码>,它刚好在那里。嘿,我刚刚发现了设置中的点数:<代码> fvTooToE(“分析参数”)。
设置得太低,无法看到整个曲线。现在一切正常。谢谢你的帮助。