一起玩转GNU Radio:gr-digital

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

本文介绍GNU Radio源码的gr-digital相关实例及模块。

目录

一、demod

1、constellation_soft_decoder

2、digital_freq_lock

3、pam_sync

4、pam_timing

​5、symbol_sync_test_complex

6、symbol_sync_test_float

7、test_corr_est

二、ofdm

1、ofdm_loopback

2、tx_ofdm

3、rx_ofdm

三、 Packet

1、burst_tagger

2、example_corr_est

3、formatter_crc


一、demod

1、constellation_soft_decoder

GRC文件为《gnuradio-3.9.1.0/gr-digital/examples/demod/constellation_soft_decoder.grc》。该流图的功能是对比分析硬判决解码、软判决解码的区别。

关于硬判决、软判决解码的区别可以参见。

Hard and Soft decision decoding - GaussianWaves

(1)Random Source模块

Random Source - GNU Radio

该模块是随机信号源模块,可生成满足[min,max)区间的随机数样本。非常适合为调制器创建信息字节。例如:当min=0和max=2时,将生成序列01110101...。支持int,short和byte类型的输出。模块参数解释如下:

Minimum,随机样本的最小值。

Maximum,随机样本的最大值。

Num Samples,随机样本个数。

Repeat,设置随机样本是否重复生成。

(2)Throttle模块

Throttle - GNU Radio

该模块是节流器模块,用来控制纯仿真流图的数据流量,以使平均数据速率不超过特定速率(即采样率,samples per second, sps)。当我们的流图中不使用任何SDR设备、电脑的扬声器或麦克风的时候,进行纯仿真的时候,我们才需要使用该模块。该模块并不是用来规定采样率的,而是用来限定纯仿真流图的平均数据速率,避免仿真流图消耗电脑过多资源。节流模块通常直接作为非硬件源模块(例如信号源模块)的输出模块,以限制信号源模块的数据速率。

模块参数解释如下:

Sample rate,平均采样率的最大既定取值。

Ignore rx_rate tag,如果设置为False,则该块将使用rx_rate的值将其采样率设置为已接收标签的值,并忽略其他标签取值。

(3)Constellation Modulator模块

Constellation Modulator - GNU Radio

该模块是星座调制器模块,用于升余弦滤波器(Root Raised Cosine Filter,RRC-Filter)滤波的差分通用调制。该模块的输入是字节流(无符号字符),输出是基带的复数已调信号。在本流图程序中,该模块与Constellatio Object模块配合使用。模块参数解释如下:

Constellation,用于确定调制类型,提供星座对象。

Differential Encoding,差分编码选项。

Samples/Symbol,每个波特的采样值,为大于等于2的浮点数。

Excess BW,根升余弦(Root-Raised Cosine,RRC)滤波器的excess bandwidth(浮点型)。

关于根升余弦滤波器相关内容,可以参见,

https://ntrs.nasa.gov/api/citations/20120008631/downloads/20120008631.pdf

Verbose,是否打印有关调制器的信息(布尔值)。

Log,是否将调制数据记录到文件中(布尔值)。

(4)Constellation Object模块

Constellation Object - GNU Radio

该模块与Constellatio Modulator以及Constellation Decoder配合使用。GNU Radio支持许多数字通信需求下Constellation对象的创建和使用。我们用复数空间中的一组星座点来定义符号映射。我们用星座点和符号图的列表定义星座。例如对于具有4个符号的星座,则有log2(4)=2比特/符号。

例如,16QAM的星座点= [(-3-3j),(-1-3j),(1-3j),(3-3j),(-3-1j),(-1-1j),(1-1j, (3-1j),(-3 + 1j),(-1 + 1j),(1 + 1j),(3 + 1j),(-3 + 3j),(-1 + 3j),(1 + 3j ),(3 + 3j)]

16QAM符号映射表为[0、4、12、8、1、5、13、9、3、7、15、11、2、6、14、10]。这两个列表中的项目映射是一对一的。这些符号被称为“ pre_diff_code”,因为如果使用的话,这是应用差分调制之前的映射。

Constellation Object模块参数解释如下:

Id,Constellation Object模块的ID号,该ID号用于Constellation Modulator模块的“Constellation”参数栏。

Constellation Type,调制类型。选择“可变星座Variable Constellation”可以实现更灵活的自定义控制。

Symbol Map,(使用“可变星座”时可用)以列表形式手动指定符号图。

Constellation Points,(在使用“可变星座”时可用)使用复数列表手动指定星座点。

Rotational Symmetry,(使用“可变星座”时可用)星座图对称的每360度旋转数,对于常见星座图为4。

Dimensionality,维数。

Soft Decisions Precision,指定查找表(Look Up Table,LUT)的数据精度。

Soft Decisions LUT,用作查找表(LUT)的浮点元组的向量。可以将其设置为“自动”,以便GNU Radio填充它。

(5)Unpack K Bits模块

Unpack K Bits - GNU Radio

该模块是Pack K Bits的逆操作。将具有K个相关位的字节转换为K个字节并输出,每个字节具有1个位,位于LSB中。换句话说,这个块从一个字节中挑选K个最低有效位,并将它们扩展为K个字节的0或1。模块参数解释如下:

K,进行数据处理的个数,例如,K=4,input=[0xf5,0x08],则output=[0,1,0,1,1,0,0,0]。每个输入字节产生四个输出字节(0 或 1)。请注意,GNU Radio 中没有“比特位”的类型,因此我们必须使用字节来表示单个位。

(6)Channel Model模块

Channel Model - GNU Radio

该模块是一个基本的信道模型仿真模块,可用于帮助评估,设计和测试各种信号,波形和算法。该模型允许用户设置AWGN噪声源,(标准化)处理后的频率偏移,采样定时偏移等参数,以随机化或再现AWGN噪声源。在此模型中,可以通过使用带有参数的多径延迟曲线的FIR滤波器来模拟多径效应。当仿真需要时变通道模拟功能时,请使用Channel Model 2(Channel Model 2 - GNU Radio)。

模块参数解释如下:

Noise Voltage,AWGN噪声电平的电压值(将用来计算信噪比SNR)

Frequency Offset,归一化频率偏移。0为无偏移;对于数字调制解调器,0.25将是符号率的四分之一。

Epsilon,采样时序偏移,可模拟发送器和接收器的采样时钟之间的不同速率。

Taps,FIR滤波器的抽头参数,可用来模拟多径延迟曲线。默认值为1+1j,表示单一路径,因此没有多路径。

Seed,噪声源的随机数生成器种子。

Block Tag Propagation,如果设置为true,则标记为无法通过此块传播。

(7)Polyphase Clock Sync模块

Polyphase Clock Sync - GNU Radio

该模块是多相位时钟同步模块,使用多个多相滤波器实现时间同步功能。不过该模块在gnuradio3.9以及之后的新版本中弃用了,在GNU Radio 3.8版本中还可以使用。该模块通过使滤波信号的导数最小化来实现PAM信号的时间同步,也就是实现信噪比SNR最大化并使码间干扰ISI最小化。具体地,通过建立两个滤波器组来实现该功能。一个滤波器组包含信号的脉冲整形匹配滤波器(例如根升余弦滤波器),其中滤波器组的每个分支都包含滤波器的不同相位。模块参数解释如下:

Type,模块的输入输出数据类型,支持Complex->Complex(Real Taps)、Float->Float(Real Taps)。

Samples/Symbol,时钟同步模块需要知道每个符号的采样数,sps可以是任何正实数,并且不必是整数。

Loop Bandwidth,环路带宽用于设置内部控制环路的增益,该值应设置得较小(建议将值设为2pi/100左右,作为单位圆弧相对于误差移动的弧度个数的步长)。

Taps,该模块最重要的参数之一是滤波器的抽头。对于典型的数字调制,这是根升余弦滤波器。此过滤器的抽头数取决于您希望通道持续多长时间。也就是说,您要组合多少个符号才能使当前符号恢复能量(这可能是一种更好的说明方式)。通常是5到10左右。

Filter size,过滤器的数量,默认为32,使用32个过滤器。

Initial Phase,初始相位。

Maximum Rate Deviation,相位最大偏差值,默认为1.5。

Output SPS,模块输出数据的sps值。

(8)QT GUI Constellation Sink模块

QT GUI Constellation Sink - GNU Radio

该模块用于显示多个信号的IQ星座图。该模块支持绘制流式复杂数据或消息,消息端口被命名为“in”。这两种模式不能同时使用,在使用消息模式时应将其设置为0。GRC通过提供“Complex Message”类型来删除此流端口来解决此问题。

(9)Constellation Soft Decoder模块

Constellation Soft Decoder - GNU Radio

该模块是实现星座图复数值的软判决解码功能。在本程序中需要与Constellatio Object模块配合使用。模块参数解释如下:

Constellation Object,星座对象,请参见Constellation Object模块。

(10)Constellation Decoder模块

Constellation Decoder - GNU Radio

该模块是实现星座图复数值的硬判决解码功能。

在本程序中需要与Constellatio Object模块配合使用。模块参数解释如下:

Constellation Object,星座对象,请参见Constellation Object模块。

(11)Map模块

Map - GNU Radio

该模块实现输入信号到映射表中数值的映射操作。该模块期望输入信号的最大值为 len(map)-1。output[i] = map[input[i]]。模块参数解释如下:

Map,将x映射到map[x]的整数向量。

(12)Binary Slicer模块

Binary Slicer - GNU Radio

该模块生成1位输出的浮点值。正输入产生二进制1,负输入产生二进制0。在本流图中,用于将Constellation Soft Decoder模块的浮点输出转换为二进制1或0。

(13)Char to Float模块

Char To Float - GNU Radio

该模块是用于将Char字符流数据转换成Float数据的模块,并可以通过一个缩放因子来调整输入数据的大小(默认情况下,这个缩放因子是1)

关于这个缩放因子,我们通过对比取值为1和10两种情况,便可以一目了然的看到该因子的调节作用。

在图中,Random Source模块生成一个最小值为0,最大值为128,采样数为1K的Byte型数据流,然后分别通过缩放因子分别为1和10的两个Char to Float模块,最后接入QT GUI Time Sink模块中。通过对比发现,缩放因子为1的情况下,转换后的Float数据的最小值为0,最大值为128;缩放因子为10的情况下,转换后的Float数据的最小值为0,最大值为12.8。

(14)QT GUI Time Sink模块

  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值