【问题标题】:How to plot real time graph using python for the signals received from RTL SDR?如何使用 python 为从 RTL SDR 接收的信号绘制实时图表?
【发布时间】:2019-08-18 20:52:27
【问题描述】:

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

【问题讨论】:

    标签: python rtl-sdr


    【解决方案1】:

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

    【讨论】:

    • 非常感谢 Chirstoph Burschka,我只能得到一次情节,如果我删除 show(),那么循环是连续的。即使我没有得到图没问题,你能告诉我如何计算特定频率的功率谱密度,比如 93.5Mhz。经过长时间的谷歌搜索,我知道功率谱密度是信号自相关函数的傅里叶变换。首先计算自相关函数,然后计算其傅里叶变换。再次感谢您...
    • 不是真的,抱歉。您可以通过stats.stackexchange.com 获得帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2021-04-19
    • 2016-11-09
    • 2016-09-16
    相关资源
    最近更新 更多