【发布时间】:2023-03-16 13:30:02
【问题描述】:
这是我之前的问题的后续:FFT in non-flowgraph centered application different from flowgraph centered apps like uhd_fft
为了更好地澄清问题,我将我的代码精简到大约 30 LOC,并从流程图中删除了尽可能多的处理。
我遇到的问题是,虽然 USRP 只调整到一个频率,流程图的每次运行都有大约 70 毫秒的垃圾数据。 我完全清楚当我在重新调整后第一次流式传输样本时,预计会有一定数量的“垃圾”样本,但这不是我们在这里看到的。对于现有的连接流程图的每次运行,我们都会看到大量垃圾样本(约 50,000 个)。
在 Python 中运行流程图然后处理数据有点不常见,但 在本教程中介绍为与 GNU Radio here
交互的有效方式我想了解每次我在其上调用 run() 时,GNU Radio 流程图逻辑的哪一部分会产生这种电压“打嗝”,而让它不断流式传输(仅调用一次 run,如 uhd_fft)不显示相同的行为。
...使用此代码生成:
import numpy as np
from gnuradio import gr, uhd, blocks
import matplotlib.pyplot as plt
class topblock(gr.top_block):
def __init__(self, freq=700e6, rate=1e6, nsamps=100000):
gr.top_block.__init__(self)
self.u = uhd.usrp_source(device_addr="", stream_args=uhd.stream_args('fc32'))
self.u.set_center_freq(freq)
self.u.set_samp_rate(rate)
self.head = blocks.head(gr.sizeof_gr_complex, int(nsamps))
self.vsink = blocks.vector_sink_c()
self.connect(self.u, self.head, self.vsink)
tb = topblock()
fig, (freqplot, timeplot) = plt.subplots(2, sharex=True)
freqplot.set_title("Frequency domain")
timeplot.set_title("Time domain")
def plot():
tb.run()
data = np.array(tb.vsink.data())
shifted_fft = np.fft.fftshift(np.fft.fft(data))
dBm = 20*np.log10(np.abs(shifted_fft)) - 30
freqplot.plot(dBm)
timeplot.plot(np.abs(data))
tb.head.reset()
tb.vsink.reset()
def run_tb(times=10):
for _ in range(times):
plot()
plt.show(block=False)
【问题讨论】:
标签: gnuradio usrp software-defined-radio