2017-04-14 1 views
0

J'essaie d'obtenir la puissance à une fréquence particulière, avec un RTL-SDR. J'adapte des exemples de FFT que j'ai trouvés en ligne. Code abrégé ici (éléments superflus supprimés):Obtenir de l'énergie à une fréquence particulière, SDR et FFT

import matplotlib.mlab as mlab 
import rtlsdr 

NFFT=1024 

dwell = 0.016 
sample_rate = 2.4e6 
offset = 200e3 
freq = 100e6 

sdr = rtlsdr.RtlSdr(0) 
sdr.set_sample_rate(sample_rate) 
sdr.set_manual_gain_enabled(1) 
sdr.set_gain(22.9) 
sdr.freq_correction = 0 

numsamples = next_2_to_pow(int(dwell * sample_rate)) 

freq = freq - offset # avoid dc spike 
sdr.set_center_freq(freq) 
samples = sdr.read_samples(numsamples) 

powers, freqs = mlab.psd(samples, NFFT=NFFT, Fs=sample_rate/1e6, window=hamming(NFFT)) 

bin_offset = int(offset/(sample_rate/NFFT)) 
freq = int(freq + offset) 
pwr = float("{:.2f}".format(10 * math.log10(powers[ int(len(powers)/2) + bin_offset ]))) 

Cela ne fonctionne tout simplement pas. La puissance à la fréquence reste à peu près la même (niveau de bruit de fond), même lorsque j'injecte un signal.

J'ai deux théories expliquant pourquoi cela ne fonctionne pas. 1) Les RTL-SDR retournent les données I/Q, et cette méthode ne tient pas compte de cela (?) 2) Ma compréhension de la FFT n'est tout simplement pas assez bonne pour l'exécuter correctement.

De quoi s'agit-il? Comment puis-je le réparer?

Répondre

1

Avez-vous essayé d'utiliser rtl_power puis de choisir le bon bac dans la sortie? C'est un ajout relativement récent à la suite rtl_sdr. En C, pas Python. https://github.com/osmocom/rtl-sdr