根据滤波器系数计算频率响应

时间:2010-07-03 22:52:29

标签: filter signal-processing frequency

我找不到关于这个主题的任何可理解的信息。在荷兰维基百科上,我发现你可以应用一个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-Transform

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

代替e ^ it(t = theta):

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

由于这会产生正弦波作为频率响应,我必须做错事,或误解某事。如果有人可以帮助我,我会很高兴!

4 个答案:

答案 0 :(得分:5)

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

我希望以下内容对于Stack Overflow来说并不算太简陋,但是对于时间序列分析的基本知识可能会对迷你星和其他人有所帮助。

如果你的系统的脉冲响应为h [n] =δ[n-1](其中δ[n]是一个delta函数),如你的例子所示,这意味着你要延迟输入1个步骤。想想这对于正弦曲线的相位意味着什么。变化最快的正弦波的数字频率为0.5(即2个样本的周期) - 例如COS [π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])分析更有趣,因为它们具有反馈路径。

答案 1 :(得分:1)

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

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

  • 从所有零线绘制直线到单位圆上的对应点并计算它们的长度。
  • 为两极做同样的事。
  • 将所有零线长度相乘得到产品N。
  • 对极线长度执行相同操作并将其称为D。
  • 那么幅度将是N / D.

显然,您需要对单位圆上的多个点重复上述操作。

答案 2 :(得分:1)

作弊并使用Matlab:)

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

DO

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

答案 3 :(得分:0)

这里没问题。你做得对。这不是正弦函数。来自欧拉方程的符号函数如下: (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)。这是预期的,因为信号被延迟了。

此外,将正弦波作为频率响应并没有错。