Soruda ortaya konan sorunun kapalı formda bir çözümü olmadığı görülmektedir. Soruda belirtildiği ve diğer cevaplarda gösterildiği gibi, sonuç Mathematica gibi herhangi bir sembolik matematik aracı tarafından gerçekleştirilebilen bir seri halinde geliştirilebilir. Bununla birlikte, terimler oldukça karmaşık ve çirkin hale gelir ve üçüncü sıraya kadar terimleri dahil ettiğimizde yaklaşıklığın ne kadar iyi olduğu belirsizdir. Kesin bir formül elde edemediğimizden, çözümü sayısal olarak hesaplamak daha iyi olabilir, bu yaklaşım yaklaşık olarak (neredeyse) kesin bir sonuç verecektir.
Ancak cevabım bununla ilgili değil. Problem formülasyonunu değiştirerek kesin bir çözüm sunan farklı bir rota öneririm. Bir süre düşündükten sonra, bunun merkez frekansının spesifikasyonu olduğu ortaya çıkıyorω0ve bant genişliğinin, matematiksel zorlanmaya neden olan bir oran (ya da eşit olarak, oktav cinsinden) olarak belirtilmesi. İkilemden çıkmanın iki yolu vardır:
- ayrık zamanlı filtrenin bant genişliğini frekans farkı olarak belirtinΔω=ω2−ω1, nerede ω1 ve ω2 ayrı ayrı zaman filtresinin alt ve üst bant kenarlarıdır.
- oranı reçete ω2/ω1ve yerine ω0 iki kenar frekansından birini reçete edin ω1 veya ω2.
Her iki durumda da, basit bir analitik çözüm mümkündür. Ayrık zaman filtresinin bant genişliğini bir oran (veya eşit olarak, oktav olarak) olarak reçete etmek istendiğinden , ikinci yaklaşımı açıklayacağım.
Kenar frekanslarını tanımlayalım Ω1 ve Ω2 tarafından sürekli zaman filtresinin
|H(jΩ1)|2=|H(jΩ2)|2=12(1)
ile Ω2>Ω1, nerede H(s) ikinci dereceden bant geçiren filtrenin transfer fonksiyonudur:
H(s)=ΔΩss2+ΔΩs+Ω20(2)
ile ΔΩ=Ω2−Ω1, ve Ω20=Ω1Ω2. Bunu not etH(jΩ0)=1, ve |H(jΩ)|<1 için Ω≠Ω0.
Kenar frekanslarını haritalamak için bilinear dönüşümü kullanıyoruz ω1 ve ω2 zaman filtresinin kenar frekanslarına bağlanması Ω1 ve Ω2sürekli zaman filtresinin Genelliği kaybetmeden seçebilirizΩ1=1. Bizim amacımız için bilinear dönüşüm daha sonra
s=1tan(ω12)z−1z+1(3)
sürekli zaman ve ayrık zaman frekansları arasındaki aşağıdaki ilişkiye karşılık gelir:
Ω=tan(ω2)tan(ω12)(4)
itibaren (4) elde ederiz Ω2 ayarlayarak ω=ω2. İleΩ1=1 ve Ω2 -dan hesaplandı (4), analog prototip filtrenin transfer fonksiyonunu (2). Bilineer dönüşümü uygulama(3), ayrık zamanlı bant geçiren filtrenin transfer fonksiyonunu alıyoruz:
Hd(z)=g⋅z2−1z2+az+b(5)
ile
gabc=ΔΩc1+ΔΩc+Ω20c2=2(Ω20c2−1)1+ΔΩc+Ω20c2=1−ΔΩc+Ω20c21+ΔΩc+Ω20c2=tan(ω12)(6)
Özet:
Ayrık zamanlı filtrenin bant genişliği oktav cinsinden (veya genellikle oran olarak) belirtilebilir ve analog prototip filtresinin parametreleri, belirtilen bant genişliği elde edilecek şekilde tam olarak hesaplanabilir. Merkez frekansı yerineω0, bant kenarlarını belirtiyoruz ω1 ve ω2. Tarafından tanımlanan merkez frekansı|Hd(ejω0)|=1 tasarımın bir sonucudur.
Gerekli adımlar aşağıdaki gibidir:
- Bant kenarlarının istenen oranını belirtin ω2/ω1ve bant kenarlarından biri (elbette basitçe belirtmeye eşdeğerdir) ω1 ve ω2).
- Seç Ω1=1 ve belirle Ω2 itibaren (4). hesaplamakΔΩ=Ω2−Ω1 ve Ω20=Ω1Ω2 analog prototip filtresinin (2).
- Sabitleri değerlendirin (6) ayrık zamanlı aktarım fonksiyonunun elde edilmesi (5).
Daha yaygın bir yaklaşımla ω0 ve Δω=ω2−ω1 belirtilirse, gerçek bant kenarları ω1 ve ω2tasarım sürecinin bir sonucudur. Önerilen çözümde, bant kenarları belirlenebilir veω0tasarım sürecinin bir sonucudur. İkinci yaklaşımın avantajı, bant genişliğinin oktavlarda belirtilebilmesi ve çözeltinin kesin olmasıdır, yani, sonuçta elde edilen filtre, oktavlarda tam olarak belirtilen bant genişliğine sahiptir.
Misal:
Bir oktavın bant genişliğini belirleyelim ve alt bant kenarını şu şekilde seçiyoruz: ω1=0.2π. Bu bir üst bant kenarı verirω2=2ω1=0.4π. Analog prototip filtrenin bant kenarlarıΩ1=1 ve (4) (ile ω=ω2) Ω2=2.2361. Bu verirΔΩ=Ω2−Ω1=1.2361 ve Ω20=Ω1Ω2=2.2361. İle(6) ayrık zamanlı aktarım fonksiyonu için (5)
Hd(z)=0.24524⋅z2−1z2−0.93294z+0.50953
aşağıdaki şekilde gösterildiği gibi tam olarak 1 oktav bant genişliğine ve belirtilen bant kenarlarına ulaşır:
Orijinal sorunun sayısal çözümü:
Yorumlardan, merkez frekansını tam olarak belirleyebilmenin önemli olduğunu anlıyorum ω0 hangisi için |Hd(ejω0)|=1memnun. Daha önce de belirtildiği gibi, tam bir kapalı form çözümü elde etmek mümkün değildir ve bir dizi geliştirme oldukça uygunsuz ifadeler üretir.
Anlaşılır olması açısından, olası seçenekleri avantajları ve dezavantajları ile özetlemek istiyorum:
- istenen bant genişliğini frekans farkı olarak belirtin Δω=ω2−ω1ve belirtin ω0; bu durumda basit bir kapalı-form çözümü mümkündür.
- bant kenarlarını belirtin ω1 ve ω2(veya eşdeğer olarak oktavlardaki bant genişliği ve bant kenarlarından biri); bu ayrıca yukarıda açıklandığı gibi basit bir kapalı form çözümüne yol açar, ancak merkez frekansıω0 tasarımın bir sonucudur ve belirtilemez.
- oktav cinsinden istenen bant genişliğini ve merkez frekansını belirtin ω0(soruda sorulduğu gibi); kapalı formda bir çözüm mümkün değildir ve (şimdilik) herhangi bir basit yaklaşım yoktur. Bu nedenle sayısal bir çözüm elde etmek için basit ve verimli bir yöntemin olması arzu edilir. Aşağıda açıklanan budur.
Ne zaman ω0 belirtildiği gibi, normalizasyon sabiti ile kullanılandan farklı bir (3) ve (4):
Ω=tan(ω2)tan(ω02)(7)
Biz tanımlarız Ω0=1. Ayrık zamanlı filtrenin bant kenarlarının belirtilen oranını şu şekilde belirtin:
r=ω2ω1(8)
İle c=tan(ω0/2) bizden alıyoruz (7) ve (8)
r=arctan(cΩ2)arctan(cΩ1)(9)
İle Ω1Ω2=Ω20=1, (9) aşağıdaki biçimde yeniden yazılabilir:
f(Ω1)=rarctan(cΩ1)−arctan(cΩ1)=0(10)
Verilen bir değer için r bu denklem şu şekilde çözülebilir Ω1birkaç Newton iterasyonuyla. Bunun için,f(Ω1):
f′(Ω1)=c(r1+c2Ω21+1c2+Ω21)(11)
With Ω0=1, we know that Ω1 must be in the interval (0,1). Even though it's possible to come up with smarter initial solutions, it turns out that the initial guess Ω(0)1=0.1 works well for most specs, and will result in very accurate solutions after only 4 iterations of Newton's method:
Ω(n+1)1=Ω(n)1−f(Ω(n)1)f′(Ω(n)1)(12)
With Ω1 obtained with a few iterations of (12) we can determine Ω2=1/Ω1 and ΔΩ=Ω2−Ω1, and and we use (5) and (6) to compute the coefficients of the discrete-time filter. Note that the constant c is now given by c=tan(ω0/2).
Example 1:
Let's specify ω0=0.6π and a bandwidth of 0.5 octaves. This corresponds to a ratio r=ω2/ω1=20.5=2–√=1.4142. With an initial guess of Ω1=0.1, 4 iterations of Newton's method resulted in a solution Ω1=0.71, from which the coefficients of the discrete-time can be computed as explained above. The figure below shows the result:
The filter was calculated with this Matlab/Octave script:
% specifications
bw = 0.5; % desired bandwidth in octaves
w0 = .6*pi; % resonant frequency
r = 2^(bw); % ratio of band edges
W1 = .1; % initial guess (works for most specs)
Nit = 4; % # Newton iterations
c = tan(w0/2);
% Newton
for i = 1:Nit,
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
end
W1 = abs(W1);
if (W1 >= 1), error('Failed to converge. Reduce value of initial guess.'); end
W2 = 1/W1;
dW = W2 - W1;
% discrete-time filter
scale = 1 + dW*c + W1*W2*c^2;
b = ( dW*c/scale) * [1,0,-1];
a = [1, 2*(W1*W2*c^2-1)/scale, (1-dW*c+W1*W2*c^2)/scale ];
Example 2:
I add another example to show that this method can also deal with specifications for which most approximations will give non-sensical results. This is often the case when the desired bandwidth and the resonant frequency are both large. Let's design a filter with ω0=0.95π and bw=4 octaves. Four iterations of Newton's method with an initial guess Ω(0)1=0.1 result in a final value of Ω1=0.00775, i.e., in a bandwidth of the analog prototype of log2(Ω2/Ω1)=log2(1/Ω21)≈14 octaves. The corresponding discrete-time filter has the following coefficients and its frequency response is shown in the plot below:
b = 0.90986*[1,0,-1];
a = [1.00000 0.17806 -0.81972];
The resulting half power band edges are ω1=0.062476π and ω2=0.999612π, which are indeed exactly 4 octaves (i.e., a factor of 16) apart.