Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

DSP - Analizator widma audio

07 Lis 2014 12:42 1533 4
  • Poziom 20  
    Witam

    Jestem w trakcie pracy nad analizatorem widma (na wyświetlaczu led i STM32F103).
    Chciałbym mieć conajmniej 6 częstotliwości.
    Czy do 6 częstotliwości opłaca się robić FFT czy lepej filtry cyfrowe ?

    Jeśli mam robić FFT to jaką bibliotekę wybrać ?
    Czy moje podejście do FFT jest dobre:
    - próbkuje sygnał 40kHz
    - co 50 ms czytam dane z bufora (2048 probek)
    - znowu próbkuje do kolejnego bufora i liczę FFT dla poprzedniego bufora

    Pytanie czy mikrokontroler policzy FFT dla 2048 probek w ciagu 50 ms ? (70 Mhz)
    Nie wiem jakiego czasu bliczeń fft się spodziewać
  • Pomocny post
    Poziom 30  
    Podstawową rzeczą jaką należy rozważyć, to to jakiego widma oczekujemy.

    To znaczy: FFT daje widmo liniowe w osi częstotliwości, czyli mamy równy skok w HZ między prążkami, zależny od częstotliwości próbkowania i rozmiaru algorytmu FFT.

    W zastosowaniach akustycznych, oczekuje się widma rozłożonego w częstotliwości logarytmicznie, co stoi w opozycji do tego co dostajemy od FFT!

    Zwykle jest tak, że logarytmując oś częstotliwości z FFT, najniższe prążki to jeden-dwa słupki FFT a najwyższe nawet kilkaset! Nie wygląda to fajnie, bo żeby uzyskać klika prążków dla dolnych częstotliwości, zwiększamy rozmiar FFT a co za tym idzie zwiększa się okres FFT i widmo nie zmienia się płynnie, tylko co np. 0.5 sekundy i efektu nie ma.

    Moja rekomendacja: filtry, najprościej FIR.

    BTW, będziesz potrzebował pierwiastka stałoprzecinkowego, google a jak nie znajdziesz to daj znać, to prosty w sumie kod.

    Jest taki program na PC, który naprawdę urywa co trzeba, robi cuda z analizą FFT, bardzo przydatny do eksperymentów. Polecam.
    http://www.qsl.net/dl4yhf/spectra1.html
  • Poziom 20  
    czyli rozumię że aby liczyć częstotliwości 30Hz 60Hz 120Hz 400Hz 1kHz 4kHz 12kHz to fft musi być co 30 Hz liczone a to daje około 500 wynikow....
    Jest to technicznie do zrobienia ma STM32103 na postawie bufora o długości 2048 ?

    Chyba musze sie doszkolić z FIR. Jakieś propozycje na lekture? Filtry sa mniej zasobozerne (czas obliczen)
  • Pomocny post
    Poziom 16  
    michcior napisał:
    (...)BTW, będziesz potrzebował pierwiastka stałoprzecinkowego(...)

    Żeby wyznaczyć moduł zespolonego widma? Niekoniecznie, jeśli analizator będzie wyświetlał wyniki w decybelach (zakładam że będzie). Bo przecież log(x²) = 2*log(x), a więc można zlogarytmować kwadrat modułu (czyli sumę kwadratów części rzeczywistej i urojonej widma), a wynik podzielić przez dwa.
    Inne zagadnienie to jak obliczyć logarytm (decybele). STM32F103 ma przydatną do tego celu instrukcję CLZ.
    W omawianym analizatorze najlepiej będzie użyć, zamiast FFT, dyskretnego „kanonicznego” przekształcenia Fouriera dla tych kilku interesujących częstotliwości. Albo rzeczywiście, jak radzi michcior, użyć filtrów pasmowych (podejrzewam, że nakład obliczeniowy będzie podobny jak dla DFT). Z tym, że radziłbym użyć filtrów IIR.
  • Pomocny post
    Poziom 30  
    FFT o długości okna M probek daje M/2 prążków z rozdzielczością Fsampl/M. Dość proste. Czyli np.
    Fsampl = 22000Hz
    dł. FFT = 1024
    rozdzielczość 21.48Hz
    pierwszy prążek to składowa stała.
    ostatni to 10978 Hz
    Czyli ni jak wpasować te 21.48Hz czy 42.9Hz w potrzebną nam 30Hz, potrzeba więcej prążków i jeszcze jakieś wagi bo przecież prążki zachodzą na siebie itd. naprawdę skompilowane i kiedyś to przerabiałem.

    Załóżmy że zwiększymy wielkość okna, ale i częstotliwość próbkowania bo te 10978 to za mało, potrzeba 12kHz. No tak ale zwiększając częstotliwość próbkowania pogarszamy rozdzielczość w niskich częstotliwościach. No to może zwiększyć okno FFT? Super, ale rośnie czas obliczeń i do tego maleje szybkość "odświeżania" wyników. W praktyce to właśnie tak jest, przy FFT=8192 i częstotliwości 44000 mamy już 0.2 sek. A jeszcze pamięć! Nie pamiętam już detali FFT ale z pewnością potrzeba buforów na wejście do zebrania co najmniej dwóch pełnych okien (jedno zbiera dane drugie obliczamy). Samo FFT operuje na liczbach zespolonych, czyli każda liczba w algorytmie to tak naprawdę dwie liczby (rzeczywista i urojona). Jak się przyjmie 32bity na liczbę to sam wektor FFT to jest 8192*4*2 bajty czyli 64kB a to nie wszystko A jakby robić FFT na zakładkę to jeszcze wszystko razy dwa. A gdzie reszta kodu? Może jakiś wyświetlacz itd, a procesor ma tylko 96kB.


    O filtrach FIR/IIR są TB wiadomości w internecie, znajdziesz bez problemu zaczynając od Wikipedii, ponadto setki stron obliczających współczynniki filtrów i nawet generujących kod. Tylko googlać.