Projektowanie filtrów jest sztuką kompromisów, a aby to zrobić dobrze, należy wziąć pod uwagę kilka szczegółów.
Jaka jest maksymalna częstotliwość, którą należy podać "bez większego" podkreślenia, a jaka jest maksymalna wartość "bez dużo"?
Jaka jest minimalna częstotliwość, która musi być tłumiona "dużo" i jaka jest minimalna wartość "dużo"?
Ile tętnień (np. Zmiana tłumienia) jest akceptowalna w zakresie częstotliwości, które filtr ma przepuścić?
Masz szeroki wybór opcji, które będą Cię kosztowały różne ilości obliczeń. Program podobny do Matlab lub Scilab może pomóc w porównaniu kompromisów. Będziesz chciał zapoznać się z pojęciami takimi jak wyrażanie częstotliwości jako ułamka dziesiętnego częstotliwości próbkowania i zamiana między pomiarem tłumienia liniowej i logarytmicznej (dB).
Na przykład "doskonały" filtr dolnoprzepustowy jest prostokątny w dziedzinie częstotliwości. Wyrażony w dziedzinie czasu jako odpowiedź impulsowa, byłaby to funkcja sinc (sin x/x), której ogony osiągałyby zarówno dodatnią, jak i ujemną nieskończoność. Oczywiście nie można tego obliczyć, więc pojawia się pytanie, czy przybliżasz funkcję sinc do skończonego czasu, który możesz obliczyć, ile to obniża twój filtr?
Alternatywnie, jeśli potrzebujesz skończonego filtra odpowiedzi impulsowej, który jest bardzo tani do obliczenia, możesz użyć "wózka skrzyniowego" lub filtra prostokątnego, w którym wszystkie współczynniki wynoszą 1. (To może być nawet tańsze, jeśli je wdrożysz jako filtr CIC wykorzystujący przepełnienie binarne do akumulatorów "okrągłych", ponieważ i tak będziesz używał później pochodnej). Ale filtr, który jest prostokątny w czasie, wygląda jak funkcja sinc z częstotliwością - ma przesunięcie sin x/x w pasmie przenoszenia (często podniesione do pewnej mocy, ponieważ zazwyczaj masz wersję wieloetapową), a niektóre "odbijają się" w pasie zatrzymania. W niektórych przypadkach jest to użyteczne, samo lub w przypadku zastosowania innego rodzaju filtra.
Audacity jest open source i zawiera wiele filtrów audio. Będą napisane w języku C/C++, ale można to łatwo przetłumaczyć na równoważny kod Java. –
Może mógłbyś pokazać kod, abyśmy wiedzieli, co próbujesz filtrować? –
Mam tutorial, który zawiera filtry drugiego rzędu Butterwortha. Powinno być to łatwe do wdrożenia w Javie: http://blog.bjornroche.com/2012/08/basic-audio-eqs.html –