如何解决如何更新实时数据的频谱瀑布?
我正在使用 matplotlib
绘制实时信号的频谱。我有实际读取数据的硬件。我希望减少延迟,因此请移至 imshow
,以便我可以快速更新。
对于单次运行,这工作正常。但我想将其制作成动画并使其生动起来。
import numpy as np
import adi
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
sample_rate = 10e6 # Hz
center_freq = 100e6 # Hz
fft_size = 1024
num_samps = 1000000
sdr = adi.Pluto("ip:192.168.2.1")
sdr.sample_rate = int(sample_rate)
sdr.rx_rf_bandwidth = int(sample_rate) # filter width,just set it to the same as sample rate
sdr.rx_lo = int(center_freq)
sdr.gain_control_mode = "slow_attack" # for automatic gain control
sdr.rx_buffer_size = num_samps # how many samples to get each time we call rx()
samples = sdr.rx() # receive samples off Pluto
# Create Waterfall matrix
num_slices = int(np.floor(num_samps/fft_size))
waterfall = np.zeros((num_slices,fft_size))
for i in range(num_slices):
waterfall[i,:] = np.log10(np.fft.fftshift(np.abs(np.fft.fft(samples[i*fft_size:(i+1)*fft_size]))**2))
# Plot waterfall
time_per_row = 1.0/sample_rate * fft_size
fmin = (center_freq - sample_rate/2.0)/1e6 # MHz
fmax = (center_freq + sample_rate/2.0)/1e6 # MHz
plt.imshow(waterfall,extent=[fmin,fmax,time_per_row*num_slices,0],aspect='auto',cmap=plt.get_cmap('jet'))
plt.xlabel('Frequency [MHz]')
plt.ylabel('Time [seconds]')
plt.show()
我想每 1 秒更新一次绘图,以便我可以看到它的实时频谱,看起来我的更新功能无法正常工作。
import numpy as np
import adi
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
sample_rate = 10e6 # Hz
center_freq = 100e6 # Hz
fft_size = 1024
num_samps = 1000000
sdr = adi.Pluto("ip:192.168.2.1")
sdr.sample_rate = int(sample_rate)
sdr.rx_rf_bandwidth = int(sample_rate) # filter width,:] = np.log10(np.fft.fftshift(np.abs(np.fft.fft(samples[i*fft_size:(i+1)*fft_size]))**2))
# Plot waterfall
time_per_row = 1.0/sample_rate * fft_size
fmin = (center_freq - sample_rate/2.0)/1e6 # MHz
fmax = (center_freq + sample_rate/2.0)/1e6 # MHz
fig = plt.figure()
im = plt.imshow(waterfall,cmap=plt.get_cmap('jet'),animated=True)
plt.xlabel('Frequency [MHz]')
plt.ylabel('Time [seconds]')
def updatefig(*args):
im.set_array(waterfall)
return im
# ani = FuncAnimation(plt.gcf(),animate,interval=1000)
ani = FuncAnimation(fig,updatefig,interval=50,blit=True)
plt.show()
谁能建议一个更简单的方法来做到这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。