本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!
本文介绍GNU Radio源码的gr-digital相关实例及模块。
目录
一、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模块
该模块是随机信号源模块,可生成满足[min,max)区间的随机数样本。非常适合为调制器创建信息字节。例如:当min=0和max=2时,将生成序列01110101...。支持int,short和byte类型的输出。模块参数解释如下:
Minimum,随机样本的最小值。
Maximum,随机样本的最大值。
Num Samples,随机样本个数。
Repeat,设置随机样本是否重复生成。
(2)Throttle模块
该模块是节流器模块,用来控制纯仿真流图的数据流量,以使平均数据速率不超过特定速率(即采样率,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模块
该模块是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模块
该模块是一个基本的信道模型仿真模块,可用于帮助评估,设计和测试各种信号,波形和算法。该模型允许用户设置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模块
该模块实现输入信号到映射表中数值的映射操作。该模块期望输入信号的最大值为 len(map)-1。output[i] = map[input[i]]。模块参数解释如下:
Map,将x映射到map[x]的整数向量。
(12)Binary Slicer模块
该模块生成1位输出的浮点值。正输入产生二进制1,负输入产生二进制0。在本流图中,用于将Constellation Soft Decoder模块的浮点输出转换为二进制1或0。
(13)Char to Float模块
该模块是用于将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模块