我用的是发射器HackRF 1。我需要每分钟发送一次同样的信息。剩下的时间我需要把发射器关掉。在传输开始时,消息从一开始就被播放。为此,我使用了给Marcus Müller的代码。现在我有以下图表:
但是当使用我的模块时,我得到一个带有一些点击的输出信号,当使用谐波信号作为信号源时,这是明显可见的。
31moq8wy1#
一般来说,您可以使用开箱即用的“模式交织器”块来解决这个问题,其中您将文件源连接到一个输入,将空源连接到另一个输入,然后从第一个输入转发一个音频文件长度的块,然后从另一个(空)输入转发一个小时减去该长度。
[ 0 0 0 … 0 0 1 1 … … … … … … 1 ] ^ ^ ^ ^ \ / \ / audio remainder of length a full hour
只是在这里,时间段变得太长,因此交织器模式向量变得不可行来管理(其大小需要为1小时的样本,这在44处是不可行的)。1 kHz采样率,大于605 MB的整数,以选择从哪个输入转发)。另一个问题是,你需要知道你的音频文件中有多少样本来创建交织器模式。
所以,这里的解决方案是编写你自己的块,它有两个状态:1.通过音频文件输入1.产生零(并且不传递任何输入样本)其中,当您看到完整的音频文件已经通过时,从状态1切换到状态2,并且当您看到整整一个小时已经过去时,从状态2切换到状态1。如果你写一个嵌入的python块,这真的很容易!工作函数的伪代码,该函数将是
import numpy as np from gnuradio import gr class yourblock(gr.basic_block): def __init__(self, period=60, input_length=708000, rate=44100): gr.basic_block.__init__(self, name = "My block", in_sig = [np.float32], out_sig = [np.float32] ) self._samples_per_cycle = int(period * rate) self._zeros_left = self._samples_per_cycle - input_length self._input_length = input_length self._input_left = input_length self._state = 0 def general_work(self, input_items, output_items): in_ = input_items[0] out_ = output_items[0] if self._state == 0: # Passing through from input to_copy = min(self._input_left, len(in_), len(out_)) out_[0:to_copy] = in_[0:to_copy] self._input_left -= to_copy if(self._input_left == 0): self._state = 1 self._zeros_left = self._samples_per_cycle - self._input_length self.consume_each(to_copy) # copied this much from input return to_copy # wrote this much to output if self._state == 1: to_zero = min(self._zeros_left, len(in_), len(out_)) out_[0:to_zero] = 0.0 self._zeros_left -= to_zero if(self._zeros_left == 0): self._state = 0 self._input_left = self._input_length self.consume_each(to_zero) # copied this much from input return to_zero # wrote this much to output
1条答案
按热度按时间31moq8wy1#
短时长方式
一般来说,您可以使用开箱即用的“模式交织器”块来解决这个问题,其中您将文件源连接到一个输入,将空源连接到另一个输入,然后从第一个输入转发一个音频文件长度的块,然后从另一个(空)输入转发一个小时减去该长度。
只是在这里,时间段变得太长,因此交织器模式向量变得不可行来管理(其大小需要为1小时的样本,这在44处是不可行的)。1 kHz采样率,大于605 MB的整数,以选择从哪个输入转发)。
另一个问题是,你需要知道你的音频文件中有多少样本来创建交织器模式。
解决方案:编写自己的有限状态机
所以,这里的解决方案是编写你自己的块,它有两个状态:
1.通过音频文件输入
1.产生零(并且不传递任何输入样本)
其中,当您看到完整的音频文件已经通过时,从状态1切换到状态2,并且当您看到整整一个小时已经过去时,从状态2切换到状态1。
如果你写一个嵌入的python块,这真的很容易!
工作函数的伪代码,该函数将是