【问题标题】:Calculating the frequency response from filter coefficients从滤波器系数计算频率响应
【发布时间】:2011-03-11 12:40:54
【问题描述】:

我找不到有关此主题的任何可理解的信息。在荷兰语维基百科上,我发现您可以应用 z 变换,它会生成以下形式的公式:
www.music.mcgill.ca/~gary/618/week1/img15.gif

以这个 FIR 滤波器为例:
upload.wikimedia.org/math/b/9/e/b9e2ed5184f98621922f716e5216f33d.png

使用 z 变换:
upload.wikimedia.org/math/4/d/6/4d6621be8fabf4db8816c12f34ed9877.png

在那个例子中,e^it(自然对数升到虚数单位,t = theta)代替了 z:upload.wikimedia.org/math/0/6/e/06eada8fedfb492bd63bb50491b042aa.png

然后使用该函数的图并将其视为频率响应。我认为这种方法是一种计算滤波器频率响应的简单方法。但是,这种方法有效吗?当我想到一个小的延迟(它“阻塞”原始信号)时,我想到每个频率的频率响应应该是 1,因为信号没有改变,只是延迟了,但是用这种方法,我计算出频率响应为:

y(n) = 0*x(n) + 1*x(n-1)  

Z 变换

H(z) = 0 + 1z^-1

代入 e^it(t=theta):

H(e^it) = 0 + 1 * e^-it

由于这会产生正弦波作为频率响应,我一定是做错了什么,或者误解了什么。如果有人可以帮助我,我会很高兴!

【问题讨论】:

  • 这不是“正弦波”。这是一个复数,具有单位( re ^ 2 + im ^ 2 == 1 ),其相位变化取决于(与)频率成正比。也就是说,每个频率都有一个纯相位变化。
  • 这类问题也有mathoverflow.net...

标签: filter signal-processing frequency


【解决方案1】:

一种简单的方法本质上是图形化的:您可以将其用作算法的基础,也可以手动使用它来绘制频率响应图,而且“肉眼”快速了解响应也很有帮助.这适用于 FIR 和 IIR 滤波器。

首先在图表上绘制极点和零点以及单位圆。 然后对于您要计算频率响应幅度的任何给定频率:

  • 从所有零点到单位圆上的对应点画线并计算它们的长度。
  • 对杆做同样的事情。
  • 将所有零线长度相乘得到乘积 N。
  • 对极线长度执行相同的操作并将其称为 D。
  • 然后震级将为 N / D。

显然你会想要对单位圆上的多个点重复上述操作。

【讨论】:

    【解决方案2】:

    根据 rwong 的评论,系统函数 H 为您提供系统在特定频率下的相位和幅度响应。这意味着如果系统的输入为 cos[ωn] = cos[2πfn],则输出将为 a(f)cos[2πfn + Φ(f)],其中 a(f) = |H(f)|并且 Φ(f) = 相位(H(f))。在您的情况下,幅度为 1,因为信号没有以任何方式缩放,只是在时间上移动。相移为-ω,其中ω是系统正弦输入的角频率。

    我希望以下内容对 Stack Overflow 来说不是太初级,但也许回顾一下时间序列分析的基础知识会对 minibear 和其他人有所帮助。

    如果您有一个脉冲响应为 h[n] = δ[n-1] 的系统(其中 δ[n] 是一个增量函数),如您的示例所示,这意味着您将输入延迟1 个时间步。想想这在正弦曲线的相位方面意味着什么。变化最快的正弦曲线的数字频率为 0.5(即 2 个样本的周期)——例如余弦[πn]。这是系列 [1,-1,...]。如果将此信号延迟 1,则得到级数 [-1,1,...],即 cos[πn - π] = cos[π(n - 1)],即输入信号相移 -π 弧度(-180 度)。查看数字频率为 0.25 的较长周期信号(即 4 个样本的周期)——例如cos[0.5πn]。这是系列 [1,0,-1,0,...]。单位延迟产生级数 [0,1,0,-1,...],即 cos[0.5πn - 0.5π] = cos[0.5π(n - 1)],即输入信号相移 - π/2 弧度(-90 度)。类似地,您可以计算出 cos[0.25πn] 的输入产生 cos[0.25πn - 0.25π] = cos[0.25π(n - 1)] 的输出,即输入相移 -π/4 弧度(-45度)等等等等。

    很明显,如果输入角频率为 ω(例如 0.5π),则输出将相移 Φ = -ω。将信号想象为在逆时针路线上绕单位圆行驶的火车,其时间序列值对应于该路线上的停靠点。 0.5π 的角频率意味着它在以下弧度值处停止 4 次:0、0.5π、π、1.5π。然后它返回到 0 并一遍又一遍地重复循环。如果这列火车因停靠站而延误,则对应于预定路线上的 -0.5π 弧度偏移。

    回到 H(f),我希望它为什么等于 exp(-i2πf) = exp(-iω) 是有道理的。同样,如果您的系统有 2 个延迟,则 h[n] = δ[n-2] 和 H(f) = exp(-i4πf) = exp(-2iω) - 这是 2 个停止的延迟单位圆。这就是系统/滤波器的所有频率响应告诉您的,即系统缩放和延迟每个输入正弦曲线作为频率函数的程度。

    FIR 系统(即有限脉冲响应,对应于移动平均模型 [MA])是最简单的,因为它们只是前馈路径上的 delta(即比例和延迟)函数的总和。 IIR 系统(即无限脉冲响应,对应于自回归模型 [AR])更易于分析,因为它们具有反馈路径。

    【讨论】:

      【解决方案3】:

      作弊和使用 Matlab :)

      y(n) = 0*x(n) + 1*x(n-1)  
      

      b=[ 0 1 ];
      a = 1;
      freqz(b,a)
      

      【讨论】:

        【解决方案4】:

        这里没有问题。你做对了。这不是正弦函数。来自欧拉方程的符号函数如下: (e^jw - e^-jw)/j2

        换句话说,你最终得到的是一个复数。 所以说你的输入是 x[n] = cos( pi/3 * n )。系统的输出是 y[n] = H(e^jw)*x[n]

        因此,您将输入乘以频率响应,将 pi/3 作为您的数字频率。 cos( pi/3 * n ) = ( e^pi/3*n + e^-pi/3*n)/2。因此,将您的输入视为两个独立的信号,一个频率为 pi/3,另一个频率为 -pi/3。你最终得到的输出是 e^-j(pi/3) * e^(pi/3*n) + e^j(pi/3) * e^(-pi/3*n) 等于 2*cos( -pi/3*n - pi/3 )。这是意料之中的,因为信号被延迟了。

        此外,使用正弦波作为频率响应并没有什么问题。

        【讨论】:

          猜你喜欢
          • 2011-12-02
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 2016-02-08
          • 2010-12-10
          • 1970-01-01
          • 2015-11-27
          • 2023-03-17
          相关资源
          最近更新 更多