2017-04-14 3 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 ]))) 

これは単純に機能しません。信号を注入しても、周波数のパワーはほぼ同じ(ノイズフロアレベル)のままです。

私はなぜこれがうまくいかないかについて2つの理論を持っています。 1)RTL-SDRはI/Qデータを返しますが、この方法はそれを考慮していません。(?)2)FFTの理解は、それを正しく実行するのに十分な音ではありません。

どちらですか?どうすれば修正できますか?

答えて

1

rtl_powerを使用してみましたが、出力で正しいビンを選んだだけですか?これはrtl_sdrスイートに比較的最近追加されたものです。 Cでは、Pythonではありません。 https://github.com/osmocom/rtl-sdr

関連する問題