用高中代数合成你的FIR滤波器

文章作者:Kendall Castor-Perry

这篇“FIR基本原理”的后续文章颠覆了这个过程,从小的、容易理解的部分构建了完整的FIR滤波器……

第1部分本文将FIR滤波器的多项式表示分解为二次因子和线性因子的乘积。这个后续的部分把过程的头和建立完整的FIR滤波器从小,易于理解的片段。

到目前为止的故事......

早在第1部分我们采用常规的FIR滤波器设计,针对行频噪声的去除,将滤波器系数写成多项式形式,得到方程[1]:

然后我们发现了这种多项式的所有根,并用它们写下了多项式的分解形式: 作为一个离别镜头,我指出,在那里有三个二次术语,z的Unity系数0-在滤波器的增益响应中有三个深度零值,如第1部分的图所示。让我们深吸一口气,看看所有这些单独的线性和二次因子的反应,看看是否有一些线索。

图1显示等式[2]中括号中的每个因素的各个响应,视为两个或三次抽头FIR滤波器。五个二次因子标记为Q1至Q5,四个线性因子为L1至L4。这是一个相当一部分的图表,但你不必非常清醒,看看主要的突出细节:三个二次因素在频率响应中有深刻的凹口。这些确实是恒定的三个因素(z0)系数是统一的!

图1等式的所有二次和线性因子的频率响应[2]示出了频率响应中的深度凹口的位置。

所以,这是第一个外卖。在一个冷杉过滤器中,其停机滤波器包含几个尖锐的空,它们中的每一个都存在,因为多项式的二次因子之一的响应在一个频率下变为零。只是让我们不跳到关于特定形式的结论需要,让我们做一些更多代数来确保。我们刚才玩的高兴吗?

用作滤波器的二次因子的频率响应

这是我们做出重要替代的地方。到目前为止,我们的Z一直是一个神秘的变量,与Sinewave的行为没有明显的关系。让我们介绍实际定义z变换的表达式。z,z之间的关键关系-1输入正弦波的频率f可以用指数形式或三角形式表示:

哪里f年代是样本率。你可以让精神连接一个小时间延迟的影响(等于采样间隔)的阶段sinewave频率f。然后z是一个复杂的变量之间的复平面的旋转轮纯粹真实纯粹的虚构,频率f影响三角函数的参数。

您通常会在过滤书中遇到指数形式[3],但[4]的复杂Trig形式似乎与工程师的习惯填充了塞绳的习惯更相关,并看到会发生什么。因此,让我们将[4]替换为第1部分[3],看看我们是否可以开发频率响应的表达式。

[5]盒子部分中的第一线表示真实的部分,第二行显示虚部。现在,对于二次部分,在频率响应中给出空,必须有一个频率fN对于哪个q(fN)= 0。这意味着等式的实部和虚部[5]的虚构部分必须在该频率上相同为零。对于[5]中的虚构术语,应该很容易看出,以消失频率fN,我们只是需要拥有

如果是这种情况,我们可以将其替换为[5]的真实部分并将其设置为等于零,从中获得

答对了!这证实了我们早期的观察。更重要的是,它为我们提供了一种直接表达,以便在任何F处定位频率响应NULL所需的二次因素N我们想要的。图2显示了利用方程[8]建立的二次因子(三抽头滤波器)的频率响应,对于几个陷波频率。方程[6]和[7]给出了实部和虚部,我们可以看到有一些特殊情况。对于零频率(z项= -2)和一半采样率(z项= +2),因子Q(z)是两个相等的实因子(z-1) * (z-1)或(z+1) * (z+1)的乘积。对于f的频率年代/ 4,根纯粹是虚构的,q(z)=(z + j)*(z-j)。

图2方程[8]形式的因子的频率响应在不同的零频率值处出现凹槽。

现在是一个真实的例子。Let’s say that I want very high attenuation between around 49 Hz and 51 Hz, again between 59 Hz and 61 Hz (i.e. the system must be able to reject both commonly-used AC line frequencies without change of coefficients or sample rate), and finally also between 98 Hz and 102 Hz. I’ll specify 220 Hz as the sample rate to ensure that the 2n60 Hz别名的谐波曲折并落入与50 Hz的第二次谐波(如果您无法理解为什么会发生家庭作业)。那么,如果我只构建一个在这六个频率下有空的过滤器会发生什么?

构成一组频率计算等式[8]中所示的z系数的电子表格很简单,然后将它们乘以进入单个多项式。六个频率创造了六个二次因素,如图所示表1

表1六个二次因子,计算特定的零频率。

当乘以(方程[9])时,这六个二次因素产生第十二级多项式(方程[10])。

该滤波器的频率响应如图所示图3,直接从Excel外面。对于预期的应用程序,它已经是一个非常好的过滤器,“直接开箱即用”,它根本没有浪费的系数!

图3由LTspice计算的公式[10]定义的滤波器的频率响应确定了所需的空值。

现在让我们仔细看看大约50 Hz和60 Hz的地区。是的,那些空虚确实是我们希望他们的地方 - 看到图4

使用电子表格进行此方法很容易播放,添加和移动空缺,直到您完全得到您想要的。并非所有空频率的所有组合都必须产生一个响应,即你对第一次满意。例如,您可以找到它,因为您尝试将低通滤波器的停机速度升高,请低于f年代/ 4你需要在这个频率上方添加额外的空值,以'针停止停机。'这是一个经验的方法,以肯定地进行,但你当然会感受到这些空缺的内容。

图4关闭和多项式;LTSPICE确认过滤器在我们要求他们的地方有很好的缺口。

如果您希望具有偶数抽头数的过滤器,则可以在额外的(Z + 1)的额外线性项中乘以,这具有将空在F处放置效果年代/ 2(为我们提供了一些额外的停车拒绝)。这是我们可以从早期的特殊情况中推断出来的东西;如果函数q(z)=(z + 1)*(z + 1)在f处具有空年代/ 2,所以必须是平方根。

平坦化通带

我们的过滤器具有有用的停止行为,但通带响应不在任何地方。它从低频右侧滚动通带。响应实际上靠近高斯;您可以从系数看到滤波器不会在步进输入信号上过时过冲。怎么告诉?只需在脉冲响应中查看更多术语的总和;it’s monotonically increasing because all the filter coefficients are positive, so the time response to a step never falls as each extra coefficient is ‘uncovered.’ That behavior can be useful, but what do you do if you’d rather have a flatter frequency response over at least part of the passband?

我们可以在我们的多项式中添加更多的因子来使下垂变平,选择那些随着直流频率的增加响应缓慢上升的因子。回头看看图1;其中一些多项式项没有给我们零值,只是一个缓慢的向上或向下的响应。与第1部分中绘制的原始示例相比,它们共同作用使总的频率响应更平坦。这表明,我们可以构建自己的术语来平坦我们的滤波器的温和低频下垂。每增加一个二次因子,系数就会增加两倍;在线性项中相乘只会使tap计数增加1。

任意根值(或一对值)的频率响应的一般解析表达式是相当笨拙的,我就不写在这里了。但是,构建一个优化脚本(想想百万的猴子)可以调整额外线性和二次术语的系数,以将通带达到所需的水平。

这是一个完全凭经验的例子。我拍摄了合成过滤器并将多项式乘以另外的(Z-0.65)。这种额外术语的上升响应具有在较低频率下平整下垂通带的效果 - 它也会降低距离抑制一点。图5显示当输入PSoC Creator过滤器工具时,这些系数看起来像是什么样的。脉冲响应变得不对称,这意味着它不再是线性相位过滤器。我们可以纠正其中的术语更多 - 但不是今天,我不在空间和时间!“摇摆和环形交叉路口”也适用于过滤器设计。

图5投入另一个根(z-0.65),我们可以达到通带一点。

说实话;这并不是为了取代更传统的过滤器设计技术,尤其是如果您很着急的话!但这确实是一个很好的方式来理解那些根-过滤器设计者称它们为0 -过滤器多项式的效果是在引子下面。对于我们的例子哼声抑制滤波器,我们得到了一个有用的结果(我们将在商业上使用它),附加的满意,我们建立的系数建立正确的第一原则,并且我们确切地理解为什么它有它的零在哪里。

我希望这向你展示,它有时是有用的,打破明显单片,单级的FIR滤波器的本质,成为更简单的片段,可以单独操作。试着把这些空值拨到你的下一个FIR滤波器设计中。这是“notch-ural”方式!

留下你的评论