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

Analizator widma audio na FPGA

Pong.Chu 19 Lis 2017 17:14 2103 1
  • #1 19 Lis 2017 17:14
    Pong.Chu
    Poziom 23  

    W ramach zabawy z układami FPGA zrobiłem mały analizator widma sygnału audio, publikuje kod gdyby ktoś szukał inspiracji na prawdziwy analizator z kolorowymi słupkami ledów itp. Pierwotnie w planach miałem zastosowanie pasków kolorowych diod led WSxxxx ale jako że bardziej mnie interesuje pisanie w VHDL niż kolorowe światełka skończyło się na prostym wyświetlaczu TFT. Nie będzie żadnych schematów bo wszystko siedzi na płytce ewaluacyjnej Terasic DE2-115 z układem Cyclone V od Altera/Intel. Jedyna modyfikacja to podłączony wyświetlacz na sterowniku ILI9341. Co to robi? A więc tak:

    - Akwizycja próbek audio z wbudowanego układu I2S firmy Wolfson z częstością próbkowania 48 kHz (tak na prawdę 50 kHz) i rozdzielczością 24 bitów. Do obliczeń tylko najstarszych 16 bitów jest używanych. Na raz łapię 1024 próbki.
    - Zapisane w pamięci próbki są mnożone przez funkcję okienkową Hanninga aby dostać ładne widmo po transformacie DFT. Dane typu integer są zamieniane na zmiennoprzecinkową reprezentację IEEE-754 (typu single 32 bity) następnie mnożone przez odpowiednią wartość i zamieniane znów na integer.
    - Po przeskalowaniu liczona jest transformata DFT. Tutaj poszedłem na łatwizję i zastosowałem kod w Verilogu z projektu Spire.
    - Otrzymanego w ten sposób widma liczony jest log10 dla każdej próbki. Aby ładniej na wyświetlaczu ładniej to wyglądało.
    - Z otrzymanego widma generowana jest bitmapa, która zostaje zapisane we framebuferze wyświetlacza. Kod obsługi wyświetlacza pobiera dane z dwuportowej pamięci tam i wysyła po SPI z czestościa 50 MHz.
    - Na jeden bin widma przypada 25kHz/511 = 48.9 Hz. Wyświetlacz pokazuje pierwsze 320 punktów z transformaty więc widzimy widmo od DC do 48.9*320 = 15 kHz.
    - Można wysłać dane z widmem do komputera po naciśnieciu guzika.
    - Przełącznik SW(1) przełącza pomiędzy widmem liniowym a logarytmicznym.

    Jako źródło sygnałów na poniższych filmikach użyłem apki na smartfona. Dla wyższych częstości widmo jest bardzo brzydkie, nie wiem czy to jest spowodowane zniekszatłaceniami w telefonie czy w torze analogowym układu I2S.

    Tutaj są filmiki:
    https://youtu.be/TJIZBhBNofI
    https://youtu.be/xRw6NkzDQ_o

    A tutaj cały projekt Quartus'a:

    https://github.com/filipamator/vu_meter

    Dodałem załącznik jpg ale nie pokazuje się więc trzeba kliknąć w filmik na youtube.

  • #2 20 Lis 2017 19:27
    TechEkspert
    Redaktor

    Ciekawy pomysł i efekty oraz spore wyzwanie gdyż FPGA wymaga nieco innego podejścia.
    Kiedyś zrobiłem coś znacznie prostszego na ESP32: FFT w praktyce z wykorzystaniem ESP32 i Arduino.

    O ile analiza widma wyszła całkiem nieźle to z sensownym przedstawieniem wykresu fazowego było znacznie trudniej,
    @Pong.Chu czy próbowałeś uruchomić wykres fazowy?