【问题标题】:How to compute an IIR Filter frequency response in Octave/MATLAB如何在 Octave/MATLAB 中计算 IIR 滤波器频率响应
【发布时间】:2021-08-12 17:00:40
【问题描述】:

我正在尝试计算 IIR 滤波器的频率响应。

滤波器的传递函数为:

a 的值计算如下:

f     = 1000;
fsamp = 16000;
a     = 1 / (1 + (2 * pi * f) / fsamp); 

好的,现在我有了 IIR 滤波器的传递函数。我现在应该如何计算频率响应?我考虑过使用freqz 函数,但我需要帮助定义参数,如何定义分子和分母多项式?

【问题讨论】:

  • 本站不支持 LaTex。 freqz 的分子和分母是来自您的 H(z) 的分子和分母,表示为变量 z^-1 的多项式。你见过this example吗?
  • 是的,我尝试过这个例子,但没能做到,主要是因为我的分子和分母只有一个多项式,我应该如何使用 conv 函数?
  • 这里不需要convconv 是多项式乘法,在示例中使用它是因为 num 和 den 都是多项式的乘积。在您的情况下,freqz 的“b”将是1-a(其中a 是您的变量),freqz 的“a”将是[1,-a]。看看结果是否有意义
  • 谢谢!因此,使用您所说的定义 num=[1-a] 和 den=[1, -a],然后我执行 freqz(num, den, 'whole', 2001);就像示例一样,但在 Octave 中出现此错误:错误:绘图:没有要绘制的数据错误:从 plt 在第 127 行第 11 行绘图在第 229 行第 10 列 freqz_plot 在第 60 行第 3 列频率在第 199 行第 5 列
  • 不确定'whole' 做了什么。 freqz(num, den, 2001) 适用于我的 Octave 版本

标签: matlab filtering octave


【解决方案1】:
f=1000; fsamp=16000; a=1/(1+(2*pi*f)/fsamp);
a = [1 -a];
b = [(1-a) 0];
w = logspace(-1,1);

h = freqs(b,a,w);
mag = abs(h);
phase = angle(h);
phasedeg = phase*180/pi;

subplot(2,1,1)
loglog(w,mag)
grid on
xlabel('Frequency (rad/s)')
ylabel('Magnitude')

subplot(2,1,2)
semilogx(w,phasedeg)
grid on
xlabel('Frequency (rad/s)')
ylabel('Phase (degrees)')

这是基于 Mathworks 的解决方案 https://www.mathworks.com/help/signal/ref/freqs.html。我得到了这个结果:

【讨论】:

  • 嘿!太感谢了!但是,当滤波器应该是低通时,您似乎得到了一个高通滤波器......知道可能出了什么问题吗?
  • 哦,我尝试运行它,但它在 Octave 中不起作用:(
  • @GrangerObliviate Elina 的代码也适用于八度音阶。您只需要先加载signal 包(即pkg load signal)。显然,如果您没有安装该软件包,则需要先安装它(例如pkg install -forge signal
  • 我的代码是用于 Matlab 的,这就是为什么,也许那里也有一些差异。也许必须更改分子或分母才能获得所需的过滤器。
  • 我不认为freqs 是正确的工具有两个原因:(1)freqs 使用s 作为变量,而freqz(如我的回答)使用@987654331 @。这就是为什么将freqs 直接应用于问题中的系数不会给出正确结果的原因。 (2) freqs 用于模拟滤波器(频率以赫兹为单位),不适用于离散时间滤波器 cc @GrangerObliviate
【解决方案2】:

freqz的前两个输入分别是传递函数的分子和分母,表示为变量z-1的多项式:

a = 0.7; % example value
num = 1-a;
den = [1, -a];
freqz(num, den, 1001)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 2015-11-27
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多