本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!
本文介绍GNU Radio源码的gr-channels相关实例及模块。
目录
10、QT GUI Constellation Sink模块
一、channel_tone_response
GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/channel_tone_response.grc》。该流图的功能是实现信道作用的基本模拟,支持对信道噪声功率、采样频率相对偏移、最大多普勒频率偏移、信道的频率偏移等信道作用的仿真。
1、Signal Source模块
该模块是信号源模块,用于生成常数、正弦波、余弦波、方波、三角波和锯齿波的信号,支持complex、float、int、short和byte类型输出类型。
模块参数解释如下:
Sample Rate,采样率。
Waveform,可选项包括[Constant常数,Sine正弦波,Cosine余弦波,Square方波,Triangle三角波,Saw Tooth锯齿波]。
对于带有变量的选项,应使用以下取值:常数=100,正弦=101,余弦=102,方波=103,三角形=104,锯齿=105。
Frequency,信号的频率。
Amplitude:输出幅度(默认值为1)。
Offset:从零开始偏移(默认值为0)。
Initial Phase:默认值为0(弧度)。
2、Throttle模块
该模块是节流器模块,用来控制纯仿真流图的数据流量,以使平均数据速率不超过特定速率(即采样率,samples per second, sps)。当我们的流图中不使用任何SDR设备、电脑的扬声器或麦克风的时候,进行纯仿真的时候,我们才需要使用该模块。该模块并不是用来规定采样率的,而是用来限定纯仿真流图的平均数据速率,避免仿真流图消耗电脑过多资源。节流模块通常直接作为非硬件源模块(例如信号源模块)的输出模块,以限制信号源模块的数据速率。
模块参数解释如下:
Sample rate,平均采样率的最大既定取值。
Ignore rx_rate tag,如果设置为False,则该块将使用rx_rate的值将其采样率设置为已接收标签的值,并忽略其他标签取值。
3、Fading Model模块
该模块是一个基本的衰落模型仿真模块,可用于帮助评估、设计和测试各种信号,波形和算法。模块参数解释如下:
Num Sinusoids (SoS model),用于模拟通道的正弦信号通道数量,数值8是一个不错的选择。
Normalized Max Doppler (fD*Ts),归一化最大多普勒频率fD * Ts。
LOS Model,在Rayleigh(NLOS)和Rician(LOS)模型之间选择“视距”路径。
Rician factor (K),Rician因子K,定义为占主导分量的信号功率与(局部均值)散射功率的比值
Seed,噪声发生器的种子。
4、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,则标记为无法通过此块传播。
5、QT GUI Frequency Sink模块
该模块是基于QT GUI的信号频域显示模块,它采用一组浮点数据流来绘制信号的功率谱密度PSD。每个信号都以不同的颜色绘制,并且可更改给定输入信号的标签和颜色。该模块支持绘制流浮点数据或消息。消息端口被命名为“in”,这两种模式不能同时使用,在使用消息模式时应将其设置为0。GRC通过提供可删除流端口的“float Message”类型来解决此问题。模块参数解释如下:
fftsize,FFT大小值。如果使用PDU消息端口绘制样本,则每个PDU的长度必须是FFT大小的倍数。
wintype:要应用的窗口类型,支持Blackman-harris、Hamming、Hann、Blackman、Rectangular、Kaiser、Flat-top类型,具体可参见GNU Radio的官方GNU Radio manual and C++ API Reference gr::fft::window::win_type。
https://www.gnuradio.org/doc/doxygen/classgr_1_1fft_1_1window.html
Center Frequency:信号中心频率(仅用于x轴标签)
Bandwidth:信号带宽(用于x轴标签)。
Name:QT GUI Frequency界面的标题。
GUI Hint:界面中图形的位置坐标。
6、QT GUI Waterfall Sink模块
QT GUI Waterfall Sink - GNU Radio
该模块是用来显示信号瀑布图(频谱图)的,在界面上显示多个信号的图形接收。
请注意,与其他qtgui接收器不同,该接收器不支持多个输入流。我们还没有找到在这种绘图上显示多个独立信号的好方法。要在此处显示多个信号,最好将信号叠加在一起再连接该模块。大多数参数与QT GUI频率接收器相同。图形中的颜色表示不同的信号强度。
7、QT GUI Range模块
该模块用于实现界面中的变量调节功能。该模块的ID参数是一个变量名,其他可视化模块可以调用这个变量名,以此来实现在界面中对该变量的可变调节。
模块参数解释如下:
ID,该模块的ID号,在当前流图中唯一的ID号。
Label,该模块的标签名称,如果Label栏空着什么也不填写,那么在界面中的变量名称就与ID一致。
Type,取值类型,支持float和int。
Default Value,默认值。
Start,起始值(最小值)。
Stop,终止值(最大值)。
Step,步长值。
Widget,变量变化形式,支持数值和滑动、仅数值、仅滑动和旋钮四种形式。
Minimum Length,最小长度。
GUI Hint,图形的位置参数。
二、demo_gmsk
GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/demo_gmsk.grc》。该流图的功能是以GMSK调制解调为例,分析信道相位噪声,IQ幅度不平衡,二阶失真,三阶失真,IQ偏移和频偏等参数对信号传输的影响。
1、Random Source模块
该模块是随机信号源模块,可生成满足[min,max)区间的随机数样本。非常适合为调制器创建信息字节。例如:当min=0和max=2时,将生成序列01110101...。支持int,short和byte类型的输出。模块参数解释如下:
Minimum,随机样本的最小值。
Maximum,随机样本的最大值。
Num Samples,随机样本个数。
Repeat,设置随机样本是否重复生成。
2、GMSK Mod模块
该模块是GMSK调制模块,输入是无符号带填充的字节流(unsigned char with packed bits),输出是基带复数已调信号。模块参数解释如下:
Samples/Symbol,每个波特的采样值,大于等于2。
BT:等于高斯滤波器带宽*符号时间。
Verbose:是否打印Samples/Symbol和BT的信息。
Log:是否打印调制数据到文件。
3、HW impairments模块
该模块用来仿真信道失真对信号传输的影响效果,支持信道相位噪声,IQ不平衡,二阶失真,三阶失真,IQ偏移和频偏等参数模拟。模块参数解释如下:
Phase Noise Mag,用于设定相位噪声发生器的幅度。(Alpha设置为0.01)
IQ Mag. Imbalance,IQ不平衡生成器的幅度参数。
IQ Phase. Imbalance,IQ不平衡发生器的相位参数。(模式设置为接收器)
Quadrature Offset,添加到Q通道的偏移值。
Inphase Offset:添加到I通道的偏移值。
Frequency Offset:频率偏移。用于频率偏移的信号源设置为每秒1个采样。
Second Order Distortion:赋予二阶失真的参数。
Third Order Distortion:赋予三阶失真的参数。
4、Quadrature Demod模块
该模块可用于解调FM,FSK,GMSK等。其输入是基带复数信号,输出是与采样率相关的信号频率乘以增益的值。从数学上讲,此块计算一个采样的延迟和共轭输入与未延迟的信号的乘积,然后计算所得复数的自变量(以弧度表示的角)。模块参数解释如下:
Gain,用来调整该模块输出幅度的增益值。将样本之间的相位差转换为标称输出值。
5、QT GUI Constellation Sink模块
QT GUI Constellation Sink - GNU Radio
该模块用于显示多个信号的IQ星座图。该模块支持绘制流式复杂数据或消息,消息端口被命名为“in”。这两种模式不能同时使用,在使用消息模式时应将其设置为0。GRC通过提供“Complex Message”类型来删除此流端口来解决此问题。
6、QT GUI Time Sink模块
该模块用于显示多个信号的时域图形。这是一个基于QT的图形接收器,用于获取浮点数据流并将其绘制在时域中。每个信号都以不同的颜色绘制,并且更改给定输入信号的标签和颜色。接收器支持绘制流浮点数据或消息。消息端口被命名为“in”。这两种模式不能同时使用,在使用消息模式时应将其设置为0。GRC通过提供可删除流端口的“float Message”类型来解决此问题。
三、demo_ofdm
GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/demo_ofdm.grc》。该流图的功能是以OFDM调制解调为例,分析信道相位噪声,IQ幅度不平衡,二阶失真,三阶失真,IQ偏移和频偏等参数对信号传输的影响。
1、Random Source模块
该模块是随机信号源模块,可生成满足[min,max)区间的随机数样本。非常适合为调制器创建信息字节。例如:当min=0和max=2时,将生成序列01110101...。支持int,short和byte类型的输出。模块参数解释如下:
Minimum,随机样本的最小值。
Maximum,随机样本的最大值。
Num Samples,随机样本个数。
Repeat,设置随机样本是否重复生成。
2、Int To Float模块
该模块使用可选的比例因子将整数型数据流转换成浮点型数据流。
3、Float To Complex模块
该模块实现将浮点型数据流转换成复数型数据流。
4、Stream to Vector模块
该模块将一个数据流转换为包含Num个item的向量流,即可以理解成是串并转换。输入数据流本身可以是向量。模块参数解释如下:
Num items,要连接成一个输出向量的连续输入项的数量。
Vec Length,输入向量的长度。 输出向量的长度等于Vec Length * Num items。
5、Add Const
该模块将所有输入数据加上一个常数,即输入输出关系式为output[m] = input[m] + constant vector。
6、FFT模块
该模块采用浮点或复数值的向量计算傅里叶变换。如果您只想查看信号的频域,则可以使用QT GUI Frequency Sink模块。请注意,即使FFT模块的输入信号是实信号,该模块的输出也是复数。因此如果要查看输出信号的幅度,则必须使用“Complex to Mag”或类似的模块。模块参数解释如下:
FFT Size,傅里叶变换的采样点数,一般是2的N次方,例如如果采样点数是1024,则N为10。FFT Size参数决定了FFT模块的输出数据有多少个采样点。
Forward/Reverse,表示FFT或IFFT,Forward表示FFT,Reverse表示IFFT。
Window,在进行FFT之前应用于每组样本的窗口类型,默认为blackmanharris窗口。 window.blackmanharris()函数的参数是窗口中与FFT大小匹配的点数。如果提供了一个空窗口“[]”,则不执行任何窗口运算。
Shift,该参数表示是否执行将直流(0 Hz)置于中心的“fft移位”。如果不确定该参数表示什么,请将其设置为“是”。且该参数仅在输入类型为Complex类型时才激活。
Num Threads,分配给用于执行FFT操作的线程数。
7、Vector to Stream模块
该模块将向量流转换为items流,即将N*M个items的向量流转换为M个items的向量的N倍的数据流,即可以理解成是并串转换。模块参数解释如下:
Num items,每个输入向量的items数除以Vec length。(N)
Vec length,输出向量的长度。(M)
8、HW impairments模块
该模块用来仿真信道失真对信号传输的影响效果,支持信道相位噪声,IQ不平衡,二阶失真,三阶失真,IQ偏移和频偏等参数模拟。模块参数解释如下:
Phase Noise Mag,用于设定相位噪声发生器的幅度。(Alpha设置为0.01)
IQ Mag. Imbalance,IQ不平衡生成器的幅度参数。
IQ Phase. Imbalance,IQ不平衡发生器的相位参数。(模式设置为接收器)
Quadrature Offset,添加到Q通道的偏移值。
Inphase Offset:添加到I通道的偏移值。
Frequency Offset:频率偏移。用于频率偏移的信号源设置为每秒1个采样。
Second Order Distortion:赋予二阶失真的参数。
Third Order Distortion:赋予三阶失真的参数。
9、QT GUI Time Sink模块
该模块用于显示多个信号的时域图形。这是一个基于QT的图形接收器,用于获取浮点数据流并将其绘制在时域中。每个信号都以不同的颜色绘制,并且更改给定输入信号的标签和颜色。接收器支持绘制流浮点数据或消息。消息端口被命名为“in”。这两种模式不能同时使用,在使用消息模式时应将其设置为0。GRC通过提供可删除流端口的“float Message”类型来解决此问题。
10、QT GUI Constellation Sink模块
QT GUI Constellation Sink - GNU Radio
该模块用于显示多个信号的IQ星座图。该模块支持绘制流式复杂数据或消息,消息端口被命名为“in”。这两种模式不能同时使用,在使用消息模式时应将其设置为0。GRC通过提供“Complex Message”类型来删除此流端口来解决此问题。
四、demo_quantization
GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/demo_quantization.grc》。该流图的功能是通过量化操作分析噪声对有用信号的影响作用。
demo_quantization.grc运行图1(量化比特16)
demo_quantization.grc运行图2(量化比特10)
1、Band Pass Filter模块
该模块是实现带通滤波功能。该模块也可以通过Decimating FIR Filter模块调用firdes.band_pass()或者firdes.complex_band_pass()函数来实现带通滤波的效果。模块参数解释如下:
FIR Type,用于确定该滤波器输入/输出数据类型,支持real实数和复数Complex两种,并且滤波器的抽头也必须是实数或复数。
Decimation,滤波器的抽取值,必须是整数,而且在程序运行期间不能动态变化。
Gain,带通滤波器的增益值。
Sample Rate,滤波器模块的采样值。
Low Cutoff Freq,滤波器的下限截止频率。
High Cutoff Freq,滤波器的上限截止频率。
Transition Width,滤波器的过渡带宽度。
Window,滤波器的窗函数,支持Hamming海明窗、Hann汉宁窗、Blackman布莱克曼窗、Rectangular矩形窗、Kaiser恺撒窗。
Beta,仅仅适用于Kaiser恺撒窗的系数。
2、Quantizer模块
该模块实现信号量化功能,但是会引入量化误差。模块参数解释如下:
Bits,量化比特取值。
3、QT GUI Histogram Sink模块
QT GUI Histogram Sink - GNU Radio
该模块是一个基于QT的图形可视化模块,用于显示数据的直方图(或称为柱状图)。此直方图支持在运行过程中动态设置和更改绘制的点数以及直方图中的“bin”的数量。
关于直方图中bin的含义,则可用关键字“颜色直方图bin”来查看相关解释。该模块可视化界面的x轴和y轴都支持自动缩放功能。y轴的自动缩放功能是默认打开的,并可根据当前绘制的直方图不断更新y轴的最大值。x轴自动缩放功能仅在单击时更新。这会将x轴重置为直方图中表示的最小值和最大值的当前范围。因为直方图的“bin”的位置和宽度已更改,所以x轴会重置当前显示的数值。
QT GUI Histogram Sink模块参数解释如下:
Type,模块输入数据类型,支持Float和Float Message两种类型。
Name,可视化界面上标题,默认可以不填写。
Number of Points,每次绘制的点数。
Number of Bins,将数据排序到的“bin”数量。
Grid,可视化图形是否绘制网格,Yes表示绘制网格,No表示不绘制网格。
Autoscale,是否自动缩放,Yes表示自动缩放,No表示不自动缩放。
Accumulate,累加数据选项。当累加数据选项为Yes时,由于y轴自动缩放功能是默认打开的,所以y轴会随着数据的累加迅速放大。
Min x-axis,x轴的最小值。
Max x-axis,x轴的最大值。
Number of Inputs,输入到该模块的数据数量。
Update Period,图形界面更新周期。
GUI Hint,模块坐标定位及大小参数设置。
五、demo_spec_an
GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/demo_spec_an.grc》。该流图的功能是通过查看频域和时域的信号来分析噪声、频率偏移对信噪比、时域频域信号波形的影响作用。
1、RMS模块
该模块输出RMS平均功率,关于RMS平均功率取值可以参见下图。
peak, Average and RMS values
(参考自https://www.electronics-lab.com/article/average-rms-voltage/)
模块参数解释如下:
Input Type,输入数据类型,支持complex和float类型。
Alpha,平均滤波器增益。
2、Divide模块
该模块实现输入数据的相除操作,例如输入数据input为input[0]和input[1],则输出数据output为input[0]/ input[1]。以此类推,如果输入数据为M个,则output=input[0]/input[1]/.../input[M-1]。模块参数解释如下:
IO Type,数据类型支持complex、float、int和short。
Vec Length,向量长度,一般取值为1。
Num Inputs,数据数据个数。
3、Log10模块
该模块的输出值output和input满足关系式:output = n*log10(input) + k。该模块仅支持处理float类型输入和输出数据。该模块通过为每个样本使用float32数字的样本之间的最大值和最小正值来处理空样本和负样本。
模块参数解释如下:
N,标量乘法常数。
vlen,输入向量长度。
K,标量加法常数。
六、demo_two_tone
GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/demo_two_tone.grc》。该流图的功能是将两个单音信号与一个噪声信号相加后,分析信道相位噪声,IQ幅度不平衡,二阶失真,三阶失真,IQ偏移和频偏等参数对信号传输的影响。
1、Amplitude Balance模块
该模块用于纠正IQ幅度不平衡作用。模块参数解释如下:
Alpha,平均滤波器增益。
2、Noise Source模块
该模块是噪声源模块,是通过使用高斯或均匀分布来生成“噪声”信号,支持complex、float、int或short类型的数据输出。
模块参数解释如下:
Noise Type,随机分布类型,支持高斯分布、均匀分布、拉普拉斯分布和冲激分布。
Amplitude,噪声信号振幅,表示一维噪声的标准差,如果噪声源是复数噪声源,则该参数需分配为实部和虚部。
Seed,随机噪声生成器的种子,对于均匀分布和高斯分布,该种子取值应该是一个负数。