Czy istnieje termin techniczny na tę prostą metodę wygładzenia sygnału?


26

Po pierwsze, jestem nowy w DSP i nie mam w tym prawdziwego wykształcenia, ale rozwijam program do wizualizacji dźwięku i reprezentuję tablicę FFT jako pionowe paski jak w typowej wizualizacji widma częstotliwości.

Problem, który miałem, polegał na tym, że wartości sygnału audio zmieniały się zbyt szybko, aby uzyskać przyjemny efekt wizualny, jeśli bezpośrednio zmapowałem wartości FFT:

wprowadź opis zdjęcia tutaj

Dlatego stosuję prostą funkcję do wartości, aby „wygładzić” wynik:

// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2; 
// 0.2 is arbitrary - the lower the number, the more "smoothing"

Innymi słowy, pobieram bieżącą wartość i porównuję ją z ostatnią, a następnie dodam ułamek tej delty do ostatniej wartości. Wynik wygląda następująco:

wprowadź opis zdjęcia tutaj

Więc moje pytanie brzmi:

  1. Czy jest to ugruntowany wzorzec lub funkcja, dla której termin już istnieje? Czy tak, jaki jest termin? Używam „wygładzania” powyżej, ale mam świadomość, że oznacza to coś bardzo specyficznego w DSP i może nie być poprawne. Poza tym wydawało się, że może być związane z kopertą objętości, ale też nie do końca tym samym.

  2. Czy istnieją lepsze podejścia lub dalsze badania nad rozwiązaniami tego, na które powinienem spojrzeć?

Dziękuję za poświęcony czas i przeprosiny, jeśli jest to głupie pytanie (czytając inne dyskusje tutaj, zdaję sobie sprawę, że moja wiedza jest znacznie niższa niż wydaje się średnia).


1
Teraz zastanawiam się, co otrzymasz, jeśli weźmiesz wygładzony FFT i odwrotnie FFT.
user253751,

Czy łatwiej byłoby po prostu odpowiedzieć na pierwszą odpowiedź w innej kolejności? wartość bieżąca = wartość bieżąca * rozpad; if (nowa_wartość> aktualna_wartość) {bieżąca_wartość = nowa_wartość; }
Richard Forster,

@immibis To powinien być pogłos z mojego zrozumienia. Popraw mnie, jeśli się mylę.
Andreas

Jasne, a kompilator optymalizujący wygeneruje tę samą implementację. Kluczową kwestią było uzyskanie poprawnego wyniku, gdy (wartość bieżąca * zanik) <wartość nowa <wartość bieżąca.
Richard Forster,

2
Naprawdę podoba mi się to pytanie. Jest to jeden z tych, w których ktoś, kto wypróbuje kilka rzeczy, przypadkowo odkrywa siebie na dnie ogromnego drzewa wiedzy (w szczególności filtry Infinite Impulse Response). Tymczasem ludzie, którzy już wspinają się na drzewo, mogą opisać wszystkie fajne rzeczy, które już odkryli wśród gałęzi ...
DrMcCleod

Odpowiedzi:


37

Zaimplementowałeś jednobiegunowy filtr dolnoprzepustowy, czasami nazywany nieszczelnym integratorem . Twój sygnał ma równanie różnicy:

y[n]=0,8y[n-1]+0.2x[n]

x[n]y[n]


4
Wielkie dzięki za to. Tak bardzo pomocny. Googling sam jest jak zagubienie się na morzu, jeśli chodzi o DSP. Posiadanie kilku terminów do wyszukiwania daje mi coś do zrozumienia.
Michael Bromley,

3
Zastanawiam się. Myślę, że OP stosuje ten filtr do szeregu wartości w poszczególnych przedziałach w dziedzinie częstotliwości. Normalny dolnoprzepustowy jest stosowany do serii próbek w dziedzinie czasu. Czy efekt jest taki sam (nie sądzę, ponieważ części o wysokiej częstotliwości są nadal w sygnale, ale… ich intensywność zmienia się wolniej?)? Jeśli nie, czy mógłbyś wyjaśnić, co filtr robi z sygnałem w dziedzinie czasu?
Jonas Schäfer

3
@JonasWielicki Myślę, że celem jest wygładzenie każdej wartości bin, tak aby nie zmieniała się bardzo szybko. również filtr dolnoprzepustowy (jak wyjaśniono w odpowiedzi) ma zastosowanie do dowolnych szeregów czasowych, niezależnie od jego dziedziny (czas, częstotliwość lub cokolwiek innego).
Arpit Jain

@arpitjain Rozumiem to. Chciałbym po prostu wiedzieć, czy istnieje jakieś zrozumienie (niekoniecznie przez ciebie, OP lub odpowiadającego), w jaki sposób wpływa to na dziedzinę czasu, kiedy to robisz.
Jonas Schäfer

@JonasWielicki Operacja jest splotem w dziedzinie częstotliwości, więc przekłada się na mnożenie (odpowiadających (odwrotnych) przekształceń Fouriera) w dziedzinie czasu.
MBaz,

17

Ostrzeżenie: dołącz trochę historii, stare gazety (uwielbiam je) i karty dziurkowania!

za=0.2

y(n)=y(n-1)+za[x(n)-y(n-1)],
y(n)=zax(n)+(1-za)y(n-1).

Pierwsza powyższa wersja jest mniej naturalna, ale unika jednego pomnożenia i jest w jakiś sposób bardziej wydajna. Oba wzory dają liniowy , przyczynowy i nieskończony filtr odpowiedzi impulsowej . Historia wraca do i przez Poissona, Kolmogorov-Zurbenko Adaptive Filters , Brown (Prognozy statystyczne dla kontroli zapasów. McGraw-Hill, 1959), Holt (1957) i Winters (1960). Jest zaimplementowany jako rekurencyjny schemat filtrowania znany pod różnymi nazwami w literaturze:

„Wykładniczy” w nazwie jest związany z odpowiedzią impulsową z postępem geometrycznym, który próbkuje rozkład wykładniczy: .h[n]=(1-za)u[n]zan

Dla przypomnienia historycznego Robert G. Brown i Arthur D. Little zastosowali tę metodę w 1956 r. W wygładzaniu wykładniczym do przewidywania popytu , najwyraźniej dla przemysłu tytoniowego. Nieco historii i wyjaśnienia można znaleźć w Holt-Winters Forecasting for Dummies (lub deweloperów) - Część I . Peter Zehna przedstawia krytyczną recenzję w kilku uwagach na temat wygładzania wykładniczego , 1966. Rozdział R. Browna w Encyklopedii badań operacyjnych i nauk o zarządzaniu (książki Google) pochodzi z 1944 r., Czytelne strony zostały odtworzone tutaj:

Wygładzanie wykładnicze, str.  205, Encyklopedia badań operacyjnych i nauki o zarządzaniu

Wygładzanie wykładnicze, str.  206, Encyklopedia badań operacyjnych i nauki o zarządzaniu

Wiele metod rozszerza to wygładzanie, które nie jest ważne, gdy dane mają tendencję lub sezonowość. Niektóre z nich znane są jako podwójne lub potrójne wygładzanie wykładnicze oraz filtry Holta-Wintersa .

Możesz także sprawdzić: Jak działa ten „prosty filtr”?


1
Dzięki, to świetnie. Jak wspomniano, jestem całkowicie nowy, więc niektóre z twoich odpowiedzi będą wymagały dalszych badań, aby w pełni docenić, ale z pewnością odpowiada na moje pytanie, a następnie niektóre. Jeśli nie dla innych, wcześniejszych odpowiedzi, to też oczywiście godne akceptacji, jak na odpowiedź.
Michael Bromley,

1
Mała korekta, Winters 1 (960) powinien być Winters (1960) Zakładam
SGR

9

Czy istnieją lepsze podejścia lub dalsze badania nad rozwiązaniami tego, na które powinienem spojrzeć?

Normalnym podejściem dla mierników audio jest „detektor strat szczytowych”.

if new_value > current_value
  current_value = new_value;
else
 current_value = current_value * decay;  

Reaguje natychmiast na każdy nowy, szczytowy lub przejściowy sygnał, ale utrzymuje się przez chwilę, dzięki czemu tworzy znacznie mniej gorączkowy obraz. Rozpad powinien być stałą między 0 a 1. Kontroluje on, jak szybko skończą się słupki, przy czym 0 oznacza natychmiastowe, a 1 nigdy.


Zauważam, że ma to podobieństwo do zadania, które wykonałem na studiach, bardzo brzmiący MIDI (utworzony w poprzednim zadaniu) został ulepszony przez zwoje (i skalowanie w celu dopasowania szczytów i czasów trwania) (całkowicie prostokątnych) sygnałów nuty trójkątnym sygnał narastał bardzo gwałtownie (choć nie natychmiast), a następnie stopniowo zanikał, tworząc ostrą nutę, która zanikała „naturalnie”. Ogromna poprawa brzmienia piosenki (w tym przypadku Fur Elise).
KRyan

Myślę, że chcesz zachować, new_valuejeśli jest większy niżcurrent_value * decay
user276648

6

Wokół kręgów wykonawców DoD w USA ten konkretny filtr jest często nazywany „filtrem alfa”, ponieważ można go scharakteryzować za pomocą jednego parametru, który tradycyjnie nazywa się „alfa”.

Jest on bezpośrednio analogiczny do analogowego filtra dolnoprzepustowego RC.

Są niezwykle proste, mają poważne ograniczenia, ale mają niezaprzeczalną przewagę nad bardziej złożonymi (i skomplikowanymi!) Filtrami, które, jeśli unikniesz obszarów problemowych, wykonają zadanie.


3

Jak wspomniano w innych odpowiedziach, jest to filtr rekurencyjny jednobiegunowy, rodzaj filtra o nieskończonej odpowiedzi impulsowej (IIR).

Świetnym źródłem informacji na temat tej i innych funkcji DSP jest Steven W. Smith's The Scientist and Engineer Guide to Digital Signal Processing : nieskończona odpowiedź impulsowa (IIR)

... każdy punkt w sygnale wyjściowym można znaleźć, mnożąc wartości z sygnału wejściowego przez współczynniki „a”, mnożąc wcześniej obliczone wartości z sygnału wyjściowego przez współczynniki „b”, i dodając produkty razem. Uwaga że nie ma wartości dla b0, ponieważ odpowiada to obliczanej próbce. Równanie 19-1 nazywa się równaniem rekurencyjnym, a filtry, które go używają, nazywane są filtrami rekurencyjnymi. Wartości „a” i „b”, które definiują filtr, nazywane są współczynnikami rekurencji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.