(16-12-2016 10:37)SQ2RUU napisał(a): Mam do kolegów pytanie ( wiem - lamerskie...) gdzie można znaleźć opisy algorytmów SDR . Niestety google nic nie podpowiada. Jak pozbyć się "lustrzanych częstotliwości" po detektorze ?
Zanim zaczniesz budować... może najpierw się pobaw.
zobacz to repozytorium
https://github.com/simonyiszk/csdr
Jest tam oprogramowanie które blok po bloku robi całą potrzebną obróbkę.
przykładowo ta komenda to demodulacja SSB
rtl_sdr -s 2400000 -f 145000000 -g 20 - | csdr convert_u8_f | csdr shift_addition_cc `python -c "print float(145000000-144400000)/2400000"` | csdr fir_decimate_cc 50 0.005 HAMMING | csdr bandpass_fir_fft_cc 0 0.1 0.05 | csdr realpart_cf | csdr agc_ff | csdr limit_ff | csdr convert_f_s16 | mplayer -cache 1024 -quiet -rawaudio samplesize=2:channels=1:rate=48000 -demuxer rawaudio -
z tego można się bardzo wiele nauczyć, a bawiąc się linią komend można eksperymentować:
rtl_sdr -s 2400000 -f 145000000 = pobierz z RTLSDR 2.4 mln sampli /sek z częstotlwością środkową 145Mhz - wypadają z tego sample IQ.
csdr convert_u8_f = zamień dane unsigned 8-bit na float (czyli bajt na liczbę zmiennoprzecinkową
csdr shift_addition_cc - przesuwa częstotliwość środkową sygnału - tutaj
shift_addition_cc `python -c "print float(145000000-144400000)/2400000"`
czyli na 144.4Mhz
csdr fir_decimate_cc 50 0.005 HAMMING = to jest filtr dolnoprzepustowy wraz ze zmianą częstotliwości samplowania, 2400000 sampli /50 = 48000 sampli na sekundę. Filtr tnie na 12khz
csdr bandpass_fir_fft_cc 0 0.1 0.05 = to filtr pasmowy - wycina pasmo pomiędzy 0khz a 0.1*48khz = czyli pozostaje pasmo 0-4800Hz
to co zostanie jest wrzucane na te bloki - które sprowadzają sygnał do domeny rzeczywistej, robią AGC i wyjście audio
csdr realpart_cf | csdr agc_ff | csdr limit_ff | csdr convert_f_s16 | mplayer
--------------------------
Jak pozbyć się "lustrzanych częstotliwości" po detektorze ?
tnie je filtr cyfrowy na sygnale kwadraturowym
Może łatwiej to będzie wytłumaczyć na przykładzie nadawania
https://github.com/ha7ilm/rpitx-app-note
zobacz różnicę pomiędzy "generate LSB i generate USB"
csdr dsb_fc | csdr bandpass_fir_fft_cc -0.1 0 0.01
csdr dsb_fc | csdr bandpass_fir_fft_cc 0 0.1 0.01
czyli generuj DSB, a potem filtr przepuszcza jedną lub drugą wstęgę - cała reszta jest taka sama.
-----------
Także w teorii to jest skomplikowane, Ale gotowe bloki upraszczają to wszystko bardzo.
Teraz sobie zdałem sprawę, że chyba nie o to koledze chodziło, tylko o to:
http://stackoverflow.com/questions/37809...s-and-vice
co robi funkcja:
csdr shift_addition_fc
https://github.com/simonyiszk/csdr/blob/...csdr_gpl.c
Późno już