Odbiór SDR na mikrokontrolerach

Aug 28, 2024 Last reply: 1 year ago 12 Replies

Ostatnio trafiłem na nagranie eksperymentów z odbiorem SDR na Raspberry Pi Pico:



formatting link
Widzę, że w ostatnich latach sporo się w tym temacie zmieniło. Gdy po raz pierwszy zetknąłem się z tematyką SDR, do odbioru potrzebny był przyzwoity komputer. Jeszcze parę lat temu potrzeba było mocnego mikrokontrolera, najlepiej takiego przeznaczonego do zastosowań DSP. Teraz odbiorniki powstają na taniej płytce za kilka dolarów.



Po obejrzeniu tego materiału wpadł mi do głowy pewien pomysł - jakiś czas temu zrobiłem projekt radia Internetowego, pracującego w sieci Ethernet. W najnowszej rewizji hardware'u pracuje dość mocny mikrokontroler PIC32MZ2048 - wybrałem go z myślą o potencjalnym dodaniu programowego dekodowania strumieni audio, co jednak finalnie nigdy nie zostało zaimplementowane - VS1053 radzi sobie doskonale ze wszystkimi formatami, jakie mi były potrzebne. Tak więc MCU przeważnie się nudzi...



Dlatego teraz zastanawiam się na ile byłoby wykonalne dodanie funkcji odtwarzania prawdziwego radia za pomocą SDR. Wstępny plan wygląda mniej-więcej następująco:


  1. Na osobnej płytce zbudować detektor Tayloe razem z generatorem sygnałów przesuniętych o 90 stopni, np. na popularnym Si5351A.
  2. Sygnały z wyjść opampów skierować na (obecnie nieużywane) wejście stereo VS1053 i tam je digitalizować. Ewentualnie mógłbym do tego chyba nawet użyć ADC samego mikrokontrolera.
  3. Demodulować sygnały w sofcie (na Githubie z tego co widzę jest trochę bibliotek dla AM, FM, SSB i CW) i kierować zdekodowany strumień audio na wyjście VS1053.

W teorii brzmi prosto, jednak mam kilka pytań:



  1. Czy to ma w ogóle sens? Wnętrze takiego układu nie będzie zbyt "hałaśliwym" środowiskiem dla odbioru RF? Nie okaże się, że bliskość np. Ethernetu, USB i karty pamięci (a właściwie ich magistral) skutecznie uniemożliwia odbiór czegokolwiek? Na wejściu jest tez jedna przetwornica impulsowa generująca 5V. Pewnie wskazane będzie zastąpienie jej jakimś liniowym stabilizatorem?
  2. Jak wysokie pasma można odbierać takim układem? Trzeba będzie się ograniczyć do KF, czy możliwe będzie też dobranie się do UKF-u?
  3. Jeśli dostępny jest UKF, to istnieje sposób na wyłuskanie SDR-em cyfrowego strumienia danych i odbiór DAB/DAB+?

QDX sobie radzi. Zobacz schemat.

formatting link

Obecnie nawet nie-SDRowe transcievery mają nie wiele mniej cyfrowej elektroniki.

w SDRach raczej limitem jest szerokość samplowanego pasma niż częstotliwość. Częstotliwość pracy zalezy od demodulatora / modulatora kwadraturowego i LO

W przykładzie z Rpi,czynnikiem ograniczającym pasmo jest maksymalna częstotliwość, którą potrafi wygenerować na GPIO a szerokość pasma przez SR ADC. Demodulator (uzyty multiplexer 74CBTLV3253 ZTCP śmiga do 300MHz

W przykładzie QDX od arnolda LO jest tworzone na Si5351 a pasmo ograniczone jest przez ADC PCM1804

DAB to chyba ok 160-220MHz wiec na obu SDRach DAB nie odbierzesz (chyba ze dodasz LNB, które jak najbardziej są stosowane)

Obecnie najtańszym i najprostrzym SDRem jest oczywiście RTL SDR, na którym bez problemu "zsamplujesz" DAB i zdekodujesz na PC czy RPi

c.

Jak to określić? I jaka minimalna szerokość pasma będzie mi potrzebna przy odbiorze rozmaitych transmisji? Zakładałem, że do digitalizacji wykorzystam ADC z VS1053B - kodek jest już używany w projekcie, ale tylko jako DAC i dekoder popularnych formatów audio, wejścia audio nie są w ogóle podłaczone. Planowałem doprowadzić do nich sygnały IQ z detektora Tayloe'a. W dokumentacji układu jest mowa o częstotliwości próbkowania

8000...48000 Hz. Będzie wystarczająca? Do FM chyba faktycznie za mało, ale może poradzi sobie z AM/SSB/CW na niższych pasmach? Zastanawiam się tez czy wąskim gardłem nie będzie magistrala SPI, przez którą trzeba będzie pobierać zdigitalizowane próbki i przesyłać zdekodowane audio do odtworzenia. Ewentualnie jeśli nie VS1053, to może powinienem użyć przetwornika ADC wbudowanego w PIC32MZ2048?

Właśnie wczytałem się w opis tego radia na RPi Pico i widzę, że autor faktycznie generuje przesunięte w fazie sygnały sterujące multiplekserem za pomocą GPIO (korzystając z tego systemu programowalnych peryferiów) i stąd bierze się ograniczenia do 30 MHz. Ja tak czy inaczej zamierzam skorzystać z Si5351.

Widzę, że ten układ ma już sample rate 192 kHz, czyli znacznie więcej niż VS1058. Również wbudowany ADC z PIC32MZ ma zapewniać sample rate na poziomie kilku Msps. Na tym przetworniku z VS1053 będe w stanie zrobić funkcjonalne radio SDR przynajmniej na LW/MW/SW i AM/SSB/CW, czy jednak jego parametry są za słabe i trzeba będzie skorzystać z ADC MCU? Pytam, bo jednak okolica VS-a jest zaprojektowana z myślą o sygnałach analogowych i chociażby posiada wydzieloną masę analogową. Detektor Tayloe'a mógłbym wpiąć (co prawda na osobnej płytce) relatywnie blisko wejść przetwornika. W przypadku ADC MCU przy obecnym projekcie płytki nie byłoby to możliwe.

Cały ten projekt ma być raczej edukacyjną zabawą. Chciałbym po prostu zorientować się co będę w stanie odebrać kierując sygnał IQ na wejścia VS1053. Jeśli okaże się, że nie ma sensu bawić się w wyższe pasma i FM, to ograniczę się do prostego radia na LW/SW/KF. Na odpowiedzi zależy mi o tyle, że da mi ona jasność odnośnie tego, jakie filtry wejściowe powinienem przygotować.

Nie wiem jak działa VS1053 - wydawało mi sie ze to specializowany dekoder MP3 ale moze sie myle.

Według Wiki, MUXy DAB mają 1.5MHz pasma więc aby je odebrać musisz mieć DAC z SR na poziome 3Msps i dość szybki DSP/UC aby to zdekodować

c.

To jest dekoder m.in. MP3, AAC i OGG. Jednak potrafi też odtwarzać WAV, więc powinien też połknąć "surowe" dane PCM, np. powstałe w wyniku zdekodowania zdigitalizowanego sygnału z SDR. Posiada także ADC, na które można skierować sygnał z wejścia liniowego (w VS1053 stereofonicznego, w VS1003 mono) lub wejścia mikrofonowego. Żeby przechwytywać tym sygnał z SDR do dalszej obróbki, trzeba będzie wcześniej wyłączyć AGC.

Ok. W takim razie DAB sobie daruję. O FM też mogę zapomnieć, przynajmniej chcąc przechwytywać próbki za pomocą ADC VS1053 (maksymalnie tylko 48kHz sample rate'u). Ale właśnie uświadomiłem sobie, że FM mogę w prosty sposób zrealizować na inny sposób - wystarczy któryś z tych tanich modułów do odbioru FM, sterowanych przez I2C. W trybie odbioru FM digitalizowałbym po prostu stereofoniczne audio z wyjścia modułu, przesyłając próbki PCM prosto do DAC-a. W trybie odbioru LW/MW/SW digitalizowany byłby sygnał IQ z detektora Tayloe'a, poddawany następnie demodulacji w sofcie. Pozostaje jeszcze pytanie, czy (przy założeniu, że jednocześnie aktywne będzie tylko jedno z nich) obydwa źródła sygnału mogę podpiąć jednocześnie do tych samych wejść ADC, czy też wskazane jest zastosowanie jakichś kluczy/multiplekserów analogowych.

Robisz za duży skrót. Sygnały IQ to tylko sygnały przeniesione z częstotliwości oryginalnej do częstotliwości "0". To taki LNB Tutaj masz troche teori w zjadliwej formie:

formatting link

Po takim przeniesieniu samplujesz to ADC a potem programowo musisz wykonać:

(w przypadku DAB)

- demodulację COFDM

- demodulację QAM

- zdemultipleksować strumień

- zrekonstruować strumień (używająć danych nadmiarowych)

- zdekodować audio (MP2 w przypadku DAB i AAC w DAB+)

c.

Chyba nie do końca się zrozumieliśmy. Doskonale zdaję sobie sprawę z tego, że układ Tayloe'a jedynie "przenosi" fragment pasma z wysokiego zakresu częstotliwości na niski, mieszczący się w możliwościach samplowania ADC. Tak przetworzony sygnał musi zostać poddany software'owej demodulacji i dopiero wtedy otrzymujemy próbki PCM audio, które można wysłać do DAC-a.

Na chwilę obecną rozważam po prostu zastosowanie dwóch równoległych rozwiązań:

  1. Odbiór LW/MW/SW z modulacjami AM/SSB/CW. Tutaj właśnie zamierzam użyc układu Tayloe'a. Sygnał IQ z jego wyjścia podam na wejścia ADC VS1053. Po digitalizacji zostanie on zdemodulowany w sofcie, a następnie w postaci próbek PCM audio przesłany do DAC-a. Próbkowanie 48000 Hz powinno wystarczyć w przypadku tych emisji, PIC32MZ2048 też spokojnie powinien sobie poradzić ze złożonością obliczeniową tej operacji.
  2. Odbiór UKF z modulacją FM. Tutaj początkowo planowałem zastosowanie podobnego rozwiązania, jednak odbiłem już na etapie digitalizacji - próbkowanie 48000 Hz jest za małe do odbioru radiofonii FM. Być może ADC z MCU by sobie poradził, ale jego na chwilę obecną nie chcę stosować. Jest na szczęście jeszcze alternatywne rozwiązanie - użycie modułu w stylu TEA5767. Maleńki element, sterowany przez I2C, który na wejściu przyjmuje sygnał z anteny, a na wyjściu daje zdemodulowany, stereofoniczny sygnał audio. I w tym wypadku to właśnie to audio byłoby kierowane do ADC. Potem już żadne dodatkowe operacje nie byłyby potrzebne - wystarczyłoby przesyłać do DAC-a próbki PCM audio w niezmienionej formie.

Tyle tylko, że wejścia ADC trzeba będzie przełączać pomiędzy wyjściami układu Tayloe'a i TEA5767, np. za pomocą jakichś kluczy analogowych albo analogowego multipleksera (żeby wzajemnie się nie obciążały i nie zakłócały). W zależności od tego, czy w danym momencie odbiór będzie realizowany wedle scenariusza pierwszego, czy drugiego.

Odbiór DAB był takim luźnym pomysłem, z którym już dałem sobie spokój. Po pierwsze za szerokie pasmo do samplowania przez ADC, poza tym nie jestem pewien, czy złożonośc obliczeniowa demodulacji i demultipleksowania jednak nie przerosłaby MCU - nawet przy założeniu, że końcowym dekodowaniem strumienia audio mógłby się zająć VS1053. Zresztą... Odbiór DAB tak naprawdę nie będzie mi potrzebny w urządzeniu, które potrafi odtwarzać streamy audio z Internetu. ;)

Nie potrafię podążyć za Twoim tokiem rozumowania. Checesz użyć kompletny odbiornik FM Stereo, digitalizować wyjście audio (stereo) i potem wysyłać PCM do DAC? Po co ta kombinacja?

Nie. Mam obecnie projekt odtwarzacza streamów audio z Internetu (a także plików audio przechowywanych lokalnie na pendrive/karcie SD). W kolejnej rewizji sprzętu chciałem mu dodać także możliwość odbierania tradycyjnych, analogowych stacji radiowych. Najlepiej na komplecie pasm DŁ/ŚR/KR/UKF z modulacjami AM/SSB/CW/FM.

Niższe zakresy spokojnie ogarnę za pomocą rozwiązania z SDR, na wzór tego radyjka na Raspberry Pi Pico. Problemy zaczynają się w przypadku UKF, gdzie już samo ograniczone pasmo ADC z VS1053 uniemożliwi odbiór radiofonii FM. Tutaj właśnie wchodzi moduł TEA5767.

No chyba, że pytasz mnie po co digitalizować sygnał stereo z TEA5767 i przepuszczać go przez DAC VS1053, aby ponownie otrzymać sygnał analogowy. Powody jestem w stanie wymyślić co najmniej dwa:

- Otwarta furtka do możliwości nagrywania audycji na lokalnym nośniku. Tym bardziej, że VS1053 oferuje też możliwość kompresji w czasie rzeczywistym w kilku formatach.

- Otwarta furtka do możliwości przeprowadzania jakichś operacji DSP na sygnale audio stacji FM.

Jeszcze jedno pytanie nasunęło mi się na myśl? Istnieje jakiś prosty sposób na oszacowanie mocy obliczeniowej potrzebnej do demodulacji AM/SSB/CW? Mam także wcześniejszą rewizję tego samego projektu, w której siedzi starszy mikrokontroler (PIC32MX795F512). Zastanawiam się czy także do niego nie dodać modułu pozwalającego na odbiór SDR. Ten MCU taktowany częstotliwością 80 MHz udźwignie takie zadanie?

W dniu 10.09.2024 o 10:18, Atlantis pisze:

uSDR ogarnia całość (ADC, decymacja, filtracja, Hilbert, demodulacja AM/FM/SSB, AGC, DSP, upsampling, dekodowanie CW) na ATMega328 @ 20MHz:

formatting link

Czysta teoria: częścią ideii SDR jest by selektywność była robiona głównie w części cyfrowej co wymaga wielokrotnie wiekszej częstotliwości próbkowania niż minimalna częstotliwość próbkowania potrzebna do reprezentacji sygnału. Ile razy większa? To jest kompromis między złożonością i kosztem ADC i części cyfrowej a złożonością części analogowej. Jak się ma odpowieni ADC i przy modulacji AM 10 razy to rozsądne minimum.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required