Filter 从滤波器系数计算频率响应

Filter 从滤波器系数计算频率响应,filter,signal-processing,frequency,Filter,Signal Processing,Frequency,关于这个话题,我找不到任何可以理解的信息。在荷兰维基百科上,我发现你可以应用一个z变换,它产生一个如下形式的公式: 此FIR滤波器用作示例: 使用z变换: 在这个例子中,e^it(上升到虚单位的自然对数,t=θ)被z代替: 然后使用该函数的曲线图,并将其视为频率响应。我认为这种方法是计算滤波器频率响应的一种简单方法。然而,这种方法有效吗?当我想到一个小延迟(它“阻止”原始信号)时,我突然想到,每个频率的频率响应应该是1,因为信号没有变化,只是延迟了,但通过这种方法,我计算出频率响应应该是:

关于这个话题,我找不到任何可以理解的信息。在荷兰维基百科上,我发现你可以应用一个z变换,它产生一个如下形式的公式:

此FIR滤波器用作示例:

使用z变换:

在这个例子中,e^it(上升到虚单位的自然对数,t=θ)被z代替:

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

y(n) = 0*x(n) + 1*x(n-1)  
Z变换

H(z) = 0 + 1z^-1
替换e^it(t=θ):


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

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

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

  • 从所有零到单位圆上的对应点绘制直线,并计算其长度
  • 对电线杆也要这样做
  • 将所有零线长度相乘得到乘积N
  • 对极线长度也做同样的处理,并将其称为D
  • 然后,震级将为N/D

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

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

我希望下面的内容对于堆栈溢出来说不是太简单,但也许复习一下时间序列分析的基本知识对minibear和其他人会有所帮助

如果系统的脉冲响应为h[n]=δ[n-1](其中δ[n]是δ函数),如示例所示,这意味着输入延迟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])更值得分析,因为它们有反馈路径。

欺骗并使用Matlab:)

为了


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

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

它不是“正弦波”。这是一个复杂的数字
H(e^it) = 0 + 1 * e^-it
y(n) = 0*x(n) + 1*x(n-1)  
b=[ 0 1 ];
a = 1;
freqz(b,a)