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:
- konwersja sygnału akustycznego na elektryczny,
- odbiór sygnału elektrycznego przez mikrokontroler,
- wyciągnięcie danych przenoszonych przez sygnał elektryczny i zapis ich do bufora,
- wyznaczenie widma zebranych próbek sygnału, czyli transformacja x(t) ? X(f),
- przedstawienie widma w formie graficznej.
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
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
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]
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