基于gnuradio的自适应陷波滤波器OOT模块
Introduction
使用的gnuraido版本是3.9,在ubuntu20.04的操作系统下开发。
创建gnuradio的OOT的过程主要参考官方的OOT制作教程c++ OOT with gr-modtool
本文将按照官方教程,演示如何制作一个gnuradio的OOT,除了官方教程中的内容,还将涉及到很多官方教程中没有提到的注意点。
模型工具gr_modtool
在建模前肯定要下载安装gnuradio的本体库。通过命令可以轻松安装:
sudo apt-get install gnuradio
然而要注意的是,不同的ubuntu版本能够安装的gnuradio版本是不同的,ubuntu18只能安装gnuradio3.8,ubuntu20.4可以安装gnuradio3.9,ubuntu对应的gnuradio版本

3.8.2.0-0~gnuradio~bionic 中3.8.2指的是gnuradio版本,bionic是ubuntu版本,指的是ubuntu18,请根据自己的ubuntu版本安装gnuradio,想要使用高版本的gnuradio只能升级ubuntu
仅仅有本体是不够的,还需要安装mod的依赖:
sudo apt-get install gnuradio-dev cmake libspdlog-dev clang-format
创建OOT Module
在任意一个目录下打开终端,在终端中输入:
gr_modtool newmod notchFilter
gr_modtool会在当前目录下新建一个目录,目录名为gr-notchFilter
创建OOT block
gnuradio的模块的逻辑是一个模块下有多个block,比如在gnuradio-companion可视化界面中,math模块下有add,abs等block:

创建block时要先进入module的文件夹中,可以cd进去,也可以打开文件夹后,然后在文件夹中打开终端,这个文件夹中应该有这些(除了build):

然后在终端中输入:
gr_modtool add adaptiveNotch
意思是给模块增加一个adaptiveNotch的block,我这里因为已经有了adaptivenotch,所以就随便输入了lalala,后面的例子和代码仍以adaptiveNotch为例

这是我另外作为例子演示以下添加block的效果,gr_modtool提供了添加block的快速配置,首先选block类型,sync是同步的意思,换言之就是block的输入和输出数量是一样的,‘sink’只有输入,‘source’只有输出,‘decimator’,离散器,就是输出比输入少,‘interpolator’插值器,就是输出比输入多,其他的查一下gnuradio的官网吧。
接下来选语言:

python和c++都可以

然后输入版权持有者,我填的是我的github名称mortarboard-H。
这个会在代码的顶端自动生成一个注释,注明版权。
接下来就是输入block的参数列表,就像是函数的参数列表一样。

接下来好像是询问需不需要自动的测试代码,全部no就行

然后就会自动添加和修改这些文件:

那么用visual code打开对应的文件夹,

就会发现多了一些东西。
在这些文件中,为了实现我们需要的功能,主要需要修改的是impl.h,impl.cc,对应的yaml文件。
修改impl.h
/* -*- c++ -*- */
/*
* Copyright 2022 mortarboard-H.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#ifndef INCLUDED_NOTCHFILTER_ADAPTIVENOTCH_IMPL_H
#define INCLUDED_NOTCHFILTER_ADAPTIVENOTCH_IMPL_H
#include <notchFilter/adaptiveNotch.h>
namespace gr {
namespace notchFilter {
class adaptiveNotch_impl : public adaptiveNotch
{
private:
double sampRate;
double targetFreq;
double curPhase;
double radPerSample;
public:
adaptiveNotch_impl(double sampRate, double targetFreq);
~adaptiveNotch_impl();
// Where all the action really happens
int work(int noutput_items,
gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items);
void update_sample_rate(double rate) override;
void set_target_freq(double rate) override;
};
} // namespace n

本文介绍了如何在Ubuntu 20.04上基于gnuradio 3.9创建一个自适应陷波滤波器OOT模块。详细步骤包括使用gr_modtool创建OOT block,修改相关源代码文件如impl.h和impl.cc,以及调整.yml文件。此外,还强调了修改adaptiveNotch.h以添加更新采样率和目标频率的回调函数,并在完成修改后重新绑定block以避免cmake错误。最后,文章提到了模块安装、测试流程以及后续工作计划。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



