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

2024-05-07 21:12

本文主要是介绍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,欢迎交流!


这篇关于GNU Radio FFT模块结合stream to vector应用及Rotator频偏模块使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3