2017-04-14 61 views
0

我試圖通過RTL-SDR獲得特定頻率的功率。我正在修改我在網上找到的FFT示例。這裏縮寫代碼(刪除多餘的東西):在特定頻率下獲得功率,SDR和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 ]))) 

這根本行不通。即使在我注入信號時,頻率上的功率也保持不變(本底噪聲電平)。

我有兩個理論爲什麼這不起作用。 1)RTL-SDR返回I/Q數據,這種方法沒有考慮到(?)2)我對FFT的理解聽起來不夠完善。

這是什麼?我該如何解決它?

回答

1

您是否嘗試過使用rtl_power,然後在輸出中選擇正確的bin?這是rtl_sdr套件最近的一個新增功能。在C中,不是Python。 https://github.com/osmocom/rtl-sdr