Problem postawiony w pytaniu wydaje się nie mieć rozwiązania w formie zamkniętej. Jak wspomniano w pytaniu i pokazano w innych odpowiedziach, wynik można przekształcić w serię, którą można osiągnąć za pomocą dowolnego symbolicznego narzędzia matematycznego, takiego jak Mathematica. Jednak warunki stają się dość skomplikowane i brzydkie i nie jest jasne, jak dobre jest to przybliżenie, jeśli uwzględniamy warunki do trzeciego rzędu. Ponieważ nie możemy uzyskać dokładnej formuły, może być lepiej obliczyć rozwiązanie numerycznie, co w przeciwieństwie do przybliżenia da (prawie) dokładny wynik.
Jednak nie o to chodzi w mojej odpowiedzi. Proponuję inną drogę, która daje dokładne rozwiązanie, zmieniając sformułowanie problemu. Po zastanowieniu się przez chwilę okazuje się, że jest to specyfikacja częstotliwości środkowejω0oraz określenie szerokości pasma jako stosunku (lub równoważnie w oktawach), co powoduje matematyczną trudność. Istnieją dwa sposoby wyjścia z dylematu:
- określić szerokość pasma filtra czasu dyskretnego jako różnicę częstotliwościΔω=ω2−ω1, gdzie ω1 i ω2 są odpowiednio dolną i górną krawędzią pasmową filtra czasu dyskretnego.
- przepisz stosunek ω2/ω1i zamiast ω0 określ jedną z dwóch częstotliwości krawędziowych ω1 lub ω2.
W obu przypadkach możliwe jest proste rozwiązanie analityczne. Ponieważ pożądane jest określenie szerokości pasma filtra czasu dyskretnego jako stosunku (lub, równoważnie, w oktawach), opiszę drugie podejście.
Zdefiniujmy częstotliwości brzegowe Ω1 i Ω2 filtra czasu ciągłego według
|H(jΩ1)|2=|H(jΩ2)|2=12(1)
z Ω2>Ω1, gdzie H(s) jest funkcją przesyłania filtra pasmowego drugiego rzędu:
H(s)=ΔΩss2+ΔΩs+Ω20(2)
z ΔΩ=Ω2−Ω1, i Ω20=Ω1Ω2. Zauważ, żeH(jΩ0)=1, i |H(jΩ)|<1 dla Ω≠Ω0.
Używamy transformacji dwuliniowej do mapowania częstotliwości krawędzi ω1 i ω2 filtra czasu dyskretnego na częstotliwości brzegowe Ω1 i Ω2filtra czasu ciągłego. Bez utraty ogólności możemy wybraćΩ1=1. Dla naszych celów transformacja dwuliniowa przyjmuje wówczas postać
s=1tan(ω12)z−1z+1(3)
odpowiadające następującej zależności między częstotliwościami w czasie ciągłym a częstotliwościami w czasie dyskretnym:
Ω=tan(ω2)tan(ω12)(4)
Od (4) otrzymujemy Ω2 przez ustawienie ω=ω2. ZΩ1=1 i Ω2 obliczone z (4), otrzymujemy funkcję przesyłania analogowego filtra prototypowego od (2). Zastosowanie transformacji dwuliniowej(3), otrzymujemy funkcję transferu filtru pasmowego z czasem dyskretnym:
Hd(z)=g⋅z2−1z2+az+b(5)
z
gabc=ΔΩc1+ΔΩc+Ω20c2=2(Ω20c2−1)1+ΔΩc+Ω20c2=1−ΔΩc+Ω20c21+ΔΩc+Ω20c2=tan(ω12)(6)
Podsumowanie:
Szerokość pasma filtru z czasem dyskretnym można określić w oktawach (lub ogólnie jako stosunek), a parametry analogowego filtra prototypowego można dokładnie obliczyć, tak aby osiągnąć określoną szerokość pasma. Zamiast częstotliwości środkowejω0, określamy krawędzie pasma ω1 i ω2. Częstotliwość środkowa zdefiniowana przez|Hd(ejω0)|=1 jest wynikiem projektu.
Niezbędne kroki są następujące:
- Określ pożądany stosunek krawędzi pasma ω2/ω1i jedną z krawędzi pasma (co oczywiście jest równoznaczne z prostym określeniem) ω1 i ω2).
- Wybierać Ω1=1 i ustal Ω2 od (4). ObliczaćΔΩ=Ω2−Ω1 i Ω20=Ω1Ω2 analogowego filtra prototypowego (2).
- Oceń stałe (6) aby uzyskać funkcję przenoszenia w czasie dyskretnym (5).
Zauważ, że przy bardziej powszechnym podejściu gdzie ω0 i Δω=ω2−ω1 są określone, rzeczywiste krawędzie pasma ω1 i ω2są wynikiem procesu projektowania. W proponowanym rozwiązaniu można określić krawędzie pasma iω0jest wynikiem procesu projektowania. Zaletą tego drugiego podejścia jest to, że szerokość pasma można określić w oktawach, a rozwiązanie jest dokładne, tzn. Wynikowy filtr ma dokładnie określoną szerokość pasma w oktawach.
Przykład:
Określmy szerokość pasma jednej oktawy i wybieramy dolną krawędź pasma jako ω1=0.2π. Daje to górną krawędź pasmaω2=2ω1=0.4π. Krawędzie pasma analogowego filtra prototypowego toΩ1=1 i od (4) (z ω=ω2) Ω2=2.2361. To dajeΔΩ=Ω2−Ω1=1.2361 i Ω20=Ω1Ω2=2.2361. Z(6) dostajemy za funkcję transferu w czasie dyskretnym (5)
Hd(z)=0.24524⋅z2−1z2−0.93294z+0.50953
która osiąga dokładnie szerokość pasma 1 oktawę i określone krawędzie pasma, jak pokazano na poniższym rysunku:
Numeryczne rozwiązanie pierwotnego problemu:
Z komentarzy rozumiem, że ważne jest, aby móc dokładnie określić częstotliwość środkową ω0 dla którego |Hd(ejω0)|=1jest spełniony. Jak wspomniano wcześniej, nie jest możliwe uzyskanie dokładnego rozwiązania w formie zamkniętej, a rozwój serii daje dość niewygodne wyrażenia.
Dla jasności chciałbym podsumować możliwe opcje z ich zaletami i wadami:
- podaj pożądaną szerokość pasma jako różnicę częstotliwości Δω=ω2−ω1i określ ω0; w tym przypadku możliwe jest proste rozwiązanie w formie zamkniętej.
- określ krawędzie pasma ω1 i ω2(lub równoważnie szerokość pasma w oktawach i jedna z krawędzi pasma); prowadzi to również do prostego rozwiązania w formie zamkniętej, jak wyjaśniono powyżej, ale częstotliwości środkowejω0 jest wynikiem projektu i nie można go określić.
- podaj żądaną szerokość pasma w oktawach i częstotliwość środkową ω0 (as asked in the question); no closed form solution is possible, nor is there (for the time being) any simple approximation. For this reason I think it's desirable to have a simple and efficient method for obtaining a numerical solution. This is what is explained below.
When ω0 is specified we use a form of the bilinear transform with a normalization constant that is different from the one used in (3) and (4):
Ω=tan(ω2)tan(ω02)(7)
We define Ω0=1. Denote the specified ratio of band edges of the discrete-time filter as
r=ω2ω1(8)
With c=tan(ω0/2) we get from (7) and (8)
r=arctan(cΩ2)arctan(cΩ1)(9)
With Ω1Ω2=Ω20=1, (9) can be rewritten in the following form:
f(Ω1)=rarctan(cΩ1)−arctan(cΩ1)=0(10)
For a given value of r this equation can be solved for Ω1 with a few Newton iterations. For this we need the derivative of 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:
Dodaję kolejny przykład, aby pokazać, że ta metoda może również poradzić sobie ze specyfikacjami, w przypadku których większość przybliżeń da niesensowne wyniki. Często dzieje się tak, gdy pożądana szerokość pasma i częstotliwość rezonansowa są duże. Zaprojektujmy filtr zω0= 0,95 π i b w = 4oktawy. Cztery iteracje metody Newtona z wstępnym odgadnięciemΩ( 0 )1= 0,1 dają końcową wartość Ω1= 0,00775, tj. w paśmie analogowego prototypu log2)(Ω2)/Ω1) =log2)( 1 /Ω2)1) ≈ 14oktawy. Odpowiedni filtr czasu dyskretnego ma następujące współczynniki, a jego odpowiedź częstotliwościowa pokazano na wykresie poniżej:
b = 0,90986 * [1,0, -1];
a = [1,00000 0,17806 -0,81972];
Wynikowe krawędzie połowy mocy są ω1= 0,062476 π i ω2)= 0,999612 π, które są rzeczywiście dokładnie 4 oktawy (tj. współczynnik wynoszący 16) osobno.