gpt4 book ai didi

python - 如何使用 python 绘制从 RTL SDR 接收到的信号的实时图?

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:02 27 4
gpt4 key购买 nike

使用下面的 python(ubuntu) 代码和 rtlsdr,我可以绘制图表。谁能告诉我如何修改这段代码以实时连续绘制图表?

from pylab import *
from rtlsdr import *
sdr = RtlSdr()
sdr.sample_rate = 2.4e6
sdr.center_freq = 93.5e6
sdr.gain = 50
samples = sdr.read_samples(256*1024)
sdr.close()
psd(samples.real, NFFT=1024, Fs=sdr.sample_rate/1e6, Fc=sdr.center_freq/1e6)
xlabel('Frequency (MHz)')
ylabel('Relative power (dB)')
show()

最佳答案

通常,您可以通过调用 plot.set_xdata()plot.set_ydata()plot.draw() ( Dynamically updating plot in matplotlib ),无需重新创建整个绘图。但是,这仅适用于直接绘制数据系列的图。绘图实例无法自动重新计算由 psd() 计算的谱密度。

因此,当您想要更新绘图时,您需要再次调用 psd() - 根据绘制所需的时间,您可以以一秒或更短的时间间隔执行此操作.

这可能有效:

from pylab import *
from rtlsdr import *
from time import sleep
sdr = RtlSdr()
sdr.sample_rate = 2.4e6
sdr.center_freq = 93.5e6
sdr.gain = 50

try:
while True: # run until interrupted
samples = sdr.read_samples(256*1024)
clf()
psd(samples.real, NFFT=1024, Fs=sdr.sample_rate/1e6, Fc=sdr.center_freq/1e6)
xlabel('Frequency (MHz)')
ylabel('Relative power (dB)')
show()
sleep(1) # sleep for 1s
except:
pass

sdr.close()

编辑:当然,我不确定 read_samples 是如何运行的;我这里的例子假设它几乎立即返回。如果它在等待数据时阻塞很长时间,您可能希望一次读取较少的数据,并在这样做时丢弃旧数据:

from collections import deque

max_size = 256*1024
chunk_size = 1024

samples = deque([], max_size)

while True:
samples.extend(sdr.read_samples(chunk_size))

# draw plot

关于python - 如何使用 python 绘制从 RTL SDR 接收到的信号的实时图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55391596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com