plot.set_xdata()
通常,您可以通过调用、plot.set_ydata()
和plot.draw()
(在 matplotlib 中动态更新绘图)来更新 pyplot 生成的绘图,而无需重新创建整个绘图。但是,这只适用于直接绘制数据系列的图。绘图实例无法自动重新计算由 计算的光谱密度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