Projektowanie filtrów FIR - FIR Designer (cz. V)

2019-07-30
Projektowanie filtrów FIR - FIR Designer (cz. V)

W poprzednim numerze (LSI 2/2019) zaprezentowaliśmy kolejny program do projektowania filtrów FIR (tym razem niestety płatny) – FIR Designer. Jak wygląda projektowanie za jego pomocą korekcyjnego filtru FIR (takiego, który pozwala zlinearyzować charakterystykę amplitudową i/lub fazową zestawu czy systemu głośnikowego), omówiliśmy w poprzednim numerze. W tym zajmiemy się zaprojektowaniem w FIR Designerze filtru FIR „od zera”.

PROJEKT

Na przykładzie prześledzimy proces projektowania filtrów FIR crossovera dla dwudrożnego zestawu głośnikowego. Filtr ten obejmuje zaprojektowanie crossovera i zlinearyzowanie charakterystyk (amplitudowej i fazowej) głośników zestawu opartego na 5-calowym głośniku koaksjalnym – oprócz zakresu najniższych częstotliwości. Tak jak to miało miejsce w poprzednim artykule, gdy próbowaliśmy „naprawić” charakterystykę zestawu głośnikowego, w pierwszym kroku musimy dysponować charakterystyką – a w zasadzie charakterystykami, osobną dla niskotonowego i osobną dla wysokotonowego – urządzenia, dla którego chcemy zaprojektować crossover.

CHARAKTERYSTYKA GŁOŚNIKA NISKOTONOWEGO

Zmierzoną wcześniej charakterystykę – najlepiej w komorze bezechowej, albo w plenerze, a ostatecznie w pomieszczeniu dobrze wytłumionym, tak aby uniknąć jak najwięcej niepożądanych odbić dźwięku – wczytujemy korzystając z zakładki IMPORT, wciskając znajdujący się po lewej stronie przycisk Load. Pamiętamy – mam nadzieję – z poprzedniego numeru (kto nie czytał, niech zajrzy po szczegóły), iż FIR Designer dopuszcza załadowanie charakterystyki w kilku formatach – od tekstowego poczynając, poprzez własne formaty programów m.in. SMAARTa, EASERy, SusTune’a, na pliku .wav kończąc.

Po załadowaniu charakterystyki ważną rzeczą jest odznaczenie opcji „Normalise magnitude to max.”, co może spowodować zniknięcie charakterystyki amplitudowej (kolor niebieski). Co musimy zrobić, aby wykres znów się pojawił? Musimy zmodyfikować wartość w okienku „Magnitude offset” tak, aby ten fragment charakterystyki, kiedy zaczyna ona w dole pasma częstotliwości opadać był na poziomie ok. 0 dB (ilustracja 1 – miejsce zaznaczone czerwoną strzałką). W następnym kroku musimy zapisać nasz projekt np. jako „filtr LF” (Project/Save As), tak aby można go było wywołać w późniejszym czasie.

(rys. 1)

CHARAKTERYSTYKA GŁOŚNIKA WYSOKOTONOWEGO

Dla głośnika wysokotonowego robimy dokładnie to samo. Wczytujemy (Load) charakterystykę, odznaczamy opcję „Normalise magnitude to max.”, a następnie w okienku „Magnitude offset” wpisujemy taką samą wartość, jak w przypadku głośnika niskotonowego (to bardzo ważne, żeby zachować oryginalną różnicę poziomów obu głośników, którą później będziemy mogli wyrównać – ilustracja 2). Podobnie jak w przypadku głośnika niskotonowego zapisujemy projekt, np. jako „filtr HF”.

(rys. 2)

CROSSOVER TARGET

Analizując obie charakterystyki musimy w kolejnym kroku wybrać częstotliwość podziału pasma pomiędzy oba głośniki. Jak wybrać tę częstotliwość to osobny (spory) temat. W naszym przykładzie wybraliśmy 2 kHz jako punkt podziału crossovera. W menu „Project” wybieramy więc zakładkę „New”. Następnie zaznaczamy w lewym górnym rogu programu okienko „Direct Design”. Wygląd  interfejsu zmieni się na taki, jak na ilustracji 3 – pojawi się nam po lewej stronie okienko z trzema zakładkami: Magnitude Design (projektowanie przebiegu charakterystyki amplitudowej), Phase Design (projektowanie przebiegu charakterystyki fazowej) oraz Export (wiadomo do czego).

(rys. 3)

W zakładce „Magnitude Design” możemy wybrać jeden (w naszym przypadku) lub więcej filtrów o różnych charakterystykach i rodzajach. Przede wszystkim wybieramy czy ma to być filtr minimalnofazowy, maksymalnofazowy czy o liniowej fazie. W kolejnej kolumnie wybieramy rodzaj filtru – a jest w czym wybierać: filtry półkowe, filtr środkowo-przepustowy oraz cała masa filtrów górno- i dolnoprzepustowych różnorakiego typu. My wybieramy klasyczny filtr dolnoprzepustowy Linkwitza-Riley’a 4. rzędu, ale – żeby od razu mieć jak najmniejsze zniekształcenia fazowe – o liniowej fazie (w końcu projektujemy filtr FIR!) – co pokazuje ilustracja 3. Oczywiście częstotliwość filtru ustalamy – zgodnie z wcześniejszym założeniem – na 2.000 Hz. Spójrzmy też na wartości (u góry) „Filter delay” (opóźnienie filtra) i „Filter length” (długość filtra), bowiem przy zbyt małych wartościach rozbieżność między filtrem idealnym a okienkowanym może być zbyt duża.

Teraz  nie pozostaje nam nic innego jak zapisać nasz filtr, korzystając z trzeciej zakładki „Export”. Podobnie jak to miało miejsce w przykładzie z poprzedniego numeru, mamy kilka formatów, w jakich możemy zapisać nasz filtr docelowy (target), co wybieramy w pasku „Format”. My zapisujemy nasz filtr w formacie własnym programu „FIR Designer target file” pod nazwą np. „LF Target”. Zapisujemy też nasz projekt (Project/Save), np. również jako „LF Target” (to jednak nie będzie ten sam plik, bowiem będzie on miał inne rozszerzenie, tj. .fdp, podczas gdy zapisany filtr będzie miał rozszerzenie .fdt).

(rys. 4)

Dokładnie tak samo postępujemy tworząc docelowy filtr górnoprzepustowy dla głośnika wysokotonowego, oczywiście z tą różnicą, że zamiast filtru LPF LR z rozwijanej listy kolumny „Type” wybieramy HPF LR. Tak prawdę mówiąc zamiast tworzyć nowy projekt i przechodzić po kolei wszystko to, o czym pisałem chwilę wcześniej, mając otwarty poprzedni projekt wystarczy tylko zmienić właśnie typ filtru z LPF LR na HPF LR, pozostawiając pozostałe parametry i opcje bez zmian (ilustracja 4). Znów eksportujemy nasz filtr docelowy (ilustracja 5) pod nazwą np. „HF Target”, jak i cały projekt np. również jako „HF Target”.

(rys. 5)

PROJEKTOWANIE FILTRU FIR LF

Wracamy do naszego filtru LF. Otwieramy projekt z wczytaną charakterystyką głośnika LF (czyli ten, który zapisaliśmy pod nazwą „filtr LF.fdp”). W zakładce Target (druga z lewej) po lewej stronie ekranu wybieramy „podzakładkę” File i wczytujemy wcześniej zapisany plik „LF Target.ftd”. Zaznaczając opcję „Magnitude only” informujemy oprogramowanie, żeby ignorowało ono fazę załadowanego pliku (co w naszym przypadku i tak nie ma znaczenia, bowiem wcześniej wybraliśmy filtr o liniowej fazie).

(rys. 6)

Następnie w zakładce „FIR: Magnitude Adjust” za pomocą filtrów prototypowych dopasowujemy przebieg charakterystyki planowanego filtru (zielona na górnym wykresie) do odbitej względem osi X charakterystyki głośnika z nałożoną już charakterystyką docelową (cienka niebieska). W naszym przykładzie skorzystaliśmy z dwóch filtrów dolnoprzepustowych Linkwitza-Riley’a: 2. rzędu (o częstotliwości 2.500 Hz) i 8. rzędu (o częstotliwości 2.700 Hz), co pokazuje ilustracja 6. Dlaczego akurat takie filtry, a nie – jak byśmy się spodziewali – jeden filtr LR 4. rzędu o częstotliwości 2 kHz (jak nasz „target”)? Ano dlatego, że te dwa filtry znacznie bardziej przybliżają naszą charakterystykę głośnika do charakterystyki docelowej niż jeden filtr 2 kHz (porównaj z ilustracją 7).

(rys. 7)

Ponieważ projektujemy filtr typu FIR możemy też „poprawić” charakterystykę fazową głośnika LF. W tym celu udajemy się do zakładki „FIR: Phase Adjust”. Na górnym wykresie cienka czerwona linia to charakterystyka fazowa odfiltrowana w poprzednich zakładkach (w naszym przypadku bez zmian, bowiem do tej pory nie dokonywaliśmy żadnych „przeróbek” fazy), a następnie odbita względem osi X (odwrócona). Znów, podobnie jak to miało miejsce z charakterystyką amplitudową, za pomocą znajdujących się z lewej strony filtrów prototypowych naszym zadaniem będzie zbliżenie zielonej linii z górnego wykresu do cienkiej czerwonej linii. Robimy to tylko zgrubnie, bo dokładniejsze „gładzenie” zostawiamy sobie na później (ci, którzy czytali poprzedni artykuł wiedzą o co chodzi). Ten zabieg pozwoli nam uzyskać bardziej liniowy przebieg charakterystyki fazowej, co możemy zaobserwować na dolnym wykresie (gruba czerwona linia). W naszym przypadku wykorzystaliśmy tylko jeden filtr 4. rzędu obracający fazę o kąt -50 stopni przy częstotliwości 300 Hz w paśmie o szerokości 0,8 oktawy. Efekt tego zabiegu można zobaczyć na ilustracji 8. Jak widać, nie zawracaliśmy sobie głowy najniższymi częstotliwościami, poniżej 200 Hz, bowiem dla zlinearyzowania fazy w tym zakresie potrzebowalibyśmy filtru o bardzo dużej liczbie współczynników, a więc i o dużej latencji.

(rys. 8)

Przechodząc do kolejnych zakładek – FIR: Auto Mag i FIR: Auto Phase – możemy jeszcze bardziej wygładzić obie charakterystyki, tak amplitudową, jak i fazową. Jak tego dokonać, opisałem w poprzednim numerze, więc nie będę tu tego powtarzał. Efekty tego można zobaczyć na ilustracjach 9a (amplituda) i 9b (faza).

(rys. 9a)

Ostatni krok to wyeksportowanie zaprojektowanego filtru FIR – korzystając z zakładki Export. Idealny filtr musi zostać przycięty za pomocą okna czasowego (Window function), aby był praktycznie użyteczny w procesorze. Aby zminimalizować błąd między filtrem idealnym a okienkowanym, możemy pokombinować z parametrami „Filter delay” i „Filter length” – w czym pomocny jest wykres „Total error” na samym dole. W naszym przykładzie wybraliśmy 150 próbek opóźnienia filtru i 500 próbek długości filtru (ilustracja 10). Aby wyeksportować nasz filtr FIR, w menu „Format” wybieramy odpowiedni format pliku – o tym pisaliśmy w poprzednim numerze. No i oczywiście na koniec pozostaje nam jeszcze zapisać projekt.

(rys. 9b)

PROJEKTOWANIE FILTRU FIR HF

Praktycznie te same kroki wykonujemy projektując filtr FIR dla głośnika wysokotonowego. Czyli – w skrócie – wczytujemy nasz wstępnie zapisany projekt „filtr HF”.fdp”, w zakładce Target wczytujemy wcześniej zapisany plik „HF Target.ftd”, następnie w zakładce „FIR: Magnitude Adjust” za pomocą filtrów prototypowych dopasowujemy przebieg charakterystyki planowanego filtru do odbitej względem osi X charakterystyki głośnika z nałożoną już charakterystyką docelową. W naszym przykładzie skorzystaliśmy z dwóch filtrów – górnoprzepustowego Linkwitza-Riley’a 4. rzędu (o częstotliwości 2.200 Hz) o liniowej fazie oraz półkowego wysokotonowego, minimalnofazowego o częstotliwości 800 Hz, szerokości pasma 0,8 oktawy tłumiącego o 6,5 dB (aby dopasować skuteczność drivera do skuteczności głośnika niskotonowego), co pokazuje ilustracja 11.

(rys. 10)

Kolejny krok to zgrubne wyrównanie charakterystyki fazowej – w paśmie pracy drivera, czyli powyżej 1 kHz – czego dokonujemy w zakładce „FIR: Phase Adjust”. Wykorzystaliśmy jeden filtr wszechprzepustowy maksymalnofazowy 2. rzędu o częstotliwości 850 Hz i szerokości 1 oktawy, dzięki czemu uzyskaliśmy stosunkowo liniową fazę w zakresie powyżej 1 kHz (ilustracja 12).

(rys. 11)

Bardziej dokładne „spłaszczenie” obu charakterystyk dokonujemy w zakładkach FIR: Auto Mag i FIR: Auto Phase. Jak widać – zarówno na charakterystyce amplitudowej, jak i fazowej – nieco powyżej 10 kHz pojawia się ostre wcięcie, które być może wynika z „łamania” membrany drivera. Ten obszar pomijamy, dlatego zajęliśmy się tylko pasmem między 1.000 Hz a 10.000 Hz (ilustracja 13a i 13b).

(rys. 12)

Ostatni krok to wyeksportowanie zaprojektowanego filtru FIR – korzystając z zakładki Export. Aby zachować wyrównanie czasowe z głośnikiem LF, należy użyć tego samego opóźnienia filtru, jak i długości („Filter delay” i „Filter length”) jak w przypadku projektu filtru dla głośnika niskotonowego, czyli – odpowiednio – 150 i 500 próbek.

(rys. 13a)

W tym przykładzie zastosowano domyślną częstotliwość próbkowania równą 48 kHz, jednak można ją zmienić w dowolnym momencie. Zaimportowane pomiary i charakterystyki docelowe są przechowywane w ich natywnej częstości próbkowania i ponownie próbkowane do częstotliwości próbkowania projektu. Charakterystyki amplitudowe mogą być dodatkowo korygowane w zakładce „FIR: Voicing” za pomocą dodatkowych filtrów o liniowej, minimalnej lub maksymalnej fazie. Obrót fazy (przesunięcie o 360 stopni) w okolicy 50 Hz w crossoverze dla głośnika niskotonowego można również zlinearyzować za pomocą kombinacji filtrów w zakładkach „FIR: Phase Adjust” i „FIR: Auto Phase”. Będzie to jednak wymagać większych ustawień długość i opóźnienia filtru.

Live Sound & Instalation Newsletter
Krótko i na temat, zawsze najświeższe informacje