问题中提出的问题似乎没有封闭形式的解决方案。如问题中提到的以及其他答案中所示,结果可以被分解为一系列,可以通过任何符号数学工具(例如Mathematica)来完成。但是,这些术语变得非常复杂和丑陋,尚不清楚当我们包含不超过三阶的术语时,近似值有多好。由于我们无法获得精确的公式,因此最好以数字方式计算解,与近似法不同,该解将给出(几乎)精确的结果。
但是,这不是我的答案。我建议通过改变问题表述的方式给出确切解决方案的另一条路线。经过一会儿的思考,原来是中心频率的规格和带宽的比例(以等值,以八度为单位)的规格,这导致了数学上的棘手。有两种摆脱困境的方法:ω0
- 将离散时间滤波器的带宽指定为频率差,其中和分别是离散时间滤波器的上下边缘。Δω=ω2−ω1ω1ω2
- 规定比率,而不是规定两个边缘频率或。ω2/ω1ω0ω1ω2
在两种情况下,都可以使用简单的分析解决方案。由于需要将离散时间滤波器的带宽规定为比率(或等效地以八度为单位),因此我将介绍第二种方法。
让我们定义连续时间滤波器的边沿频率和Ω1Ω2
|H(jΩ1)|2=|H(jΩ2)|2=12(1)
使用,其中是二阶带通滤波器的传递函数:Ω2>Ω1H(s)
H(s)=ΔΩss2+ΔΩs+Ω20(2)
与和。请注意,对于,,。ΔΩ=Ω2−Ω1Ω20=Ω1Ω2H(jΩ0)=1|H(jΩ)|<1Ω≠Ω0
我们使用双线性变换到边缘映射频率和的离散时间滤波器的该边缘的频率和连续时间滤波器的。不失一般性,我们可以选择。为了我们的目的,双线性变换采用以下形式ω1ω2Ω1Ω2Ω1=1
s=1tan(ω12)z−1z+1(3)
对应于连续时间和离散时间频率之间的以下关系:
Ω=tan(ω2)tan(ω12)(4)
从,我们得到通过设置。通过从计算的和,我们从获得模拟原型滤波器的传递函数。应用双线性变换,我们得到了离散时间带通滤波器的传递函数:(4)Ω2ω=ω2Ω1=1Ω2(4)(2)(3)
Hd(z)=g⋅z2−1z2+az+b(5)
与
gabc=ΔΩc1+ΔΩc+Ω20c2=2(Ω20c2−1)1+ΔΩc+Ω20c2=1−ΔΩc+Ω20c21+ΔΩc+Ω20c2=tan(ω12)(6)
摘要:
离散时间滤波器的带宽可以以八度为单位指定(或者通常以比率表示),并且可以精确计算模拟原型滤波器的参数,从而实现指定的带宽。代替中心频率,我们指定频带边缘和。定义的中心频率是设计的结果。ω0ω1ω2|Hd(ejω0)|=1
必要步骤如下:
- 指定所需的边带边缘比率,以及其中一个边带边缘(这当然等效于简单地指定和)。ω2/ω1ω1ω2
- 选择并从确定。计算模拟原型过滤器和。Ω1=1Ω2(4)ΔΩ=Ω2−Ω1Ω20=Ω1Ω2(2)
- 评估常数以获得离散时间传递函数。(6)(5)
请注意,使用更常见的方法(其中指定了和,实际的带边和是设计过程的结果。在提出的解决方案中,可以指定频带边缘,是设计过程的结果。后一种方法的优点是可以以八度为单位指定带宽,并且解决方案是精确的,即,所得的滤波器具有以八度为单位的指定带宽。ω0Δω=ω2−ω1ω1ω2ω0
例:
让我们指定一个八度的带宽,然后选择较低的频带边缘为。这给出了上频带边缘。模拟原型滤波器的带边缘为且来自(具有)。这给出和。通过得到离散时间传递函数ω1=0.2πω2=2ω1=0.4πΩ1=1(4)ω=ω2Ω2=2.2361ΔΩ=Ω2−Ω1=1.2361Ω20=Ω1Ω2=2.2361(6)(5)
Hd(z)=0.24524⋅z2−1z2−0.93294z+0.50953
精确地实现了1个八度的带宽和指定的频带边缘,如下图所示:
原始问题的数值解:
从意见,我明白,这是要能够准确地指定中心频重要为此满足。如前所述,不可能获得精确的封闭形式的解决方案,并且进行系列开发会产生非常笨拙的表达式。ω0|Hd(ejω0)|=1
为了清楚起见,我想总结一下可能的选择及其优点和缺点:
- 将所需带宽指定为频差 ,然后指定;在这种情况下,可以采用简单的封闭式解决方案。Δω=ω2−ω1ω0
- 指定频带边缘和(或等效地,以八度为单位的带宽,以及频带边缘之一);如上所述,这也导致了一种简单的封闭形式的解决方案,但是中心频率是设计的结果,无法指定。ω1ω2ω0
- 以八度为单位指定所需的带宽,并指定中心频率(如问题中所述);没有封闭形式的解决方案是可能的,目前也没有任何简单的近似方法。因此,我认为需要一种简单有效的方法来获得数值解。这是下面说明的内容。ω0
当指定,我们使用双线性变换的形式,其归一化常数不同于和使用的归一化常数:ω0(3)(4)
Ω=tan(ω2)tan(ω02)(7)
我们定义。将离散时间滤波器的带边缘的指定比率表示为Ω0=1
r=ω2ω1(8)
随着我们从和c=tan(ω0/2)(7)(8)
r=arctan(cΩ2)arctan(cΩ1)(9)
使用,可以用以下格式重写:Ω1Ω2=Ω20=1(9)
f(Ω1)=rarctan(cΩ1)−arctan(cΩ1)=0(10)
对于给定的值,可以通过几次牛顿迭代来求解方程。为此,我们需要的导数:rΩ1f(Ω1)
f′(Ω1)=c(r1+c2Ω21+1c2+Ω21)(11)
对于,我们知道必须在的区间内。即使有可能提出更聪明的初始解决方案,但事实证明,初始猜测对于大多数规格而言都很好,并且在牛顿方法仅进行了次迭代后,将非常准确的解决方案:Ω0=1Ω1(0,1)Ω(0)1=0.14
Ω(n+1)1=Ω(n)1−f(Ω(n)1)f′(Ω(n)1)(12)
通过的几次迭代获得的,我们可以确定和,然后使用和计算系数离散时间滤波器。注意,常数现在由。Ω1(12)Ω2=1/Ω1ΔΩ=Ω2−Ω1(5)(6)cc=tan(ω0/2)
范例1:
让我们指定和个八度的带宽。这对应于比率。随着初始猜测,牛顿法的迭代导致溶液,从其中的离散时间的系数可以在上面所解释的来计算。下图显示了结果:ω0=0.6π0.5r=ω2/ω1=20.5=2–√=1.4142Ω1=0.14Ω1=0.71
过滤器是使用以下Matlab / Octave脚本计算的:
规格%
bw = 0.5; 所需带宽百分比,以八度为单位
w0 = 0.6 * pi; 共振频率%
r = 2 ^(bw); 带边缘百分比
W1 = 0.1;%初始猜测(适用于大多数规格)
尼特= 4; %#牛顿迭代
c = tan(w0 / 2);
%牛顿
因为我= 1:尼特
f = r * atan(c * W1)-atan(c / W1);
fp = c *(r /(1 + c ^ 2 * W1 ^ 2)+ 1 /(c ^ 2 + W1 ^ 2));
W1 = W1-f / fp
结束
W1 = abs(W1);
如果(W1> = 1),则出错(“无法收敛。减小初始猜测的值。”);结束
W2 = 1 / W1;
dW = W2-W1;
%离散时间滤波器
比例= 1 + dW * c + W1 * W2 * c ^ 2;
b =(dW * c / scale)* [1,0,-1];
a = [1,2 *(W1 * W2 * c ^ 2-1)/比例,(1-dW * c + W1 * W2 * c ^ 2)/比例];
范例2:
我添加了另一个示例,以表明该方法还可以处理大多数近似将给出无意义结果的规范。当所需带宽和谐振频率都很大时,通常就是这种情况。让我们设计一个和个八度的滤波器。牛顿法的四次迭代以初始猜测最终值,即,模拟原型的带宽为个八度音阶。相应的离散时间滤波器具有以下系数,其频率响应如下图所示:ω0=0.95πbw=4Ω(0)1=0.1Ω1=0.00775log2(Ω2/Ω1)=log2(1/Ω21)≈14
b = 0.90986 * [1,0,-1];
a = [1.00000 0.17806 -0.81972];
所得的一半功率带边缘为和,它们的确确实相距个八度音阶(即倍)。ω1=0.062476πω2=0.999612π416