2017-04-14 1 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에서는 파이썬이 아닙니다. https://github.com/osmocom/rtl-sdr

관련 문제