免费看电视的网站有哪些,设计网页时分辨率是多少,神经网络跟网络架构,微信公众号编辑教程文章目录 前言一、GNU Radio官方FFT弊端二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 和 CMAKE 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域波形对比②、频谱图对比 四、资源自取 前言
GNU Radio 自带的 FFT 模块使用起来不是很方便… 文章目录 前言一、GNU Radio官方FFT弊端二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 和 CMAKE 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域波形对比②、频谱图对比 四、资源自取 前言
GNU Radio 自带的 FFT 模块使用起来不是很方便这个模块要求输入和输出数据长度预先设定且一旦设定后就要求前后的 block 与其具有相同长度的输入输出并不满足我目前的需求因此需要有必要重新自己做一个 FFT 和 IFFT OOT块。 一、GNU Radio官方FFT弊端
举一个简单的例子我目前想要将正弦波信号源产生的信号连接 Throttle 限流器再经过 FFT 和 IFFT然后将信号送给示波器进行显示。 但是当前出现两个报错提示长度不匹配信号源端口为复数类型端口 IO 大小为 8 字节然而 FFT 长度为 1024那么经过 FFT 和 IFFT 端口大小为 8*1024 8192 字节因为 8 ≠ 8192 8\neq 8192 88192所以出现了如下报错
二、创建自定义的 C OOT 块
参考官方教程 Creating C OOT with gr-modtool 创建自定义的 OOT块
1、创建 OOT 模块
GNU Radio 附带 gr_modtool这是一个用于创建树外 (OOT) 模块的软件工具。 OOT 模块可以被视为自定义 GNU Radio 块的集合。使用 gr_modtool 创建一个名为 myModule 的 OOT 模块
gr_modtool newmod myModule 创建目录 gr-customModule其中包含 OOT 模块的所有骨架代码但它还没有任何块。进入 gr-myModule 目录
cd gr-myModule 列出 OOT 模块中的所有文件和目录
ls2、创建 OOT 块
①、在 gr-myModule 目录下添加一个名为 Zadoff-Chu 的新块
gr_modtool add tsfft将显示块的类型
GNU Radio module name identified: myModule
(sink, source, sync, decimator, interpolator, general, tagged_stream, hier, noblock)②、FFT 模块作为标签流模块因此这里将模块类型设置为 tagged_stream
Enter block type: tagged_stream③、使用 C 代码实现
Language (python/cpp): cpp
Language: C
Block/code identifier: tsfft④、输入版权所有者的名称或组织
Please specify the copyright holder: gnep⑤、输入三个参数分别是包长度FFT 长度长度标签FFT 或 IFFT 选择
Enter valid argument list, including default arguments:
int packet_len, const std::string len_key, bool forward⑥、选择是否需要 QA 代码
Add Python QA code? [Y/n] n
Add C QA code? [Y/n] n⑦、然后将创建或修改多个文件
Adding file lib/tsfft_impl.h...
Adding file lib/tsfft_impl.cc...
Adding file include/myModule/tsfft.h...
Editing swig/myModule_swig.i...
Adding file grc/myModule_tsfft.block.yml...
Editing grc/CMakeLists.txt...相关配置如下图
3、修改 C 和 CMAKE 文件
修改 gr-myModule/lib/ 目录下的 tsfft_impl.cc 和 tsfft_impl.h 和 CMakeLists.txt 文件以及 gr-myModule/grc/目录下 myModule_tsfft.block.yml 目录下的配置文件
lib/tsfft_impl.h 核心部分程序
fftwf_plan d_fft_plan;
fftwf_complex* d_buffer;
int d_packet_len;
bool d_forward;lib/tsfft_impl.cc 核心部分程序
gr_complex* in (gr_complex*)input_items[0];
gr_complex* out (gr_complex*)output_items[0];// Set output to one packet (defined with tagged stream)
noutput_items ninput_items[0];// Execute fft plan
memcpy(d_buffer, in, d_packet_len * sizeof(gr_complex));
fftwf_execute(d_fft_plan);
memcpy(out, d_buffer, d_packet_len * sizeof(gr_complex));// Tell runtime system how many output items we produced.
return noutput_items;lib/CMakeLists.txt 部分只需增添下面两行代码
find_library(FFTW3F_LIB NAMES fftw3f PATHS /usr/lib/x86_64-linux-gnu)
target_link_libraries(gnuradio-myModule ${FFTW3F_LIB})grc/myModule_tsfft.block.yml 部分核心配置
parameters:
- id: packet_lenlabel: Packet lengthdtype: int
- id: len_keylabel: Packet length keydtype: stringdefault: packet_len
- id: forwardlabel: Forward/Reversedtype: enumoptions: [True, False]option_labels: [Forward, Reverse]详细代码及配置文件文末自取
4、编译及安装 OOT 块
1、该块需要编译和安装确保目前位于 gr-myModule 目录中
cd gr-myModule2、如果 build/ 目录已存在请将其删除
rm -rf build/3、创建 build/ 目录
mkdir build4、进入 build 目录
cd build/ 5、运行 cmake 来构建 makefile
cmake ..6、编译模块
make7、安装模块
sudo make install8、更新 myModule 库的链接
sudo ldconfig 三、测试
打开 gnuradio-companion
gnuradio-companion可以看到安装成功的 fft 模块
1、grc 图
创建一个简单的测试用例一个频率为 1KHz 的正弦波信号源将其转换为标签流再经过 FFT 和 IFFT最后喂给示波器显示分别在接 FFT 和 IFFT 块前后分别放置示波器及频谱仪观察是否一致。
2、运行结果
①、时域波形对比 ②、频谱图对比 从上图可以看出无论是时域图还是频域图原始信号和经过 FFT 及 IFFT 信号一模一样即原始信号经过 FFT 及 IFFT后可以复原也可以证明我们所做的 FFT OOT 成功了
四、资源自取
链接GNU Radio创建FFT、IFFT C OOT块 我的qq2442391036欢迎交流