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

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE