Analizator widma z FFT na STM32 z Cortex-M4

Urządzenie, które na wejściu przyjmuje sygnał opisany w czasie, a na wyjściu przedstawia ten sam sygnał, ale już opisany w częstotliwości, nazywamy analizatorem widma. Aby wykonać taki układ należy na początku określić etapy jego realizacji:

  1. konwersja sygnału akustycznego na elektryczny,
  2. odbiór sygnału elektrycznego przez mikrokontroler,
  3. wyciągnięcie danych przenoszonych przez sygnał elektryczny i zapis ich do bufora,
  4. wyznaczenie widma zebranych próbek sygnału, czyli transformacja x(t) ? X(f),
  5. przedstawienie widma w formie graficznej.

 Fot. 4. Umiejscowienie czujnika dźwięku MP45DT02 na płytce STM32F4DISCOVERY

Fot. 4. Umiejscowienie czujnika dźwięku MP45DT02 na płytce STM32F4DISCOVERY

 

Na płytce STM32F4DISCOVERY znajduje się mikrofon MEMS typu MP45DT02 (fotografia 4) i to właśnie on będzie realizował pierwszy etap, czyli zamieniał sygnał akustyczny na elektryczny.

 

Rys. 5. Schemat podłączenia mikrofonu MP45DT02 do mikrokontrolera STM32F407VG w zestawie STM32F4DISCOVERY

Rys. 5. Schemat podłączenia mikrofonu MP45DT02 do mikrokontrolera STM32F407VG w zestawie STM32F4DISCOVERY

 

Jego podłączenie do mikrokontrolera przedstawiono na rysunku 5 i jak widać ma on 6 wyprowadzeń z czego 3 są od zasilania, a pozostałe 3 są sygnałowe. Te ostatnie to kolejno: wybór kanału lewy/prawy (tabela 1), wejściowy sygnał taktujący CLK oraz wyjściowy sygnał danych. Aby lepiej zrozumieć co się dzieje na wyjściu czujnika można podejrzeć za pomocą oscyloskopu jego dwie linie w czasie pracy przykładowej aplikacji – rysunek 6.

 

Tab. 1. Wybór kanału L/R w mikrofonie MEMS typu MP45DT02

Linia L/R

Linia CLK – stan niski

Linia CLK – stan wysoki

GND

Poprawne dane

Wysoka impedancja

Vdd

Wysoka impedancja

Poprawne dane

 

Rys. 6. Przykładowe przebiegi sygnałów na linii CLK (żółty) i DATA (niebieski) mikrofonu MP45DT02

Rys. 6. Przykładowe przebiegi sygnałów na linii CLK (żółty) i DATA (niebieski) mikrofonu MP45DT02

 

Niebieski przebieg może wydać się nieco dziwny, ale jest to strumień 1-bitowych próbek sygnału, lub inaczej jest to sygnał cyfrowy PDM ( Pulse Density Modulation – modulacja gęstością impulsów, rysunek 7), zsynchronizowany z sygnałem taktujący CLK. Z tego wynika, że po stronie mikrokontrolera trzeba w jakiś sposób wystawić na linii CLK sygnał synchronizujący o zadanej częstotliwości i odbierać strumień danych z linii DATA. Za realizację drugiego i częściowo trzeciego etapu będzie odpowiadał układ peryferyjny I2S mikrokontrolera jaki występuje obok układu SPI (mają wspólne rejestry konfiguracyjne).

 

Rys. 7. Sygnał analogowy zakodowany cyfrowo w postaci PDM [źródło en.wikipedia.org]

Rys. 7. Sygnał analogowy zakodowany cyfrowo w postaci PDM [źródło en.wikipedia.org]

 

Odbierane przez układ I2S dane to tylko zbiór pewnych sekwencji bitów i przed oddaniem ich do etapu 4 należy je jeszcze przekonwertować z postaci PDM do postaci PCM, czyli chodzi głównie o to by uzyskać zbiór 16-bitowych wartości opisujących kolejne próbki sygnału w różnych chwilach czasu (kodowanie PCM). W tym celu można wykorzystać gotową bibliotekę PDM Audio Software Decoding Library , która jest dostępna w pliku archiwalnym pod nazwą STSW-STM32068 w katalogu Utilities/STM32F4-Discovery/ (http://www.st.com/web/en/catalog/tools/PF257904) – są to 2 pliki: libPDMFilter_GCC.a oraz pdm_filter.h.

Kiedy mamy już zebrane próbki sygnału to możemy przejść do etapu czwartego i poddać je transformacji Fouriera. We wspomnianym już pliku STSW-STM32068 w katalogu Libraries/CMSIS/DSP_Lib/ można znaleźć kody źródłowe różnych funkcji często stosowanych przy przetwarzaniu sygnałów w tym również gotową funkcje szybkiej transformaty Fouriera ( Fast Fourier Transform ). Szczegółowy ich opis można znaleźć w pliku Libraries/CMSIS/index.htm w kategorii CMSIS DSP Software Library .

Ostatni etap to wyświetlenie otrzymanego widma sygnału na wyświetlaczu LCD i można to zrobić wykorzystując kilka plików biblioteki STM32 embedded GUI library do pobrania na stronie http://www.st.com/web/en/catalog/tools/PF257934 (wymagają one pewnych modyfikacji). Przykładowa prosta aplikacja prezentująca widmo sygnału odbieranego z mikrofonu może wyglądać jak na fotografii 8.

 

Fot. 8. Wyświetlanie widma częstotliwościowego sygnału z mikrofonu; cz. sygnału audio to 3 kHz

Fot. 8. Wyświetlanie widma częstotliwościowego sygnału z mikrofonu; cz. sygnału audio to 3 kHz

Do pobrania

O autorze