HomeMade
Odbiornik SDR - "samoróbka" - Wersja do druku

+- HomeMade (http://sp-hm.pl)
+-- Dział: Urządzenia nadawczo odbiorcze KF (/forum-62.html)
+--- Dział: Urządzenia i oprogramowanie SDR (/forum-68.html)
+--- Wątek: Odbiornik SDR - "samoróbka" (/thread-2869.html)

Strony: 1 2


RE: Odbiornik SDR - "samoróbka" - SQ6QV - 03-05-2017 23:25

(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/3780921/dsp-converting-a-sampled-signal-from-real-samples-to-complex-samples-and-vice

co robi funkcja:
csdr shift_addition_fc

https://github.com/simonyiszk/csdr/blob/master/libcsdr_gpl.c
Późno już Smile