走进“开源SDR实验室” 一起玩转GNU Radio:gr-digital

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

温馨提示:“开源SDR实验室”是北京的。

本文介绍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模块

QT GUI Time Sink - GNU Radio

该模块用于显示多个信号的时域图形。这是一个基于QT的图形接收器,用于获取浮点数据流并将其绘制在时域中。每个信号都以不同的颜色绘制,并且更改给定输入信号的标签和颜色。接收器支持绘制流浮点数据或消息。消息端口被命名为“in”。这两种模式不能同时使用,在使用消息模式时应将其设置为0。GRC通过提供可删除流端口的“float Message”类型来解决此问题。

(15)Delay模块

Delay - GNU Radio

该模块将输入数据输出为延迟一定数量的样本。模块参数解释如下:

Type,模块输入输出数据类型,支持complex、float、int、short和byte类型。

Delay,需要延迟的数量。

Num Ports,模块端口数量。

Vec Length,向量长度。

(16)QT GUI Range模块

QT GUI Range - GNU Radio

该模块用于实现界面中的变量调节功能。该模块的ID参数是一个变量名,其他可视化模块可以调用这个变量名,以此来实现在界面中对该变量的可变调节。

模块参数解释如下:

ID,该模块的ID号,在当前流图中唯一的ID号。

Label,该模块的标签名称,如果Label栏空着什么也不填写,那么在界面中的变量名称就与ID一致。

2、digital_freq_lock

GRC文件为《gnuradio-3.9.1.0/gr-digital/examples/demod/digital_freq_lock.grc》。该流图的功能是实现数字频率锁定。

(1) Random Source模块

Random Source - GNU Radio

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

Minimum,随机样本的最小值。

Maximum,随机样本的最大值。

Num Samples,随机样本个数。

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

(2)PSK Mod模块

https://wiki.gnuradio.org/index.php/PSK_Mod

该模块实现PSK调制功能,例如BPSK、QPSK、8PSK等。模块参数解释如下:

Number of Constellation Points,星座图的点数,例如BPSK为2,QPSK为4。

Gray Code:是否使用格雷码选项,Yes表示使用格雷码编码,No表示不使用格雷码编码。

Differential Encoding:是否使用差分编码选项。

Samples/Symbol:每个符号采样值。

Excess BW:根升余弦滤波器带外带宽。

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

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

(3)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,则标记为无法通过此块传播。

(4)FLL Band-Edge模块

FLL Band-Edge - GNU Radio

使用边带滤波器的锁频环。锁频环中的边带滤波器覆盖数字调制信号的上限和下限带宽。带宽范围由调制信号的带外带宽[excess bandwidth](例如滚降因子)决定。边带频率由过采样率(每个符号的样本数)和带外带宽决定。滤波器的大小应该足够大,以便对多个符号进行平均。模块参数解释如下:

Type,模块输入输出数据类型,只支持Complex->Complex。

Samples per symbol,每个符号采样值。

Filter Rolloff Factor:滤波器滚降因子。

Prototype Filter Size:要生成的滤波器抽头数。

Loop Bandwidth:环路带宽。

3、pam_sync

GRC文件为《gnuradio-3.9.1.0/gr-digital/examples/demod/pam_sync.grc》。该流图的功能是实现数字频率锁定。

 (1)Chunks to Symbols模块

Chunks to Symbols - GNU Radio

该模块将一个未封装的符号索引数据流转换成D维空间中的实数或复数星座点数据。模块参数解释如下:

Symbol Table,将未封装符号索引数据流映射到符号的列表。

Dimension,符号列表的维度。例如Dimension取值为1,则符号列表就是一个向量,Dimension取值为2,则符号列表就是一个矩阵。

Num Ports:要处理的输入和输出流的数量,每个数据流独立处理。

(2)Polyphase Arbitrary Resampler模块

Polyphase Arbitrary Resampler - GNU Radio

该模块是多相任意重采样模块。该模块对接收到的信号流执行任意倍数重采样。重采样率可以是任何实数r。模块的参数解释如下:

Resampling Rate,重采样率取值。

Taps,(向量/浮点数列表)用于填充过滤器组的原型过滤器。抽头应以filter_size采样率生成。

Number of Filters:滤波器组中的滤波器数量。滤波器数量与重采样期间引入的量化噪声直接相关。

Stop-band Attenuation:阻带衰减值。

Sample Delay:采样延迟。

(3)Costas Loop模块

Costas Loop - GNU Radio

该模块是科斯塔斯环模块,用于载波恢复操作,非常适合用于BPSK、QPSK和8PSK已调信号的载波恢复。科斯塔斯环锁定一个信号的中心频率并将其向下变频到基带。模块的参数解释如下:

Loop Bandwidth,科斯塔斯环的带宽。

Order,科斯塔斯环的阶数,可以是2、4或8。当Order=2时,科斯塔斯环可以用于BPSK,当Order=4时,科斯塔斯环可以用于QPSK,当Order=8时,科斯塔斯环可以用于8PSK。

Use SNR,是否进行SNR计算的选项。

4、pam_timing

GRC文件为《gnuradio-3.9.1.0/gr-digital/examples/demod/pam_timing.grc》。该流图的功能是实现数字频率锁定。

5、symbol_sync_test_complex

 GRC文件为《gnuradio-3.9.1.0/gr-digital/examples/demod/ symbol_sync_test_complex.grc》。该流图的功能是实现复数符号同步测试仿真。

 (1)Vector source模块

Vector Source - GNU Radio

该模块基于输入的向量,生成一个向量数据(流)。默认情况下,该模块只会输出一次。但是当把该模块参数Repeat设置为“Yes”时,则输出的向量数据会重复输出。模块的参数解释如下:

Output Type,模块输出数据类型,支持complex、float、int、short、byte。

Vector,该模块将要生成的向量,在中括号中填写向量中的数值,数值之间以英文输入法状态下的逗号隔开。

Tags,在Python中,我们可以使用列表结构[int offset, pmt key, pmt value, pmt srcid]将标签创建为Python列表(或元组)。也可以用列表相同的数据类型键"offset","key","value"和"srcid"来表示python字典。当给定一个标记列表时,向量源将通过更新相对于向量流长度的偏移量来重复做出标记。也就是说,如果向量有500个元素,而标签的偏移量为0,则该标签将被放置在第0个、500个、1000个、1500个等元素上。

Repeat,模块是否重复输出。

Vec Length,向量长度,一般取值为1。

(2)Multiply by Matrix模块

Multiply by Matrix - GNU Radio

该模块用于实现矩阵多路复用/乘法。即输出y(k)=Ax(k),其中A是一个n*m的矩阵,x(k)是m维列向量。该模块类似于“Multiply Const”模块,不同之处在于它可以处理多个输入和输出,输入到输出的关系可以用下面的数学方程来描述:y(k)=Ax(k),y是n维列向量,x是m维列向量、A是n*m维矩。模块参数解释如下:

IO Type,模块输入输出数据类型,支持float和complex类型。

Matrix A,计算公式中的矩阵A。在本流图中,Matrix A与ID为data_src的QT GUI Chooser模块配合使用。

TPP,Tag Propagation Policy的缩写,标签传播策略。将标签传播策略设置为矩阵定义时,如果 A(l,k) != 0,则标签从输入 k 传播到输出l。

(3)Bit->Symbol Map模块

该模块为嵌入式python模块,代码如下:

"""
Embedded Python Blocks:
Each time this file is saved, GRC will instantiate the first class it finds
to get ports and parameters of your block. The arguments to __init__  will
be the parameters. All of them are required to have default values!
"""
import numpy as np
from gnuradio import gr

class ConstMap(gr.sync_block):
    """
    Map 0, 1 to -1, 1
    """
    def __init__(self):
        gr.sync_block.__init__(
            self,
            name='Bit -> Symbol Map',  #定义模块名称
            in_sig=[np.float32],   #定义一个数据类型为float32的输入端口,
            out_sig=[np.float32]  #定义一个数据类型为float32的输出端口
        )

    def work(self, input_items, output_items):
        """
        map
        """
        sym_map = {0.0: -1.0, 1.0: 1.0, 2.0: 0.0}  #定义sym_map数组
        output_items[0][:] = [sym_map[x] for x in input_items[0]]  #定义输出与输入的数学关系
        return len(output_items[0])

(4)Repeat模块

Repeat - GNU Radio

该模块将输入数据根据设定的内插值来进行重复操作。模块参数解释如下:

Type,模块输入输出数据类型,支持complex、float、int、short、byte类型。

Interpolation,内插值,即内插因子。

Vec Length,向量长度,一般取值为1。

 如图所示,原始信号的频率是1kHz,周期为1ms,经过Repeat模块以5倍内插后,周期变为了5ms。相应的,在频域,原始信号的带宽是1KHz,但是经过Repeat的内插作用后,信号的带宽变成了0.2KHz,也就是说信号经过内插作用后,信号带宽变窄了,信号时域变宽了。

(5)Rational Resampler模块

Rational Resampler - GNU Radio

该模块是以有理数倍进行重采样的模块,可以通过设定其参数Taps或Fractional BW来设定该模块,但是不能同时设定上述两个参数。如果用户不设定参数的话,默认情况下Fractional BW为0.4。模块参数解释如下:

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

Interpolation,内插因子(为整数且大于0)。

Decimation,抽取因子(为整数且大于0)。

Taps,滤波器抽头系数。

Fractional BW,分数带宽,默认值为0.4。

(6)Decimating FIR Filter模块

Decimating FIR Filter - GNU Radio

该模块是抽取型有限长单位冲激响应滤波器。模块参数解释如下:

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

Decimation,抽取率。该模块根据此数值来对输入数据进行抽取操作。抽取率为1时表示不进行抽取。如果抽取设置为高于1,则需要确保滤波器可以移除“输出区域”之外的带外能量,即-Fs/2到Fs/2,其中Fs是输入数据的采样率除以该模块的抽取率。

Taps,在FIR滤波器中使用的抽头。

Sample Delay,采样延迟,默认为0表示无延迟。

(7)Symbol Sync模块

Symbol Sync - GNU Radio

该模块可用于实现符号同步功能,通常应用于数字信号的接收/解码过程中。该模块是对时钟恢复和多相时钟同步模块的改进版本。模块参数解释如下:

I/O Type,模块输入输出数据类型,支持Complex和Float类型。

Timing Error Detector (TED),要使用的定时错误检测器的枚举类型。支持Mueller and Mueller、Modified Mueller and Mueller、Zero Crossing、Gardner、Early-Late、D’Andrea andMengali Gen MSK、Mengali and D’Andrea GMSK、y[n]y’[n]Maximum Likelyhood、Sgn(y[n])y’[n] Maximum Likehood。

TED Slicer Constellation,定时错误探测器作决策时的依据。

Samples per Symbol,每个符号的采样值。

Expected TED Gain,在给定TED和预期输入幅度、脉冲形状和信噪比Es/No时,该参数给出定时误差检测器的预期增益。当时序偏移tau=0时,则该参数是TED S-curve曲线的斜率。该值通常由用户通过分析或在GNURadio之外的工具中模拟计算得出。根据输入环路带宽和阻尼因子,计算得到环路滤波器的增益。

Loop BW,符号时钟跟踪环路的近似归一化环路带宽。它名义上应该接近0且大于0。如果不确定,请从2*pi*0.04 左右的数字开始,并尝试找到最适合的值。

Damping Factor,符号时钟跟踪环路的阻尼因子。Damping Factor<1.0是一个欠阻尼环路。Damping Factor=1.0/sqrt(2.0)是最大平坦的环路响应。Damping Factor=1.0是一个临界阻尼回路。Damping Factor>1.0是过阻尼回路。从临界阻尼或过阻尼开始。欠阻尼环路通常不适合时序恢复。

Max Deviation,以每个符号的采样值为单位,从用户指定的标称时钟周期中得到的平均时钟周期的最大绝对偏差。该参数取值越小越好,这样有利于在突发通信的开头就能实现锁定。当符号时钟远离标称值时,该参数取值太小则会导致丢失数据。

Output Samples/Symbol:每个符号的输出样本数(默认值为1)。通常取值为1,如果该模块的输入数据来自均衡器模块,则该参数取值可以设定为2。

Interpolation Resampler,内插重采样滤波器类型,支持①MMSE,8 tap FIR;②Polyphase Filterbank,MMSE;③Polyphase Filterbank,MF。

6、symbol_sync_test_float

GRC文件为《gnuradio-3.9.1.0/gr-digital/examples/demod/symbol_sync_test_float.grc》。该流图的功能是实现浮点型符号同步测试仿真。除了最后几个模块的数据类型为浮点型之外,用到的模块与《symbol_sync_test_complex.grc》一样,这里不在赘述。

7、test_corr_est

GRC文件为《gnuradio-3.9.1.0/gr-digital/examples/demod/test_corr_est.grc》。该流图的功能是实现相关估计仿真测试。

 (1)Stream Mux模块

Stream Mux - GNU Radio

该模块是数据流复用模块,可以将多个数据流整合复用成一个具有指定格式的数据流。将N个数据流混合在一起产生一个输出流,其中包含来自第一个流的N0个元素,来自第二个数据流的N1个元素,以此类推,[N0, N1, N2, ..., Nm, N0, N1, ...],并可以将整合后的数据流重复输出。模块参数解释如下:

Type,支持complex、float、int、short、byte数据类型。

Lengths,该参数是一个向量Vector(具体为列表或元组),用于指定由Stream Mux模块进行数据流整合的items数量。注意,这要求每个数据流至少有Vector所指定的足够多items可用,否则系统将一直等待足够多的items输入。

Num inputs,输入数据流的个数。

Vec Length,向量长度,一般取值为1。

(2)Correlation Estimation模块

Correlation Estimator - GNU Radio

该模块将输入信号与提供的样本向量做相关运算,并输出相位和符号时序估计结果。模块参数解释如下:

Symbols,设置与输入信号进行相关操作的一组符号(例如:同步码)。

Samples per Symbol,每符号采样率sps。

Tag Marking Delay,用于标记样本中相关操作起始位的延迟标签。

Threshold,相关操作的阈值,如果是100%相关,则该阈值应设置为1,一般默认值为0.9。

Threshold Method,计算阈值的方法。有绝对阈值和动态阈值两种计算方法。

二、ofdm

1、ofdm_loopback

GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/ofdm/ofdm_loopback.grc》。该流图的功能是实现OFDM调制和解调过程的纯仿真。

 (1)Stream to Tagged Stream模块

Stream to Tagged Stream - GNU Radio

该模块将常规数据流转换成标记数据流,即可以定时给数据流添加长度标签。该模块可以用于连接一个常规数据流模块和一个gr::tagged_stream_block模块,即该模块后边紧跟的模块是一个做了长度标记的数据流模块。如果此模块与其他做了长度标记的数据流模块之间存在其他模块,请确保这些模块不要修改采样速率或标记值,以此来确保长度标记值能表示实际的数据包长度。模块参数解释如下。

Type,模块输入输出数据类型,支持complex、float、int、short、byte类型。

Vector length,向量长度,一般取值为1。

Packet Length,每个标记流数据包的项目数。每个数据包长度项都写入一个标签并包含该数字。

Length Tag Key,数据包长度标签值。

(2)OFDM Transmitter模块

OFDM Transmitter - GNU Radio

该模块是OFDM调制模块,模块输入为一个无符号字节数据流,输出为复数基带已调信号。模块参数解释如下。

FFT Length,FFT长度(需要是整数)。

Cyclic Prefix Length,OFDM循环前缀CP(Cyclic Prefix)长度(需要是整数)。

Packet Length Tag Key,数据包长度的标签值。

Occupied Carriers,一个用来描述OFDM载波占用的向量。

Pilot Carriers,一个用来描述导频符号占用哪些OFDM载波的向量。

Pilot Symbols,导频符号。

Sync Word 1,第一个同步前导码。在交替载波情况下,该参数必须为零。该参数用于精确或粗略的频率偏移和时序估计。

Sync Word 2,第二个同步前导码。在用于粗略的频率偏移和信道估计时,该参数需要填写完整。

Header Modulation,数据包头调制方式,支持BPSK、QPSK。

Payload Modulation,有效载荷调制方式,支持BPSK、QPSK和8-PSK。

Rolloff length(samples),OFDM信号的滚降长度(即采样值数量),该参数取值必须小于循环前缀长度。

Scramble Bits,扰码选项,Yes表示开启扰码,No表示不开启扰码。

Log Debug Info,输出日志到文件选项,Yes表示开启此功能,No表示不开启此功能。注意,如果选择开启输出日志到文件选项,则会输出大量的数据到文件中。

(3)OFDM Receiver模块

OFDM Receiver - GNU Radio

该模块是OFDM解调模块,模块输入为一个复数基带信号(例如从一个UHD Source、osmocom Source或LimeSDR Source模块的输出信号),模块输出是检测到的数据包。模块参数解释如下。

FFT Length,FFT长度(需要是整数)。

Cyclic Prefix Length,OFDM循环前缀CP(Cyclic Prefix)长度(需要是整数)。

Packet Length Tag Key,数据包长度的标签值。

Occupied Carriers,一个用来描述OFDM载波占用的向量。

Pilot Carriers,一个用来描述导频符号占用哪些OFDM载波的向量。

Pilot Symbols,导频符号。

Sync Word 1,第一个同步前导码。在交替载波情况下,该参数必须为零。该参数用于精确或粗略的频率偏移和时序估计。

Sync Word 2,第二个同步前导码。在用于粗略的频率偏移和信道估计时,该参数需要填写完整。

Header Modulation,数据包头调制方式,支持BPSK、QPSK。

Payload Modulation,有效载荷调制方式,支持BPSK、QPSK和8-PSK。

Rolloff length(samples),OFDM信号的滚降长度(即采样值数量),该参数取值必须小于循环前缀长度。

Scramble Bits,扰码选项,Yes表示开启扰码,No表示不开启扰码。

Log Debug Info,输出日志到文件选项,Yes表示开启此功能,No表示不开启此功能。注意,如果选择开启输出日志到文件选项,则会输出大量的数据到文件中。

2、tx_ofdm

GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/ofdm/tx_ofdm.grc》。该流图的功能是实现OFDM调制过程的仿真。

 (1)Stream CRC32模块

Stream CRC32 - GNU Radio

该模块实现给字节数据流填充一个CRC32校验码。该模块输入为数据包的字节流。数据包的第一个字节为标识数据包长度的标签,输出为数据包+CRC32校验码,并且数据包标签的数据包长度更新为加上校验码之后的长度。模块参数解释如下。

Mode,模块模式选择,支持生成CRC(Generate CRC)和验证CRC(Check CRC)两种模式。

Length tag name,数据包长度标签的变量名字。

Packed,数据包是否Packed?

(2)Protocol Formatter模块

Protocol Formatter - GNU Radio

该模块使用一个数据包头格式化对象来为一个带有长度标签的数据包生成一个包头,通常用于MAC层级的信号处理操作过程中。每一个输入到该模块的带有长度标签的数据包都被认为是1帧,因此任何数据包分割操作需要在该模块之前完成。该模块生成一个数据包的包头之后,和另一个有效载荷数据作为合并模块(例如Tagged Stream Mux模块)的输入数据,经过合并操作后生成一个包含数据包头和有效载荷的数据包。Protocol Formatter模块参数解释如下。

Format Obj.,数据包头格式化对象。此模块使用从header_format_base类派生的格式对象。

Length Tag Name,带有长度标签数据流的长度变量名字。

(3)Repack Bits模块

Repack Bits - GNU Radio

该模块按照小端模式LSB(least significant bit)实现数据包的重组操作。模块参数解释如下。

Bits per input byte,输入数据流与重组操作相关的比特位数。

Bits per output byte,输出数据流与重组操作相关的比特位数。

Length Tag Key,带有长度标签数据流的长度变量名字。

(4)Virtual Sink模块

Virtual Sink - GNU Radio

该模块与Virtual Source模块配对使用,用于一些使用的模块较多的流图中,可以使得这些复杂的流图看起来更整洁、明了。模块参数解释如下。

Stream ID,该参数用于指定Virtual Source模块读取数据的数据流ID。

(5)Virtual Source模块

Virtual Source - GNU Radio

该模块与Virtual Sink模块配对使用。模块参数解释如下。

Stream ID,该参数用于指定Virtual Source模块读取数据的数据流ID,该数据流ID应该与此Virtual Source模块配对使用的Virtual Sink模块的Stream ID一致。

(6)OFDM Carrier Allocator模块

OFDM Carrier Allocator - GNU Radio

该模块功能是实现OFDM子载波分配,用于将复数、标量调制信号转换为可以用于OFDM transmitter(OFDM调制模块)输入的向量。该模块支持将导频符号加载于载波信号。载波可以被自由分配,如果某个子载波没有被分配,则该子载波需要设置为0。该模块也支持OFDMA载波分配。模块参数解释如下。

FFT length,FFT长度取值,也就是OFDM符号的最大宽度。

Occupied Carriers,OFDM Carrier Allocator模块输出向量的索引值,该索引值也是以向量的形式表示。例如,假设1个OFDM符号有3个子载波,如果occupied_carriers = ((1, 2, 3), (1, 2, 4)),则第一个OFDM符号的三个调制数据符号将映射到载波1、2和3。之后,第二个OFDM符号的三个调制数据符号将被放置在载波1、2和4上。注意,第一个调制数据符号总是映射到occupied_carriers[0][0]。

Pilot Carriers,导频符号的位置。与occupied_carriers相同,但导频符号是取自pilot_symbols变量。

Pilot Symbols,导频符号,导频符号[0][0]放置在第一个OFDM符号中,且分配在子载波的pilot_carriers[0][0]上。

Sync Words,预置到OFDM帧的OFDM同步码(通常用于同步目的,例如每隔一个子载波空闲的OFDM符号,OFDM符号长度为FFT length。

Length tag key:用于标识输入数据包长度。

Shift Output:是否采用“fftshift”来输出OFDM符号。

(7)OFDM Cyclic Prefixer模块

OFDM Cyclic Prefixer - GNU Radio

该模块用于添加OFDM循环前缀,并对OFDM符号执行脉冲成型操作。模块参数解释如下。

FFT Length,FFT长度取值,也就是OFDM符号的最大宽度。

CP Length,循环前缀长度。

Rolloff,OFDM调制滚降因子。

Length Tag Key,用于标识输入数据包长度。

(8)Multiply Const模块

Multiply Const - GNU Radio

该模块将输入数据乘以一个标量或者常数向量,即output=input*constant。模块参数解释如下。

IO Type,模块输入输出数据类型,支持complex、float、int、short类型。

Constant,乘以的常数值。

Vec Length,向量长度,一般取值为1。

(9)Tag Gate模块

Tag Gate - GNU Radio

该模块用于控制标签是否传播。模块参数接下如下。

Item Type,数据类型,支持complex、float、int、short、byte类型。

Vec Length,向量长度,一般取值为1。

Propagate tags,Yes表示允许标签传播,则会在后续的界面中看到标签重复出现。No表示不允许标签传播。

Single key:要停止传播的标签标识ID。

3、rx_ofdm

GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/ofdm/rx_ofdm.grc》。该流图的功能是实现OFDM解调过程的仿真。

 (1)Schmidl & Cox OFDM synch模块

https://wiki.gnuradio.org/index.php/Schmidl_%26_Cox_OFDM_synch.

该模块实现了OFDM经典同步算法(Schmidl&Cox时频联合同步算法)。模块参数解释如下。

FFT Length,FFT长度。

Cyclic Prefix Length,循环前缀长度。

Preamble Carriers,用于设定前导码占用的子载波是奇数还是偶数。

Threshold,检测阈值,默认值为0.9。

(2)Frequency Mod模块

Frequency Mod - GNU Radio

该模块是频率调制模块,模块输出信号的瞬时相位与灵敏度和输入幅度成正比。

更具体地说,根据以下条件取一个实数基带信号 (x_m[n]) 并输出一个调频信号 (y[n]):

 其中x[n]是时间n的输入样本,是频率偏差。对于窄带FM频道(例如语音系统)和75KHz(例如音频广播FM电台),对于宽带FM的常见值为5kHz。在此块中,输入参数是,而不是频率偏差。灵敏度指定基于新输入样本的相位变化量。 给定最大偏差和采样率,灵敏度定义为:

模块参数解释如下。

Sensitivity,灵敏度参数,计算公式为radians/sample=amplitude*sensitivity。

(3)Header/Payload Demux模块

Header/Payload Demux - GNU Radio

该模块的典型应用场景是在不确定数据包长度的情况下,从突发传输(bursty transmission)中解析分离出数据包,并将数据包的包头部分交由其他模块进行解调。当解调完包头数据后,进而解调得到有效载荷内容。我们需要通过触发信号来识别数据包的包头。模块参数解释如下。

Header Length(Symbols),每个数据包的包头长度。

Header Padding(Uncertainty/Symbols),数据包的包头填充字段长度。

Items per symbol,每个符号的长度,即FFT长度。

Guard Interval(items),OFDM符号的保护间隔。

Length Tag Key,用于标识输入数据包长度。

Trigger Tag Key,用于标识触发信号位置的标识。

Output Format,输出格式,支持Items和Symbols两种类型。

IO Type,输入输出数据类型,支持complex、float、int、short和byte。

Timing tag key,带有时序信息的标签名称,通常为'rx_time'或为空(如果该字段为空,则意味着时序信息被丢弃)。

Sampling Rate,采样率。

Special Tag keys,该字段是一个字符串向量,表示应该作为保留字段的标签。

(4)OFDM Channel Estimation模块

OFDM Channel Estimation - GNU Radio

该模块基于接收到的前导码,实现OFDM信道估计和频率偏移的粗略估计。模块参数解释如下。

Synch. symbol 1,频域中的第一个同步符号,该符号长度必须等于FFT长度。

Synch. symbol 2,频域中的第二个同步符号,该符号长度必须等于FFT长度,如果只使用第一个同步符号,则该字段符号长度应为零。

Number of data symbols,每组同步符号之后的数据符号数。必须至少为 1。

Maximum carrier offset,限制频率偏移最大的子载波数量。如果该字段是0,则频率偏移最大的子载波数量可以是0至载波数之间的任何取值。

Force One Synchronisation Symbol,是否只用1个同步符号的选项。

(5)OFDM Frame Equalizer模块

OFDM Frame Equalizer - GNU Radio

该模块在标记的OFDM帧上执行一维或二维均衡。模块输入为做了长度标记的OFDM符号,模块输出与输入相同,但经过均衡和频率校正。模块参数解释如下。

FFT length,用于设置输入和输出数据向量大小。

CP length,循环前缀的长度。

Equalizer,将要用于完成实际工作的均衡器对象。

Length Tag Key,TSB密钥。

Propagate Channel State,如果为真,最后一个符号之后的通道状态将作为标签添加到第一个符号。

Fixed frame length,设置帧长度是否固定。当给出这个值时,Length标签键可以留空。

(6)OFDM Serializer模块

OFDM Serializer - GNU Radio

该模块是OFDM载波分配器(OFDM Carrier Allocator)模块的逆模块,实现将OFDM子载波符号序列化成复数已调信号,该模块去掉导频符号后,将复数数据符号作为输出的标记流。模块参数解释如下。

FFT length,FFT长度。

Occupied Carriers,OFDM符号占用的子载波数目。

Length Tag Key,标识输入帧长度标签的键值,以OFDM符号表示。

Packet Length Tag Key,标识此数据包中复杂符号数量的标签的关键字。

Symbols skipped,如果第一个符号没有像occupied_carriers[0]那样分配,则可设置该参数。

Carrier Offset Key,当该模块需要纠正载波偏移时,请在此处指定偏移的标签键值(如果遵循ofdm_frame_equalizer_vcvc,则不需要设置该参数)。

Input is shifted,如果输入在index 0上具有DC直流载波,则将该参数设置为false。

(7)Packet Header Parser模块

Packet Header Parser - GNU Radio

该模块可以看成是Packet Header Generator模块的逆模块。将数据包头数据解析成PMT类型的数据。解析后的header不是作为流输出,而是作为PMT字典输出到id为“header_data”的消息端口。模块参数解释如下。

Formatter Object,数据包头对象,该参数应该与Packet Header Generator模块中用到的对象一致。

三、 Packet

1、burst_tagger

GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/packet/burst_tagger.grc》。该流图的功能是实现OFDM解调过程的仿真。

如果你的GNU Radio版本为3.8(例如我用GNU Radio GRC 3.8.1.0),打开GNU Radio的3.9版本的GRC程序,那么可能会碰到如下问题。即某些字段无法解析,这是在3.8和3.9之间有一些参数的更新,如图所示,这里“Window Taps”中的“firdes.window(windows.WIN_HANN, 50, 0)”中,提示“Param-Window Taps(window), Expression None is invalid for type'complex_vector'.”我们需要将“firdes.window(window.WIN_HANN, 50, 0)”修改为“firdes.window(firdes.WIN_HANN, 50, 0)”。修改完之后的GRC如图所示。该流图的功能是实现突发脉冲成型操作的仿真。

 

 (1)Vector source模块

该模块基于输入的向量,生成一个向量数据(流)。默认情况下,该模块只会输出一次。但是当把该模块参数Repeat设置为“Yes”时,则输出的向量数据会重复输出。模块的参数解释如下:

Output Type,模块输出数据类型,支持complex、float、int、short、byte。

Vector,该模块将要生成的向量,在中括号中填写向量中的数值,数值之间以英文输入法状态下的逗号隔开。

Tags,在Python中,我们可以使用列表结构[int offset, pmt key, pmt value, pmt srcid]将标签创建为Python列表(或元组)。也可以用列表相同的数据类型键"offset","key","value"和"srcid"来表示python字典。当给定一个标记列表时,向量源将通过更新相对于向量流长度的偏移量来重复做出标记。也就是说,如果向量有500个元素,而标签的偏移量为0,则该标签将被放置在第0个、500个、1000个、1500个等元素上。

Repeat,模块是否重复输出。

Vec Length,向量长度,一般取值为1。

(2)Stream to Tagged Stream模块

Stream to Tagged Stream - GNU Radio

该模块将常规数据流转换成标记数据流,即可以定时给数据流添加长度标签。该模块可以用于连接一个常规数据流模块和一个gr::tagged_stream_block模块,即该模块后边紧跟的模块是一个做了长度标记的数据流模块。如果此模块与其他做了长度标记的数据流模块之间存在其他模块,请确保这些模块不要修改采样速率或标记值,以此来确保长度标记值能表示实际的数据包长度。模块参数解释如下。

Type,模块输入输出数据类型,支持complex、float、int、short、byte类型。

Vector length,向量长度,一般取值为1。

Packet Length,每个标记流数据包的项目数。每个数据包长度项都写入一个标签并包含该数字。

Length Tag Key,数据包长度标签值。

(3)Burst Shaper模块

Burst Shaper - GNU Radio

该模块实现突发脉冲成型功能。模块参数解释如下。

Type,模块输入输出数据类型,支持float和complex。

Window Taps,Vector of 窗口成型抽头(window taper taps),开头的ceil(N/2)个项目是上行波形,后边的ceil(N/2)项目是下行波形。如果taps.size()为奇数,则中间抽头将用作上行波形的最后一项和下行波形的第一项。

Pre-padding Length,在突发脉冲之前插入的零样本数。

Post-padding Length,突发后要附加的零样本数。

Insert Phasing Symbols,是否插入相位符号。如果此参数为Yes,则在突发之前和之后交替插入长度为ceil(N/2)个交替+1或-1所对应的波形。

Length Tag Name,标记流长度标签key的名称。

2、example_corr_est

GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/packet/example_corr_est.grc》。该流图的功能是仿真路径损耗、噪声功率、频率偏移和时间偏移因素对接收信号进行相关估计的影响。

(1)Multiply Const模块

Multiply Const - GNU Radio

该模块将输入数据乘以一个标量或者常数向量,即output=input*constant。模块参数解释如下。

IO Type,模块输入输出数据类型,支持complex、float、int、short类型。

Constant,乘以的常数值。

Vec Length,向量长度,一般取值为1。

(2)Add Const

Add Const - GNU Radio

该模块将所有输入数据加上一个常数,即输入输出关系式为output[m] = input[m] + constant vector。

(3)Interpolating FIR Filter模块

Interpolating FIR Filter - GNU Radio

该模块是带有内插功能的FIR滤波器模块,支持多种输入输出数据类型和抽头参数。模块参数解释如下。

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

Interpolation,内插因子。

Taps,抽头是类型选择列表中指定类型值的C++向量(或Python列表)。可以使用firdes或optfir工具来生成抽头参数。

Sample delay,此延迟主要用于调整标签的放置,目前不用于任何信号处理。当标签通过具有内部延迟的模块时,应根据模块的延迟移动其位置。

(4)Correlation Estimation模块

Correlation Estimator - GNU Radio

该模块将输入信号与提供的样本向量做相关运算,并输出相位和符号时序估计结果。模块参数解释如下:

Symbols,设置与输入信号进行相关操作的一组符号(例如:同步码)。

Samples per Symbol,每符号采样率sps。

Tag Marking Delay,用于标记样本中相关操作起始位的延迟标签。

Threshold,相关操作的阈值,如果是100%相关,则该阈值应设置为1,一般默认值为0.9。

Threshold Method,计算阈值的方法。有绝对阈值和动态阈值两种计算方法。

(5)Decimating FIR Filter模块

Decimating FIR Filter - GNU Radio

该模块是抽取型有限长单位冲激响应滤波器。模块参数解释如下:

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

Decimation,抽取率。该模块根据此数值来对输入数据进行抽取操作。抽取率为1时表示不进行抽取。如果抽取设置为高于1,则需要确保滤波器可以移除“输出区域”之外的带外能量,即-Fs/2到Fs/2,其中Fs是输入数据的采样率除以该模块的抽取率。

Taps,在FIR滤波器中使用的抽头。

Sample Delay,采样延迟,默认为0表示无延迟。

3、formatter_crc

GRC文件为《gnuradio-3.9.1.0/gr-channels/examples/packet/formatter_crc.grc》。该流图的功能是仿真数据包PDU生成,添加CRC等操作。

 

 (1)Message Strobe模块

Message Strobe - GNU Radio

该模块以自定义的时间间隔发送消息。接收PMT类型消息并每毫秒发送一次。这对于测试/调试消息系统很有帮助。

模块参数解释如下:

Message PMT,以PMT形式发送的消息。

Period (ms),发送消息的时间周期(以毫秒为单位)。

(2)Random PDU Generator模块

Random PDU Generator - GNU Radio

该模块在启动时发送一次随机数据包数据单元PDU,然后在每次收到上一个模块的消息时再发送数据。模块参数解释如下。

Min Bytes,模块输出的最小字节数

Max Bytes,模块输出的最大字节数。

Byte mask,模块输出字节是生成的数字和此掩码之间的与运算结果。

Length Modulo,使输出PDU的长度为指定数字的倍数。输出PDU长度不能低于该参数指定的数字。

(3)Async CRC32模块

Async CRC32 - GNU Radio

该模块可用于生成CRC或校验CRC。当使用校验模式时,如果CRC校验通过,则输出是删除CRC校验码以后的有效载荷,因此输出将比输入小4个字节。当使用计算模式(check==false)时,CRC在PDU上计算并附加到它。然后输出比输入长4个字节。模块参数解释如下。

Mode,支持“Generate CRC”和“Check CRC”两种模式。

(4)Protocol Formatter (Async)模块

Protocol Formatter (Async) - GNU Radio

该模块功能与Protocol Formatter模块类似。只是该模块支持输入数据异步情况。

(5)PDU to Tagged Stream模块

PDU to Tagged Stream - GNU Radio

该模块将接收到的PDU转换为带标签的数据流。模块参数解释如下。

Item Type,模块输入输出数据类型,支持byte、complex和float。

Length tag name,指定数据包长度的标签名称。

(6)Protocol Parser模块

Protocol Parser - GNU Radio

该模块接收hard bits(unpacked bytes的1和0以小端方式来读取),找到Access Code作为同步码,进而找到帧头。一旦检测到帧头,该模块就会使用数据包格式对象的解析器函数来解码剩余的数据包的包头。通常,包头将包含帧有效载荷的长度。该模块将输出一个PDU,该PDU包含PDU元数据部分中的帧头信息和有效载荷本身。模块参数解释如下。

Format Obj.,读取数据包的包头时所使用的数据包格式对象。该模块使用从 header_format_base类派生的数据包格式对象。

(7)Message Debug模块

Message Debug - GNU Radio

该模块用于捕获、打印或存储收到的消息。任何生成消息的块都可以将消息端口连接到该模块的三个消息输入端口中的一个或多个。消息输入端口包括print、store和print_pdu。

print,将消息直接打印到标准输出。

store,将消息存储在内部向量中。 可以使用 get_message 函数访问。

print_pdu,专门设计用于处理格式化的PDU。

四、联系方式

  • 6
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
根据引用\[1\]和引用\[2\]的内容,解决"ModuleNotFoundError: No module named 'gnuradio'"的方法如下: 1. 首先,确保已经安装了Python和pip。可以使用以下命令安装Python和pip: ``` sudo apt-get install python sudo apt-get install python-pip ``` 2. 然后,安装GNURadio。可以使用以下命令更新软件包列表并安装GNURadio: ``` sudo apt-get update sudo apt-get install gnuradio ``` 3. 如果在运行make命令时出现错误,如引用\[3\]所示,可能是由于缺少依赖库导致的。在这种情况下,需要安装缺少的依赖库。根据错误提示中提到的缺失的库文件,可以尝试使用以下命令安装相应的库文件: ``` sudo apt-get install liborc-0.4-dev ``` 请按照上述步骤进行操作,应该能够解决"ModuleNotFoundError: No module named 'gnuradio'"的问题。 #### 引用[.reference_title] - *1* *3* [走进开源SDR实验室一起玩转GNU Radio:LoRa实验](https://blog.csdn.net/OpenSourceSDR/article/details/119591575)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [解决ModuleNotFoundError: No module named ‘gnuradio](https://blog.csdn.net/QAQIknow/article/details/115447777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值