GNU Radio FFT模块结合stream to vector应用及Rotator频偏模块使用

文章目录

  • 前言
  • 一、FFT 模块应用
    • 1、stream to vector 介绍
    • 2、创建 grc 图测试
    • 3、运行结果
  • 二、频偏模块
    • 1、Rotator 简介
    • 2、创建 grc 图测试
    • 3、运行结果


前言

写个博客记录一下自己的蠢劲儿,之前我想用 FFT 模块做一些信号分析的东西,官方的 FFT 模块必须输入与 FFT 大小一致的数据,然后我也想到了使用 stream to vector 将流数据转换为固定长度的向量数据,然后再一次性喂给 FFT 模块,但是,stream to vector 模块我用的不对,导致 stream to vector 的输出连接 FFT 模块的那条线就一直是红色,我就以为官方的 FFT模块不好用,因此自己就做了 C++ OOT FFT 模块方便自己使用,今天突发奇想,官方做的应该不会有问题,会不会是我自己的使用不当,果真如此,这真是一次教训啊,做这个 FFT 花费了不少时间,既然是教训,那就吃亏是福吧。


一、FFT 模块应用

1、stream to vector 介绍

stream to vector 模块介绍:
在这里插入图片描述

  • Num items:连接成一个输出向量的连续输入项的数量
  • Vec Length:输入向量的长度。输出向量的长度为 Vec Length * Num items

之前我的做法是将 Vec Length 设置成了1024,将 Num items 设置为 1,因此导致输入输出 IO size 不同,犯了这个低级错误,导致自己造轮子重新造了一个 FFT 模块:GNU Radio创建FFT、IFFT C++ OOT块

2、创建 grc 图测试

复刻官方的 demo 示例 grc 图。
在这里插入图片描述
S ( f ) = 10 lg ⁡ ∣ X ( f ) ∣ 2 / f f t _ l e n S(f)=10 \lg^{|X(f)|^2 / fft\_len} S(f)=10lgX(f)2/fft_len
其中:

  • S ( f ) S(f) S(f):信号功率谱密度的对数,单位为 dB
  • ∣ X ( f ) ∣ 2 ∣X(f)∣^2 X(f)2:为信号的功率谱密度
  • f f t _ l e n fft\_len fft_len:傅里叶变换长度

在进行快速傅里叶变换 (FFT) 时,输出的幅度与输入的样本数量相关。对于 f f t l e n fft_len fftlen 个输入样本,FFT 的输出通常需要缩放 1 / f f t _ l e n 1/fft\_len 1/fft_len 以保持幅度一致,如果要保持输入信号和 FFT 输出的能量一致,需要对 FFT 的结果进行归一化。 1 / f f t _ l e n 1/fft\_len 1/fft_len 是最常见的归一化系数。

3、运行结果

在这里插入图片描述
从上图可知,运行结果一致。

二、频偏模块

如何对现有的信号做叠加频偏呢?我们来看一下如何实现

1、Rotator 简介

旋转器(Rotator)块执行频率平移操作。这种操作被称为旋转,因为如果将复数采样(实部和虚部)中的实部和虚部绘制在复数单位圆上,在这个圆上进行旋转会产生一个给定频率的波形。顺时针或逆时针进行这样的旋转会产生正频率或负频率,这正是这个块在数学上执行的操作。
在这里插入图片描述
相位增量(以弧度为单位)是每次采样时信号增加的额外相移量。因此,该块相当于用复数正弦进行乘法操作。

在这里插入图片描述

我们正在处理采样信号,因此我们只能在每个采样间隔 T s = f f s T_s=\frac{f}{f_s} Ts=fsf 观察它,在两个采样时刻之间,相位会增长 Δ ϕ = 2 π f f s \Delta \phi = 2\pi\frac{f}{f_s} Δϕ=2πfsf,因此,为了实现特定的频率偏移 f f f,必须从目标频率计算相位增量。

2、创建 grc 图测试

在这里插入图片描述

其中 Rotator 的参数 Phase Increment 值如下: 2 ∗ n p . p i ∗ f r e q _ o f f s e t s a m p _ r a t e 2*np.pi*\frac{freq\_offset}{samp\_rate} 2np.pisamp_ratefreq_offset
在这里插入图片描述

3、运行结果

上面我们将 freq_offset 也就是频率偏移设置为 4 KHz,因此经过频偏后的信号应该在原信号的基础上频谱会偏移 4KHz。

原信号频率为 1KHz,经过频偏后的信号为 5KHz

在这里插入图片描述


我的qq:2442391036,欢迎交流!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

营销5.0时代,企业的痛如何解?

进入营销5.0阶段之后,许多企业都需解决连接客户效能低下的问题。针对这个问题,产品经理、软件开发公司包括个人开发者,要怎么找到有效的“解药”? 营销不仅每年都在变化,甚至每天都在变化。 ——现代营销学之父&…

【再探】设计模式—适配器、装饰及外观模式

结构型设计模式是用于设计对象和类之间关系的一组设计模式。一共有7种:适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式及代理模式。 1 适配器模式 需求:在软件维护阶段,已存在的方法与目标接口不匹配,需要个中…

论文阅读:RHO-1:Not All Tokens Are What You Need 选择你需要的 Tokens 参与训练

论文链接:https://arxiv.org/abs/2404.07965 以往的语言模型预训练方法对所有训练 token 统一采用 next-token 预测损失。作者认为“并非语料库中的所有 token 对语言模型训练都同样重要”,这是对这一规范的挑战。作者的初步分析深入研究了语言模型的 t…

记录一个练手的js逆向password

很明显 请求加密了password 全局搜索 有个加密函数(搜不到的可以搜临近的其他的关键字 或者url参数) 搜索的时候一定要仔细分析 我就没有仔细分析 我搞了好久 又是xhr又是hook的(还没hook到) 我当时也是疏忽了 我寻思这个也不是js文件 直到后来 我怎么也找不到 我就猜想 不…

C# 获取一个字符串中非数字部分?

方法一:使用正则表达式 使用正则表达式可以便捷地匹配并提取出字符串中所有非数字字符。与之前保留数字时的做法相反,这次我们将匹配数字并替换为空字符串,从而留下非数字部分。 using System; using System.Text.RegularExpressions;publi…

代码随想录算法训练营DAY44|C++动态规划Part6|完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ

文章目录 完全背包理论基础完全背包问题的定义与01背包的核心区别为什么完全背包的循环顺序可以互换?CPP代码 ⭐️518.零钱兑换II思路CPP代码 ⭐️377. 组合总和 Ⅳ思路CPP代码 扩展题 完全背包理论基础 卡码网第52题 文章链接:完全背包理论基础 视频链接…

【ITK配准】第四期 多分辨率配准

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中多分辨率的配准,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. 使用样例…

Npm基本解说

npm(Node Package Manager)是Node.js的一个包管理工具,它允许你安装、更新、卸载和发布Node.js应用程序的依赖项。下面我将详细解释npm的一些核心功能和用法。 1. 安装依赖项 你可以使用npm install命令来安装一个或多个依赖项。例如&#…

RustGUI学习(iced)之小部件(七):如何使用图像image部件来显示图片?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第七篇,主要讲述图像Image部件的使用,会结合实例…

【数据结构与算法】力扣 102. 二叉树的层序遍历

题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: [[3],[9,20],[15,7]]示例 2&#x…

上证50etf期权到底该怎么玩?

今天期权懂带你了解上证50etf期权到底该怎么玩?ETF期权是一种股票市场上的金融衍生品,它是在交易所上市交易的期权合约,其标的资产是某个特定的交易所交易基金(ETF),如上证50指数ETF或沪深300指数ETF等。 上…

Git命令Gitee注册idea操作git超详细

文章目录 概述相关概念下载和安装常见命令远程仓库介绍与码云注册创建介绍码云注册远程仓库操作关联拉取推送克隆 在idea中使用git集成add和commit差异化比较&查看提交记录版本回退及撤销与远程仓库关联 push从远程仓库上拉取,克隆项目到本地创建分支切换分支将…

(✌)粤嵌—2024/5/7—除自身以外数组的乘积

代码实现&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ int* productExceptSelf(int *nums, int numsSize, int *returnSize) {// 左乘积int l[numsSize];l[0] 1;for (int i 1; i < numsSize; i) {l[i] l[i - 1] * nums[…

为什么谷歌浏览器插件中不能使用xmlhttprequest(axios)

按照Chrome Extension官方说明&#xff0c;在MV3中&#xff0c;由于Service Workers的机制&#xff0c;background pages中不支持XMLHttpRequest&#xff0c;建议使用原生fetch()。由于axios使用的是XMLHttpRequest&#xff0c;因此&#xff0c;不能使用axios进行API请求。 在V…

什么是 Web 安全

什么是 Web 安全 培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;624032112 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 移动应用开发群&#xff1a;548238632 极安云科专注于技能提升&#xff0c;赋能 20…

Cesium学习——渲染、加载GeoJSON、调整位置

渲染概述 作者&#xff1a;当时明月在曾照彩云归 出处&#xff1a;https://www.cnblogs.com/jiujiubashiyi/p/17124717.html 1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库&#xff0c;使用WebGL来进行硬件加速图形&#xff0c;使用时不需要任何插件支持&#xf…

以中国为目标的DinodasRAT Linux后门攻击场景复现

概述 在上一篇《以中国为目标的DinodasRAT Linux后门剖析及通信解密尝试》文章中&#xff0c;笔者对DinodasRAT Linux后门的功能及通信数据包进行了简单剖析&#xff0c;实现了对DinodasRAT Linux后门心跳数据包的解密尝试。 虽然目前可对DinodasRAT Linux后门的通信数据包进…

供应商管理软件:帮助企业确定供应商的可靠性

采用单一供应商还是多家供应商&#xff0c;是企业在供应链管理领域面临的一个关键决定。 在德勤对采购专业人士进行的一项调查中&#xff0c;70% 的受访者表示&#xff0c;他们使用多家供应商来管理供应链风险。然而&#xff0c;61% 的受访者表示&#xff0c;他们也使用单一采…

SecretFlow学习指南(3)框架拆解和使用

“隐语”架构设计全貌 1.隐语框架设计思想 隐私计算是一个新兴的跨学科领域&#xff0c;涉及密码学、机器学习、数据库、硬件等多个领域。根据过去几年的实践经验&#xff0c;我们发现 ●隐私计算技术方向多样&#xff0c;不同场景下有其各自更为合适的技术解决方案 ●隐私计算…

Windows系统安装MySQL数据库详细教程

【确认本地是否安装mysql】 &#xff08;1&#xff09;按【winr】快捷键打开运行&#xff1b; &#xff08;2&#xff09;输入services.msc&#xff0c;点击【确定】&#xff1b; &#xff08;3&#xff09;在打开的服务列表中查找mysql服务&#xff0c;如果没有mysql服务&am…