以特定频率、SDR 和 FFT 获取电源
Getting power at a particular frequency, SDR and FFT
我正在尝试使用 RTL-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-SDRs return I/Q 数据,而这种方法没有考虑到这一点 (?) 2) 我对 FFT 的理解根本不够健全,无法正确执行它。
这是哪个?我该如何解决?
您是否尝试过使用 rtl_power 然后在输出中选择正确的 bin?这是 rtl_sdr 套件的一个相对较新的补充。在 C 中,不是 Python。 https://github.com/osmocom/rtl-sdr
我正在尝试使用 RTL-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-SDRs return I/Q 数据,而这种方法没有考虑到这一点 (?) 2) 我对 FFT 的理解根本不够健全,无法正确执行它。
这是哪个?我该如何解决?
您是否尝试过使用 rtl_power 然后在输出中选择正确的 bin?这是 rtl_sdr 套件的一个相对较新的补充。在 C 中,不是 Python。 https://github.com/osmocom/rtl-sdr