【发布时间】:2022-08-23 01:55:01
【问题描述】:
我试图在 GNU Radio 中创建一个程序,它将信号中的数据存储到 Filesink 中。但是,通过这样做,文件接收器中的大部分数据将包含噪声。我的目标是只存储主信号和同一信号前后的一点点噪声。
为了实现这一点,我尝试使用“嵌入式 python 块”构建一个缓冲区,该缓冲区将仅存储主信号,并且如上所述,该信号之前和之后的一点噪声(存储的大小噪声由缓冲区的大小决定)。
为此,我创建了这个 GNU Radio 程序GNU Radio Program,最后我将文件接收器连接到静噪块,并将文件接收器连接到缓冲区块,以便我可以使用频谱分析仪比较两个文件接收器。
(注意:我使用发射器和 arduino 发出信号。arduino 被编程为每秒发送一条“Hello World”消息。然后我使用 SDR-Pluto 捕获该信号/消息)。
主要问题是,在我运行程序后,无论我让程序运行多长时间,静噪文件接收器都只有 64KB。另一方面,随着时间的推移,缓冲区文件接收器将存储数据,但是,当我在频谱分析仪上检查缓冲区文件接收器时,频谱是空的。
如果有人可以帮助我了解问题所在,我将不胜感激。 这是我的缓冲区代码:
import numpy as np
from gnuradio import gr
class blk(gr.basic_block): # other base classes are basic_block, decim_block, interp_block
def __init__(self, buffer_size_param=10000.0): # only default arguments here
\"\"\"arguments to this function show up as parameters in GRC\"\"\"
gr.basic_block.__init__(
self,
name=\'Embedded Python Block (Buffer)\', # will show up in GRC
in_sig=[np.complex64, np.complex64],
out_sig=[np.complex64]
)
self.buffer = []
self.buffer_size_param = buffer_size_param
self.counter = self.buffer_size_param
def general_work(self, input_items, output_items):
squelch = input_items[0]
throttle = input_items[1]
for i in range(len(squelch)):
if (squelch [i] == 0):
self.counter = self.counter + 1
if (self.counter <= buffer_size_param):
output_items.append(throttle[i])
else:
self.buffer.append(throttle [i])
if len (self.buffer) > buffer_size_param:
self.buffer.pop (0)
else:
output_items = output_items + self.buffer
output_items.append(throttle[i])
self.buffer = []
self.counter = 0
return len(output_items)
标签: python gnuradio gnuradio-companion