基于gnuradio的OOT模块,iirnotch(iir 陷波滤波器)

2024-01-20 23:50

本文主要是介绍基于gnuradio的OOT模块,iirnotch(iir 陷波滤波器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

基于gnuradio的OOT模块,iirnotch,iir 陷波滤波器

  • To start
  • 一、修改iirNotch.h
  • 二、修改iirNotch_impl.h
  • 三、修改iirNotch_impl.cc
  • 四、修改notchFilter_iirNotch.block.yml
  • 五、安装OOT
  • 六、测试


To start

OOT模块的制作教程可以看上一篇内容:基于gnuradio的自适应陷波滤波器OOT模块,本篇主要就iirnotch的制作进行说明

iirnotch 的原理请参考这一篇:陷波滤波器的离散化设计

如上一篇所说,输入gr_modtool 相关指令,就能生成相关的模块代码,之后只用修改代码即可:
在这里插入图片描述


一、修改iirNotch.h

在类定义中,添加这两句:

virtual void set_wc(float wc)=0;
virtual void set_wb(float wb)=0;

分别作为回调函数(在模块执行完一次数据处理操作后自动调用),更新wc(中心频率)和wb(陷波宽度)。

另外给这两句话加上注释,那么整个文件就是:

/* -*- c++ -*- */
/** Copyright 2022 mortarboard-H.** SPDX-License-Identifier: GPL-3.0-or-later*/#ifndef INCLUDED_NOTCHFILTER_IIRNOTCH_H
#define INCLUDED_NOTCHFILTER_IIRNOTCH_H#include <gnuradio/sync_block.h>
#include <notchFilter/api.h>namespace gr {
namespace notchFilter {/*!* \brief <+description of block+>* \ingroup notchFilter**/
class NOTCHFILTER_API iirNotch : virtual public gr::sync_block {
public:typedef std::shared_ptr<iirNotch> sptr;/*!* \brief Return a shared_ptr to a new instance of notchFilter::iirNotch.** To avoid accidental use of raw pointers, notchFilter::iirNotch's* constructor is in a private implementation* class. notchFilter::iirNotch::make is the public interface for* creating new instances.*/static sptr make(double sampRate, double targetFreq, double width);/*!* \brief call back function to update centre frequency*/virtual void set_wc(float wc)=0;/*!* \brief call back function to update band frequency*/virtual void set_wb(float wb)=0;
};} // namespace notchFilter
} // namespace gr#endif /* INCLUDED_NOTCHFILTER_IIRNOTCH_H */

更新完头文件后,要注意重新绑定,在module所在的文件夹下打开terminal,然后输入:

gr_modtool bind iirNotch

运行效果如下:
在这里插入图片描述

二、修改iirNotch_impl.h

添加对父类中刚刚加入的两个纯虚函数的继承:

void set_wc(float wc) override;
void set_wb(float wb) override;

添加几个成员变量:

//coefficient of input sample
float a0,a1,a2;
//coefficient of delayed output sample
float b1,b2;
double wc;
double wb;
double sampleRate;

这几个成员变量是使用极零点配置法离散化传递函数后得到的,具体的计算和含义参考开头提到的博客。

那么整个文件看起来就像这样:

/* -*- c++ -*- */
/** Copyright 2022 mortarboard-H.** SPDX-License-Identifier: GPL-3.0-or-later*/#ifndef INCLUDED_NOTCHFILTER_IIRNOTCH_IMPL_H
#define INCLUDED_NOTCHFILTER_IIRNOTCH_IMPL_H#include <notchFilter/iirNotch.h>namespace gr {
namespace notchFilter {class iirNotch_impl : public iirNotch {
private://coefficient of input samplefloat a0,a1,a2;//coefficient of delayed output samplefloat b1,b2;double wc;double wb;double sampleRate;public:iirNotch_impl(double sampRate, double targetFreq, double width);~iirNotch_impl();// Where all the action really happensint work(int noutput_items, gr_vector_const_void_star &input_items,gr_vector_void_star &output_items);void set_wc(

这篇关于基于gnuradio的OOT模块,iirnotch(iir 陷波滤波器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/627743

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

python内置模块datetime.time类详细介绍

​​​​​​​Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 ----------动动小手,非常感谢各位的点赞收藏和关注。----------- 使用datet

C8T6超绝模块--EXTI

C8T6超绝模块–EXTI 大纲 控制流程结构体分析EXTI实现按键 具体案例 控制流程 这里是流程框图,具体可以去看我STM32专栏的EXTI的具体分析 结构体分析 typedef struct {uint32_t EXTI_Line; // 中断/事件线EXTIMode_TypeDef EXTI_Mode; // EXTI 模式EXTITrigger_TypeDef EXTI_

1、创建多模块的maven springboot项目

现在的java的项目都是多模块的,这次也跟个风。 目标:实现下述结构 项目AcedBoot, 子模块:         aced-api 对外提供接口,         aced-web 给前端提供接口,         aced-service 服务层,         aced-dao 数据底层,包含数据库mapper和实体类entity,         aced-commo

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

PrestaShop免费模块/插件/扩展/工具下载

PrestaShop免费模块/插件/扩展/工具下载 PrestaShop免费模块 适用于您的电子商务网站的PrestaShop模块 现有超过3,000个PrestaShop模块可帮助您自定义在线商店,增加流量,提高转化率并建立客户忠诚度。 使您的电子商务网站成功! 下载(超过142+之多的PrestaShop官网认证的免费模块) 标签PrestaShop免费, PrestaShop免费工

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现