HomeMade

Pełna wersja: AD9910 + RPi
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Hehe to już jest dobrze Smile

Nie no, choroby wieku dziecięcego.
Nawet po spektrum widać, że wyższych częstotliwości jest znacznie mniej niż u innych, a i tak cały dół (<300Hz) u mnie jest wycięty.
Coś muszę pokombinować, obciąć dół, podnieść górę...nie wiem. Narzędzia mam ograniczone dosyć, bo cały soft został przewidziany do odbierania.

Teraz nadaję mój głos, bo ten studyjny lektor średnio się nadawał do testów - miał bardzo niski głos.

Soft do sterowania DDSem już działa właściwie, ale to co on ma na wejściu jeszcze nie.

Tak wygląda ten kawałek, który decyduje o tym co leci i nad czym teraz walczę.

sox -q -t wav test.wav -t wav -r 36000 -c 1 - '|' csdr convert_i16_f | csdr dsb_fc '|csdr' bandpass_fir_fft_cc -.00694 -.05833 .00138 HAMMING '|' csdr gain_ff 3.0 | ./rpi_AD9910 -f 3764000 -m IQFLOAT -r 36000
Coś znalazłem w temacie..
https://www.ab9il.net/software-defined-r...ssing.html
No cóż...na razie DDS skopał mi d... nic dziwnego, że nie jest to powszechnie stosowane rozwiązanie. Byłoby proste i tanie.

Do DDS wchodzą dane w postaci amplituda, faza, częstotliwość. Można je dowolnie zmieniać, a DDS robi co mu się każe.

Modulacje częstotliwości i amplitudy dają ładny czysty sygnał.

SSB natomiast z wymaga sygnału kwadraturowego IQ - który przelicza się licząc jego amplitudę i fazę ( arctan Q/I ).

Kwestia jak wygenerować SSB - dwa sposoby:
-zrobić z sygnału audio sygnał kwadraturowy DSB i odfiltrować dolną/górną wstęgę
-policzyć z audio transformatę Hilberta i od razu wygenerować jedną wstęgę

Obie metody chyba równie dobre.

W każdym razie, albo popełniam jakiś gruby błąd, albo DDS dokłada swoje problemy.
W przypadku SSB nie udaje mi się uzyskać przyzwoitej jakości. Jest jedna wstęga obok podstawowej częstotliwości, ale jest w niej sporo syfu.

W przypadku "symetrycznej" modulacji dsb jest trochę lepiej.

Na foto spektrum czystego sygnału 500hz i mowy. Obecnie zrezygnowałem z csdr i używam biblioteki liquid-dsp.

[attachment=12851]

Tutaj jest ciekawy dokument który nadgryzłem z pozytywnym efektem...ale zaledwie nadgryzłem.
http://staff.ee.sun.ac.za/~gvrooyen/G-Jv...en_PhD.pdf
chwilowo przerywam z braku czasu
Jeszcze taka jest możliwość....że po prostu się nie da tym sprzętem.

SSB to modulacja amplitudy i fazy.
W dokumentacji DDSa jest wprost napisane, że modulacja fazy może być uzyskana tylko w ograniczonym zakresie przez ciągłą zmianę parametrów.
Mi udaje się to robić z częstotliwością 100khz. Dałoby się szybciej, ale już nie z RPi.

Im wyższa częstotliwość tym mniej zakłóceń i bardziej czytelny sygnał ...ale i tak nie jest dobrze.

hehe...za mało snu...już mi się DDSy pomyliły Smile
PO DWÓCH DNIACH Z PRZERWĄ NA SEN DZIAŁA!
Najważniejszy był błąd był przy przeliczaniu fazy...zabrakło dzielenia przed dwa Big Grin

Zapuściłem też ten sam strumień danych do "fabrycznego" SDRa.
1. Potwierdziłem, że cyfrowe modulatory działają właściwie
2. Okazało się, że....komputerowy mikrofon jest totalnie do d...y. i mój testowy sygnał mowy jest do bani (zaczynam rozumieć te monologi o wyższości jednych mikrofonów za 400zł nad innymi)

Kolejnym błędem było nieobciążenie filtra DDSa impedancją 50ohm.

Po czwarte - w transmisji cyfrowej też trzeba pilnować poziomu.

Udało mi się też wykorzystać do poprawienia audio typowe narzędzia Linuxa - ALSA i pakiet LADSPA

Wciąż nie jest to tak czysta transmisja jak z fabrycznego SDRa...ale za to 10x taniej.

[attachment=12866]
Potestowałem sygnał "na żywo" używając jako mikrofonu kamerki Logitecha Q9000 a odbierałem Pilgrimem.

Rewelacja. Czysto czytelnie. Nad opóźnieniem jeszcze tylko trzeba powalczyć, bo jest spore oraz nad kompresorem audio.
Czy kolega Tomek bywa tu ?
Mam pytanie apropo's AD9910.
Kupiłem również płytkę z chin , trochę się różni od twojej ... kształtem i tym że nie umiem jej uruchomić.
Problem mam taki. Sygnał z CS (czyli pin70) mam również na pinie 71 czyli I/O_reset.
Domyślam się że to zwarcie ale może jednak nie ???
Chciałbym się upewnić przed tym jak zacznę odlutowywać nóżke I/O_reset i pewnikiem ją połamię.

Czy mógłbyś sprawdzić jak masz na swojej płytce ?
Bywa, ale na fejsie mnie znajdź, łatwiej będzie.
Tak, mam i jest to intencjonalne - to jest OK.
CS MCU podłacz do IO update
CS na płytce pod dowolne GPIO które będziesz sterował ręcznie.
Dzięki, dałem radę w końcu.
Skoro ustaliliśmy że to nie błąd na PCB - zacząłem kombinować.
Wpisywałem wartości FTW do rejestru "FTW" (adres 0x07) i w ten sposób nie udało się uruchomić generowania przebiegu.
Jak wpisałem w rejestr o nazwie "Single Tone Profile 0 " (adres 0x0E) w odpowiednie miejsce dla FTW i ustawiłem 3 piny odpowiedzialne za wybór profilu właśnie na "profil 0" to ruszyło jak należy.
Szkoda że w pdf od tej syntezy nie znalazłem wzmianki co trzeba ustawić i w jakiej kolejności aby dds ruszył - nie rozumiem tej polityki.
No to nie jest prosty DDS Smile
tydzień mi zajęło rozgryzienie co to potrafi. Najbardziej liczyłem na uruchomienie w trybie RAM mode - gdzie przez SPI bym zapychał nowe "sample".
Ale się okazało, że albo jesteś w RAM mode albo generuje.
(30-06-2018 23:20)SQ6QV napisał(a): [ -> ]Ale się okazało, że albo jesteś w RAM mode albo generuje.
Nie rozumiem, co masz na myśli ?
Jakiegoś tam wielkiego zaskoczenia nie było u mnie przy przesiadce z AD9951 ... ale i tak była zagadka do odgadnięcia Tongue
Ja ci "zazdraszczam" i jak mi urlop dadzą to też spróbuję wygenerować sygnał SSB z AD9910. Na razie nie wiem jak się zabrać za algorytm ale przynajmniej spróbuję. Bo to rzeczywiście ciekawe.
Robiłem w swoim wynalazku modulację AM i FM na AD9951, procek STM32F413(taktowanie 100MHz) - popychałem tam dane z prędkością 128k i wiem że można szybciej tylko nie wiem gdzie jest granica bo nie sprawdzałem. Z tym że ja ustawiałem albo tylko amplitudę albo tylko częstotliwość ... więc to trywialne dość dla procka.
AD9910 ma wewnętrzny RAM, możesz zapisać chyba 128 nastaw i kazać mu je puszczać w kółko. Chciałem tego użyć jako bufora i zegara dbającego o właściwy interwał.
Niestety się nie da.

AD9910 da się duużo szybciej - sygnał CLK SPI na poziomie kilkudziesięciu Mhz.
STM tego nie potrafi, Raspi owszem, ale jest problem z timingiem.

Między 9951 a 9910 jest przepaść. Ciągle sobie obiecuje wrócić do projektu ale ciągle są inne rzeczy Smile
(21-07-2018 0:04)SQ6QV napisał(a): [ -> ]AD9910 da się duużo szybciej - sygnał CLK SPI na poziomie kilkudziesięciu Mhz.
STM tego nie potrafi, Raspi owszem, ale jest problem z timingiem.
Oj trochę potrafi, F4: 42MHz na SPI1, F7/H7 około 50MHz.
Nie jest tak źle Wink
Nie wiem czemu tak się upierasz przy tych DDS-ach, które chcesz zastosować w SDR-rze.
Ja stosowałem Si570, a ostatnio używam Si5351 z bardzo dobrym skutkiem - bez żadnych śmieci (ptaszków etc.).
Te układy mniej śmiecą od tych wszystkich DDS-ów. Wiem co mówię, bo sam się w to bawiłem...
Si5351 można kupić w Polsce zmontowany na małej płytce sterowanej przez I2C - przez np Arduino.
Działa wystarczająco szybko. Osobiście używam Teensy 3.1 (procek 32-bit).
Pozdrawiam,
Krzysztof 3Z9N (old SP9NLD)
Stron: 1 2
Przekierowanie