1

使用下面的 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()
4

1 回答 1

0

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
于 2019-03-28T08:07:17.230 回答