gnuradio-windows11-使用(1)指数衰减信号

奥本海姆的《信号与系统》感觉很多地方都讲得很细,但是每次拿起来沉浸在数学中都会陷进去,不如和 gnuradio 结合食用。

虽然 gnuradio 也很复杂,但是只从用的角度是没有难度的,细节慢慢以后慢慢再看。

书中第二章的例 2.3,正好用来实战:主要分为两个部分,也就对应下面的两个公式:

  • 一个是对阶跃信号指数衰减
  • 一个是用阶跃响应做卷积

这次先做信号的衰减。

参考官方,的 Creating Your First Block - GNU Radio 教程:

可以模模糊糊的知道,大概是这个自己的block块会有一个线程在跑,然后gnuradio 的调度器会根据python块前面的输入buffer 和后面的输出 buffer 的 size 决定一个大小,然后把输入和输出作为参数传给 work 函数, 具体自己在实现的时候就要用 c 的引用的写法,在python 中就是 [:] 这种切片的形式。

框图如下:

python block 代码如下:

class blk(gr.sync_block):
    
    def __init__(self, alpha=0.2):
        
        gr.sync_block.__init__(
            self,
            name='alpha ** n block',   # will show up in GRC
            in_sig=[np.float32],
            out_sig=[np.float32]
        )
        self.cnt = 0    # 用来统计全局计数
        self.alpha = alpha

    def work(self, input_items, output_items):
        """
            y[n] = alpha ** n  * x[n]
        """
        tmp_len = len(input_items[0]) # 数据块长度

        tmp_ls = self.cnt + np.arange(tmp_len) # 计算当前的 n 

        output_items[0][:] = np.multiply(self.alpha ** tmp_ls, input_items[0][:]) # 乘法运算 
        
        self.cnt += tmp_len # cnt 累加

        return len(output_items[0]) # 返回长度

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值