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.

Modulacja PDM - Jak odkodować sygnał z mikrofonu cyfrowego?

19 Wrz 2013 20:11 2742 5
  • Poziom 16  
    Witam, przymierzam się do obsługi mikrofonu cyfrowego na płytce stm32f4 Discovery. Udało mi się doczytać, że wysyła on cyfrowy sygnał zmodulowany gęstością impulsów, czyli PDM. Niestety na tym moja wiedza się kończy. Wikipedia podpowiada tyle, że 11111111 to wartość dodatnia (jaka?) 00000000 to wartość ujemna a 10101010 to wartość zerowa. Niestety mi to kompletnie nic nie mówi. Ja będę wysyłał do mikrofonu sygnał zegarowy o jakiejś w tajemniczy sposób dobranej częstotliwości i otrzymam ciąg bitów. I co dalej? Proszę o szczegółowe i na prawdę idioto odporne wyjaśnienie jeśli ktoś już się czymś takim bawił.
  • Pomocny post
    Poziom 20  
    Jeśli po prostu chcesz uruchomić mikrofon to są przykłady do STM32F4Discovery, jeden z nagrywaniem za pomocą tego właśnie mikrofonu: Link, zobacz na noty: AN3997 i AN3998.
    Troszkę ciekawych informacji znajdziesz tu:
    Understanding PDM Digital Audio,
    Interfacing WM72xx Digital Microphones,
    jeśli linki wygasną to samo w załączniku.

    Bardzo ogólnie.
    Z mikrofonu dostajesz sygnał 1-bitowy. Gdybyś podłączył tam głośnik to usłyszysz sygnał z mikrofonu - głośnik scałkuje sygnał cyfrowy. W zasadzie taki sam sygnał możesz rejestrować i potem odtwarzać. Jeśli chcesz mieć go w formacie PCM i rozdzielczości w zasadzie dowolnej musisz zrobić decymację sygnału. Próbki z mikrofonu dostajesz z prędkością np. 3,072MHz, po wykonaniu decymacji 64-krotnej otrzymasz próbkowanie 48kHz. Im większy stopień decymacji tym lepszą dokładność uzyskasz więc i sygnał możesz zapisywać z większą rozdzielczością. Tyle że zawęża się pasmo. Decymacja może być wykonywana w jednym kroku lub kilku krokach - kaskadowo połączonych decymatorach niższego rzędu. Sposób z kaskadowym połączeniem ma tym większy sens im większy stopień decymacji z powodu błędów obliczeniowych w filtrze decymatora. O decymacji chyba nie mam się co rozpisywać - jest do tego literatura. Jakość sygnału wyjściowego zależy od doboru filtra, obliczonych współczynników, możliwości obliczeniowych maszyny i przyjętych rozdzielczości, stopnia decymacji no i też od samego mikrofonu.
    Skrótowo
    Dane z mikrofonu chyba najlepiej traktować jako 1 (1 logiczna) i -1 (0 logiczne) w kodzie stałoprzecinkowym powiedzmy Q15, to podawać na filtr, na wyjściu filtru już mamy wszystkie wartości z zakresu -1..1, decymacja w uproszczeniu to pobieranie co n-tą próbkę z wyjścia filtru - i już. Ach, jest jeszcze zalecany filtr górnoprzepustowy.

    Najpierw zobacz, jak to robi ST w przykładzie. Niestety decymator jest jako skompilowana biblioteka bez źródeł.
    Właśnie znalazłem źródła jakiegoś gościa podpisującego się Oleg na forum ST Open source PDM filter for MP45DT02 mic implementujące filtr FIR. FIR ma liniową fazę, ale niestety długo się liczy. Warto by jednak wykorzystać zasoby Cortex M4 używając biblioteki DSP od ST i wykonać filtr IIR.
  • Poziom 16  
    Wielkie dzięki za tak fajną odpowiedź, już sporo rozjaśniłeś. Noty od ST znałem wcześniej ale nic z nich nie wywnioskowałem dlatego ten wątek. Wspomniałeś jeszcze o bibliotece DSP od ST. Mógłbyś coś więcej o niej? Jak byś dysponował linkiem do najbardziej przyzwoitej wersji było by super. (Nie to, że nie chce mi się szukać ale wiadomo jak to się szuka na stronie ST, wyższa filozofia)
  • Poziom 12  
    za to w góglu to już żadna filozofia ;)
  • Pomocny post
    Poziom 20  
    lukash90 napisał:
    Wspomniałeś jeszcze o bibliotece DSP od ST. Mógłbyś coś więcej o niej? Jak byś dysponował linkiem do najbardziej przyzwoitej wersji było by super. (Nie to, że nie chce mi się szukać ale wiadomo jak to się szuka na stronie ST, wyższa filozofia)
    No tak! Kto by pomyślał, że wystarczy podaną przeze mnie stronę przewinąć trochę w dół i ściągnąć:
    STSW-STM32068 "STM32F4DISCOVERY board firmware package, including 22 examples (covering USB Host, audio, MEMS accelerometer and microphone) (AN3983)", zobacz do katalogu Libraries\CMSIS\DSP_Lib
    a także w wyszukiwarce ST wpisać "stm32f4 dsp library":
    STSW-STM32065 "STM32F4 DSP and standard peripherals library, including 82 examples for 26 different peripherals and template project for 5 different IDEs"
  • Poziom 16  
    Ok to tylko ja nie potrafię szukać, linki z google kończą się dla mnie 404 Not Found ale dziękuje za cierpliwość i linki. Póki co myślę, że informacji mam wystarczająco żeby zacząć zabawę z tym mikrofonem a w razie napotkanych problemów (a pewno kilka się trafi) będę tutaj dalej pisać.