主要内容

QPSK接收器与USRP®硬件

这个例子展示了如何使用通用软件无线电外设®(USRP®)设备使用SDRu(软件定义无线电USRP®)系统对象来实现一个QPSK接收器。该接收器解决了无线通信中的实际问题,如载波频率和相位偏移、定时偏移和帧同步。这个系统接收由系统发出的信号QPSK发射器与USRP®硬件的例子。接收器解调接收的符号,并打印一个简单的消息到MATLAB®命令行。

请参阅设置和配置部分USRP®收音机的文档有关配置主机以使用SDRu Receiver System对象的详细信息。

实现

这个例子描述了一个带有USRP®硬件的QPSK接收机的MATLAB实现。这个例子还有一个使用Simulink®的实现。金宝app

使用系统对象的MATLAB脚本:sdruQPSKReceiver.m

金宝app使用块的Simulink实现:sdruqpskrx.mdl.

您还可以探索NO-USRP QPSK发射器和接收器示例,用于使用AWGN通道和模拟通道损伤模拟一般无线通信系统的示例commqpsktransmitterreceiver.m.

介绍

此示例具有以下动机:

  • 利用SDRu系统对象在MATLAB中实现一个真实的基于qpsk的收发环境。

  • 说明用于QPSK系统设计的关键通信工具箱™系统对象的使用,包括粗载波频率补偿和细载波频率补偿、带有位填充和剥离的闭环定时恢复、帧同步、载波相位模糊分辨和消息解码。

在该示例中,Sdreceiver系统对象通过空气传输接收数据破坏,并输出由QPSK接收器系统对象处理的复数基带信号。该示例提供了一种可以应对无线频道损伤的实用数字接收器的参考设计。接收器包括基于FFT的粗略频率补偿,基于PLL的微频补偿,定时恢复,具有固定速率重采样和比特填充/跳跃,帧同步和相位模糊分辨率。

发现收音机

发现连接到您的计算机的收音机。此示例使用使用的第一个USRP®收音机使用findsdru功能。检查无线电是否可用并记录无线电类型。如果未找到可用的无线电,则该示例使用系统的默认配置。

connectedRadios = findsdru;如果strncmp (connectedRadios(1)。的地位,'成功'7)转变connectedRadios(1)。平台情况下“B200”'b210'} address = connectedrdios (1).SerialNum;平台= connectedRadios (1) .Platform;情况下“N200 / N210 / USRP2”} address = connectedrdios (1).IPAddress;平台=“N200 / N210 / USRP2”情况下“×”“X310”} address = connectedrdios (1).IPAddress;平台= connectedRadios (1) .Platform;结束其他的地址=“192.168.10.2”;平台=“N200 / N210 / USRP2”结束

              

初始化

SDRUQPSKRECEIVER_INIT.M脚本初始化模拟参数并生成结构prmqpskreceiver

%接收机参数结构prmQPSKReceiver = sdruqpskreceiver_init(platform)平台=平台;prmQPSKReceiver。地址=地址;compileIt = false;如果代码要被编译以加速执行,则为真USECODEGEN = FALSE;%true以运行最新生成的代码(mex文件)而不是matlab代码
prmQPSKReceiver = MasterClockRate: 20000000 M: 4 Upsampling: 4 Downsampling: 2 Fs: 200000 Ts: 5.0000 e-06 FrameSize: 100 BarkerLength: 13 DataLength: 174 MessageLength: 105 FrameCount: 100 ScramblerBase: 2 ScramblerPolynomial: [1 1 1 0 1] ScramblerInitialConditions: [0 0 0 0] RxBufferedFrames: 10 RCFiltSpan: 10 SquareRootRaisedCosineFilterOrder:40滚边:0.5000 ReceiverFilterCoefficients: [1 x41双]PhaseErrorDetectorGain: 2.0000 PhaseRecoveryGain: 1 TimingErrorDetectorGain: 5.4000 TimingRecoveryGain: 1 CoarseCompFrequencyResolution: 50 PhaseRecoveryLoopBandwidth: 0.0100 PhaseRecoveryDampingFactor: 1 TimingRecoveryLoopBandwidth: 0.0100 TimingRecoveryDampingFactor:1 USRPCenterFrequency: 1.8500e+09 USRPGain: 31 USRPDecimationFactor: 100 USRPFrontEndSampleRate: 5.0000e-06 USRPFrameLength: 4000 FrameTime: 0.0200 StopTime: 5

为了成功发射,确保SDRu接收器的指定中心频率在USRP®子板的可接受范围内。

此外,通过使用compileIt和useCodegen标志,您可以与代码交互,以探索不同的执行选项。将MATLAB变量compileIt设置为true,生成C代码;可以通过使用codegenMatlab Coder™产品提供的命令。的codegen命令将MATLAB®函数编译为基于c的静态或动态库、可执行文件或MEX文件,生成加速执行的代码。生成的可执行文件运行速度比原始MATLAB代码快几倍。设置useCodegen为true以运行由codegen而不是matlab代码。

代码架构

runSDRuQPSKReceiver函数使用两个系统对象QPSKReceiver和comm.SDRuReceiver来实现QPSK接收器。

SDRu接收机

本例使用SDRu接收器System对象与USRP®板通信。参数结构prmqpskreceiver设置CenterFrequency、Gain和InterpolationFactor参数。

QPSK接收器

该组件重新生成原始传输的消息。它被分为五个子组件,使用System对象建模。每个子组件由使用System对象的其他子组件建模。

1)自动增益控制:设置输出振幅为1 /√Upsampling因素)(0.5),使得相位和定时误差检测器的等效增益保持恒定。AGC在此之前放置上升余弦接收滤波器因此,可以用4个过采样因子测量信号幅度。该过程提高了估计的准确性。

2)频率粗补偿:利用非线性和快速傅里叶变换(FFT)粗略估计频率偏移,然后进行补偿。该对象将输入信号提高到4的幂,以获得一个不是QPSK调制函数的信号。然后对调制无关信号进行FFT,以估计四倍频偏的音调。将估计值除以4后,相/频率偏移系统对象修正频率偏移。

3)精细频率补偿:闭环标量处理,精确补偿频率偏差。精细频率补偿对象实现了一个锁相环(PLL)来跟踪输入信号中的剩余频率偏移和相位偏移。有关详情,请参阅[1].锁相环使用直接数字合成器(DDS)产生补偿相位,补偿剩余频率和相位的偏移量。相位偏移估计DDS.是相位误差的积分输出循环过滤.要获取PLL设计的详细信息,请参阅[1].

4)定时恢复:采用闭环标量处理进行定时恢复,克服信道引入延迟的影响。的时间恢复对象实现了一个PLL,在[1],纠正接收信号中的定时误差。的以区域控制对象实现了一个自减的modulo-1计数器,如8.4.3章所述。1的控制信号修改后的缓冲选择的插值内插滤波器.该控制信号也使得能够实现定时错误检测器(TED),以便在正确的计时时刻计算计时误差。的以区域控制对象更新的内插滤波器,在最佳采样时刻生成插值。的内插滤波器是一个用alpha设置为0.5的抛物线过滤器,如[1].在插值的基础上,时间误差由过零产生定时错误探测器如[的第8.4.1章所述1],通过可调谐比例加积分过滤循环过滤如[的附录C.2)中所述1,并被喂进以区域控制用于定时差异更新。的环路带宽(通过采样率标准化)和循环阻尼因子是可调的循环过滤.对于临界阻尼,默认归一化环路带宽设置为0.01,默认阻尼系数设置为1。这些设置确保锁相环快速锁定到正确的时间,同时引入小的相位噪声。

5)数据解码器:使用Barker代码执行帧同步,相模糊的分辨率和解调。此外,数据解码器将再生消息与发送的消息进行比较并计算BER。

有关系统组件的更多信息,请参阅QPSK接收器使用Simulink使用USRP®硬件示例金宝app

执行和结果

在运行脚本之前,请先打开USRP®并将其连接到计算机。为了确保数据接收,首先启动QPSK发射器与USRP®硬件的例子。

如果Compileit Codegen('runsdruqpskreceiver'“参数”{coder.Constant (prmQPSKReceiver)});结束如果useCodegen清晰runSDRuQPSKReceiver_mex%#OK 数量= runSDRuQPSKReceiver_mex (prmQPSKReceiver);其他的BER = runsdruqpskreceiver(prmqpskreceiver);结束流('错误率是=%f。\ n'BER (1));流('检测到的错误数= %d.\n',ber(2));流('比较样本的总数=%d。\ n',BER(3));

当您运行模拟时,接收到的消息将被解码并在MATLAB命令窗口中打印出来,同时模拟正在运行。在脚本执行的最后还显示了误码率信息。当QPSK接收机中的一些自适应组件仍然没有收敛时,误码率值的计算包括第一个接收帧。在此期间,误码率相当高。一旦过了暂态周期,接收机就能估计出发送的帧,从而大大提高了误码率。在本例中,为了保证系统在仿真模式下的合理执行时间,仿真持续时间相当短。因此,在仿真开始时的高误码率值对整体误码率结果有显著影响。为了增加模拟持续时间并获得较低的误码率值,可以修改SimParams。中的StopTime变量接收初始化文件

此外,不同USRP®子板的增益行为差别很大。因此,本例中定义的发射机和接收机的增益设置可能不适合子板。如果信息没有被接收系统正确解码,你可以改变源信号的增益SDRu发射机SDRu接收机通过更改SimParams来修改系统对象。USRPGain值发射机初始化文件而在接收初始化文件

最后,发射和接收USRP®无线电之间的大相对频率偏移可以防止接收器功能从正确解码消息。如果发生这种情况,可以通过将来自发射器的已知频率从发射机发送到接收器的音调来确定偏移,然后测量发送和接收频率之间的偏移,然后将该偏移施加到SDRU接收机系统对象的中心频率。

附录

这个例子使用了下面的脚本和辅助函数:

参考

1.大米,迈克尔。数字通信-离散时间方法.1 ed。纽约,纽约:Prentice Hall,2008。

版权声明

Universal Software Radio Peripheral®和USRP®是美国国家仪器公司的商标。