【XSRP软件无线电】基于软件无线电平台的QPSK频带通信系统设计

目录:

目录:

一、绪论

1.1 设计背景

1.2 设计目的

二、系统总体方案

2.1 专题调研题目

2.2 调研背景

2.3 设计任务解读

2.4 设计原理

2.4.1 原理框图

2.4.2 功能验证

三、软件设计

3.1 程序解读

3.2 程序设计

3.3 仿真结果:

四、程序代码分析

4.1 QPSK符号映射函数“txMod.m”

4.2 添加CRC函数“txCRCattach.m”

五、所需资源

5.1 硬件资源

5.2 软件资源

六、系统调试

6.1 设计阶段

6.2 调试阶段

6.3 调优和优化

七、总结


一、绪论

1.1 设计背景

        软件无线电(Software Defined Radio, SDR)是一种无线通信系统,它通过软件来定义和实现无线电的功能,而不是依赖于传统的硬件电路。SDR平台的核心思想是将传统无线电系统中的大部分硬件功能,如调制解调、信号处理、频率选择等,通过软件来实现。这种设计理念使得SDR具有高度的灵活性和可重配置性,能够适应不同的通信标准和频段,快速适应新的通信技术。

        QPSK(Quadrature Phase Shift Keying)是一种常用的数字调制技术,它通过改变载波的相位来传输信息。QPSK调制技术具有较高的频谱效率和较强的抗干扰能力,广泛应用于无线通信系统中,如卫星通信、移动通信、无线局域网等。

        随着通信技术的快速发展,对通信系统的灵活性和可扩展性提出了更高的要求。SDR平台能够通过软件升级来适应新的通信标准,而不需要更换硬件,这符合通信技术快速迭代的需求。无线通信频谱资源日益紧张,需要更高效的频谱利用技术。QPSK作为一种高效的调制技术,能够在有限的频谱资源下传输更多的信息,无线通信环境复杂多变,存在多种干扰源。QPSK调制技术具有较好的抗干扰能力,能够在复杂的无线环境中保持通信的稳定性,SDR平台通过软件实现大部分功能,可以降低硬件成本和维护成本。同时,QPSK调制技术相对简单,实现成本较低,适合大规模部署。

1.2 设计目的

        通过SDR平台,可以快速适应不同的通信标准和频段,实现通信系统的灵活配置和快速部署,以满足多样化的通信需求,采用QPSK调制技术,可以在有限的频谱资源下传输更多的信息,提高频谱利用率,应对频谱资源紧张的问题,QPSK调制技术具有较好的抗干扰性能,能够在复杂的无线环境中保持通信的稳定性,提高通信系统的鲁棒性,SDR平台通过软件实现大部分功能,可以减少硬件成本和维护成本。同时,QPSK调制技术的实现相对简单,有助于降低整个通信系统的成本,SDR平台为通信技术的研究和教育提供了便利,研究人员和学生可以通过SDR平台进行通信系统的实验和研究,推动通信技术的发展。

系统总体方案

2.1 专题调研题目

        基于软件无线电平台的QPSK频带通信 系统设计

2.2 调研背景

        随着无线通信技术的快速发展,对通信系统的灵活性、可扩展性和频谱效率提出了更高的要求。SDR技术因其软件定义的特性,能够适应不断变化的通信标准和需求,成为现代通信系统设计的重要方向,随着无线设备的激增,频谱资源变得越来越紧张。QPSK作为一种高效的调制技术,能够在有限的频谱资源下传输更多的信息,提高频谱利用率,因此被广泛应用于各种通信系统中。在复杂的无线环境中,通信系统需要具备良好的抗干扰能力。QPSK调制技术具有较好的抗干扰性能,能够在多径衰落、噪声干扰等不利条件下保持通信的稳定性。

        在通信系统设计中,成本是一个重要的考虑因素。SDR平台通过软件实现大部分功能,可以减少硬件成本和维护成本。同时,QPSK调制技术的实现相对简单,有助于降低整个通信系统的成本。现代通信系统需要支持多种通信模式,包括不同的调制方式、编码方案和协议。SDR平台可以支持多种通信模式,使得通信系统能够适应不同的应用场景和用户需求。

2.3 设计任务解读

图2.1 QPSK频带通信系统示意图 

1、在MATLAB下编写程序实现本地WAV文件数据读取并对读取的数据进行PCM编码, 然后数据分帧、加CRC、信道编码、调制映射(QPSK)、添加同步信号、过采样、过采样 后得到IQ信号。生成的IQ信号数据通过以太网发送到XSRP软件无线电平台,在软件无 线电平台中完成IQ数据DA转换、上变频载波调制、射频在指定频点将信号通过天线发 射出去。无线信号经过空中无线信道,再通过射频的接收天线在对应的频点将数据接收、 下变频、低通滤波、AD转换得到IQ信号。接收的IQ信号通过以太网发送到电脑。在电 脑上对IQ信号进行处理,包括帧同步、抽样、相位纠正、解调制映射、信道解码、CRC 校验、数据组帧、信源解码,将还原后的音频数据写入WAV文件。

2、需要掌握Matlab基本编程方法,根据算法要求实现特征参数提取,通过XSRP软件无 线电平台将调制信号自发自收,对接收信号进行自动识别。

3、本课程设计共有三级难度,可以根据自己的实际情况选择 

表 2.1: 

序号难度级数任务内容说明
1三级效果验证提供了案例程序,可以打开该程序并运行,提前了解项目要求实现的效果。
核心代码编写案例中实现的核心代码(QPSK调制解调)已加密,是看不见程序代码的,需要自己去编写。
仿真与联调程序完成后进行软件仿真,确保代码无误后再进行软硬件联调,要求还原音频达到指定要求。
2二级效果验证提供了案例程序,可以打开该程序并运行,提前了解项目要求实现的效果。
核心代码编写案例中实现的核心代码(QPSK调制解调及添加CRC)已加密,是看不见程序代码的,需要自己去编写。
仿真与联调程序完成后进行软件仿真,确保代码无误后再进行软硬件联调,要求能接收到正确的星座图。
3一级自主设计只提供课程设计的要求,设备的使用方法,设备调用的接口,不提供任何子模块程序,全部程序和软硬件联调由自己完成。

4、需要掌握XSRP软件无线电平台的基本使用方法,需要调用其射频部分、基带部分等
(通过“XSRP软件无线电平台无线收发软件测试软件”验证其主要功能)

2.4 设计原理

2.4.1 原理框图

        正交相移键控(QPSK)是一个通过转换或调制来传达数据的调制方法,基准信号(载 波)的定相。有时候也叫做第四期或者四相PSK或四相位预共享密钥(4-PSK),QPSK利 用星座图圆周上均匀分布的四个点,通过四个相位将每个符号编码为两个比特位,用格林 码表示以将误比特率降至最低——有时会被误解为是二进制相移键控(BPSK)误比特率 的两倍。其实现原理框图如图2.2:

图2.2QPSK频带系统设计原理框图 

        射频收发部分:即XSRP软件无线电平台的射频部分

        基带处理部分:即XSRP软件无线电平台的基带部分

        算法实现部分:在电脑中实现

         XSRP软件无线电平台=机箱+射频部分+基带部分+配件(电源线、网线、USB线、天线等)

        本课设要求学生完成QPSK调制解调及计算CRC模块。下面主要对QPSK调制和CRC 的原理进行重点讲解。

        在星座图中规定了星座点与传输比特间的对应关系,这种关系称为“映射”,一种调制 技术的特性可由信号分布和映射完全定义,即可由星座图来完全定义。四相相移调制是利 用载波的四种不同相位差来表征输入的数字信息,是四进制移相键控。QPSK是在M=4时 的调相技术,它规定了四种载波相位,分别为45°,135°,225°,315°,调制器输入的数据 是二进制数字序列,为了能和四进制的载波相位配合起来,则需要把二进制数据变换为四 进制数据,也就是说需要把二进制数字序列中每两个比特分成一组,共有四种组合,即00, 01,10,11,其中每一组称为双比特码元。每一个双比特码元是由两位二进制信息比特组 成,它们分别代表四进制四个符号中的一个符号。QPSK中每次调制可传输2个信息比特, 这些信息比特是通过载波的四种相位来传递的。解调器根据星座图及接收到的载波信号的 相位来判断发送端发送的信息比特。

        首先将输入的串行二进制信息序列经串-并变换,变成m=log2M个并行数据流,其 中每一路的数据率是R/m(R是串行输入码的数据率)。I/Q信号发生器将每一个m比特的 字节转换成一对(pn,qn)数字,分成两路速率减半的序列,电平发生器分别产生双极性 二电平信号I(t)和Q(t),然后对和进行调制,相加后即得到QPSK信号。

         循环冗余校验(CyclicRedundancy Check, CRC)是一种根据网络数据包或电脑文件等数 据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可 能出现的错误。它是利用除法及余数的原理来作错误侦测的。 

        假设数据传输过程中需要发送15位的二进制信息g=101001110100001,这串二进制码 可表示为代数多项式g(x)=x^14+x^12+x^9+x^8+x^7+x^5+1,其中g中第k位的值, 对应g(x)中x^k的系数。将g(x)乘以x^m,既将g后加m个0,然后除以m阶多项式h(x), 得到的(m-1)阶余项r(x)对应的二进制码r就是CRC编码 

2.4.2 功能验证

        Step1:将设备串口和电脑串口相连(电脑最好不要再接其他要用串口的设备),设备 网口和电脑网口相连,将电脑网口ip地址设置成当前电脑IP。

         Step2:打开“基于软件无线电平台的QPSK频带通信系统设计”实验对应的程序源码, 找到“QPSK_Main”文件并打开,如图2.3所示:

图2-3QPSK_Main 文件所在位置 

注:所有的程序代码都要保存在非中文路径下。

Step3:打开“QPSK_Main”文件后弹出如图2-4所示的界面:

图2-4QPSK无线传输系统的主界面

Step4:选择发送语音文件读取路径,如图2-5所示:

 图2-5 发送语音文件读取路径

Step5:找到程序目录下的“WindowsXP.wav”文件,作为发送语音,如图2-6所示:

图2-6 选择发送的语音内容

Step6:选择接收语音文件写入路径,如图2-7所示:

图2-7 接收语音文件写入路径

Step7:找到程序目录下的“decodwav.wav”文件,作为发送语音,如图2-8所示: 

图2-8

      Step8:运行方式配置为“仿真系统”,点击运行按钮,等待运行结束后,出现图2-9 所示界面: 

图2-9

Step9:从运行结果可以看出当前帧号为105,CRCFlag为1,说明105帧号CRC校 验正确,如图2-10所示:

图2-10 帧号和CRC所在位置

Step10:比较发送语音波形和接收语音波形,可以发现接收语音波形未出现失真,如 图2-11所示:

         图2-11 发送语音波形和接收语音波形对比图

        Step11:将发射衰减改为34dB,接收增益改为15dB,切换运行方式为“真实系统”, 点击运行按钮,等待运行结束后,如图2-12所示:

图2-12

        Step12:从运行结果可以看出当前帧号为105,CRCFlag为0,说明105帧号CRC校 验错误,如图2-13所示:

图2-13 帧号和CRC校验显示的位置

Step13:比较发送语音波形和接收语音波形,可以发现波形后半部分出现失真,如图 2-14 所示:

图2-14 发送语音波形和接收语音波形对比图

三、软件设计

3.1 程序解读

图3-1 程序解读框图

        由图3-1可知,程序分为7大模块设计,其中RF配置、获取Matlab代码路径、射频 发射和接收、清除Matlab路径模块,学生不需要去完成,学生需要理解已提供模块的功能, 以及在整个系统框架中的作用。下面将介绍已提供模块的功能

(1)RF配置模块

         VI名称:RFConfig.vi

        VI图标:

        VI功能:配置XSRP的硬件的射频发射和接收参数

        VI输入参数:发射参数(发射通道、发射频率、发射衰减),接收参数(接收通道、 接受频率、接收增益),错误输入

        VI输出参数:错误输出

         VI位置:文件夹“SDR_AMR”下的“.\LabviewSubVI\RFConfig\ RFConfig.vi”

(2)获取Matlab代码路径模块

         VI名称:GetMatlabCodePatah.vi

        VI图标:

        VI功能:获取MatlabCode文件夹所在的路径

        VI输入参数:无

        VI输出参数:MatlabCodePath(Matalb 代码路径)

        VI位置:文件夹“SDR_AMR”下的“.\LabviewSubVI\GetMatlabCodePatah.vi”

(3)清除Matlab代码路径缓存模块

        VI名称:MatlabPathClear.vi

        VI图标:

        VI功能:清除执行Matlab代码所加入的路径缓存

        VI输入参数:Path(Matlab代码路径),错误输入

        VI输出参数:错误输出

        VI位置:文件夹“SDR_AMR”下的“.\LabviewSubVI\MatlabPathClear.vi”

3.2 程序设计

程序设计整体框图如图3-2所示:

图3-2 程序设计整体框图

程序设计的所有模块都已经提供,其分别对应的VI名称如下

GetVoiceData.vi, PCM_encode.vi,DivFrame.vi,txCRCattach.vi

TxTrchCoder.vi, TxMod.vi , TxAddSyncSig.vi,PulseShaper.vi

RFchannel.vi,DeSync.vi,DownSample.vi,APcorrect.vi,rxDemode.vi, rxTrchDecoder.vi,

rxCRC.vi,PCM_decode.vi,WriteVoiceData.vi

需要通过理解每个模块在系统中的作用,并使用模块搭建完整的通信系统。 下面将对每个模块进行说明:

(1)获取音频数据模块

        VI名称:GetVoiceData.vi

        VI图标:

        VI功能:读取本地WAV文件数据

        VI输入参数:Matlab代码路径,WAV文件路径,错误输入

        VI输出参数:Matlab代码路径、WAV文件数据、音频数据采样率、错误输出

        VI位置:课设文件夹下的“.\LabviewSubVI\GetVoiceData.vi”

(2)PCM编码模块

        VI名称:PCM_encode.vi

        VI图标:

        VI功能:对数据进行PCM编码

         VI输入参数:Matlab代码路径,音频数据、音频数据采样率、错误输入

        VI输出参数:Matlab代码路径、以4000HZ采样后的数据(未用到)、13折线编码后数 据、错误输出

        VI位置:课设文件夹下的“.\LabviewSubVI\PCM_encode.vi”

(3)分帧模块

        VI名称:DivFrame.vi

        VI图标:

        VI功能: 根据信道容量对数据进行分帧(本实验信道容量为960个数据点)

        VI输入参数:要分帧的数据

        VI输出参数:分帧后数据

        VI位置:课设文件夹下的“.\LabviewSubVI\DivFrame.vi”

(4)添加CRC模块

        VI名称:txCRCattach.vi

        VI图标:

        VI功能:对输入数据添加CRC

         VI输入参数:Matlab代码路径、要添加CRC的数据、错误输入

         VI输出参数:Matlab代码路径、添加CRC后的数据、错误输出

         VI位置:课设文件夹下的“.\LabviewSubVI\OFDM_TxTrchCoder.vi”

(5)信道编码模块

        VI名称:TxTrchCoder.vi

        VI图标:

        VI功能:对输入的信源比特按照信道编码方式进行1/2卷积编码

        VI输入参数:Matlab代码路径、要编码的数据、错误输入

        VI输出参数:Matlab代码路径、编码后比特数据、错误输出

        VI位置:课设文件夹下的“.\LabviewSubVI\TxTrchCoder.vi”

(6)调制映射模块

         VI名称: txMod.vi

        VI图标:

        VI功能:对输入的比特按照QPSK产生映射后符号数据

        VI输入参数:Matlab代码路径,要调制的数据、错误输入

        VI输出参数:Matlab代码路径、调制映射后符号数据、错误输出  VI位置:课设文件夹下的“.\LabviewSubVI\txMod.vi”

(7)添加同步码模块

         VI名称:TxAddSyncSig.vi

         VI图标:

         VI功能:对输入数据添加同步码

         VI输入参数:Matlab代码路径,输入数据、错误输入

         VI输出参数:Matlab代码路径、添加同步码后的数据、错误输出

         VI位置:课设文件夹下的“.\LabviewSubVI\TxAddSyncSig.vi”

(8)过采样模块

        VI名:PulseShaper.vi

        VI图标:

        VI功能:对输入数据进行过采样  VI输入参数:Matlab代码路径,输入数据、错误输入  VI输出参数:Matlab代码路径、过采样后数据、错误输出  VI位置:课设文件夹下的“.\LabviewSubVI\PulseShaper.vi”

(9)IQ发送接收(或射频收发)模块

        VI名:RFchannel.vi

        VI图标:

        VI功能:将基带IQ信号发送给XSRP,在XSRP中进行DA、上变频、天线发射、天 线接收、下变频、AD最后得到接收的IQ信号

        VI输入参数:Matlab代码路径,选择经过真实无线信道还是模拟经过信道、输入数据、 错误输入

        VI输出参数:Matlab代码路径、待发送IQ数据tx_data、错误输出

        VI位置:课设文件夹下的“.\LabviewSubVI\RFchannel.vi”

(10)时隙同步模块

        VI名:DeSync.vi

        VI图标:

        VI功能:根据同步码对信号进行时隙同步

        VI输入参数:Matlab代码路径,输入数据、错误输入

        VI输出参数:Matlab代码路径、同步后数据、错误输出

        VI 位置:课设文件夹下的“.\LabviewSubVI\ DeSync.vi”

(11)降采样模块

        VI名:DownSample.vi

        VI图标:

        VI功能:对数据进行降采样即抽样

        VI输入参数:Matlab代码路径,输入数据、错误输入

        VI输出参数:Matlab代码路径、降采样后数据、错误输出 VI 位置:课设文件夹下的“.\LabviewSubVI\ DownSample.vi”

(12)相位纠正模块

        VI名:APcorrect.vi

        VI图标:

        VI功能:对传输过程中产生的相位偏移进行纠正

        VI输入参数:Matlab代码路径,输入数据、错误输入

        VI输出参数:Matlab代码路径、相位纠正后的数据、错误输出 VI 位置:课设文件夹下的“.\LabviewSubVI\APcorrect.vi”

(13)解调模块

        VI名:rxDemode.vi

        VI图标:

        VI功能:对数据进行解调

        VI输入参数:Matlab代码路径,纠正相位偏移后的数据、错误输入

(14)信道纠错模块

        VI名:rxTrchDecoder.vi

        VI图标:

        VI功能:对输入数据进行纠错

        VI输入参数:Matlab代码路径,输入数据、错误输入

        VI输出参数:Matlab代码路径、纠错后数据、错误输出

        VI 位置:课设文件夹下的“.\LabviewSubVI\ rxTrchDecoder.vi”

(15)CRC校验模块

        VI 名:rxCRC.vi

        VI图标:

        VI功能:对输入数据进行CRC校验并去除CRC

        VI输入参数:Matlab代码路径,输入数据、错误输入

        VI输出参数:Matlab代码路径、校验结果、去除CRC后数据、错误输出

        VI 位置:课设文件夹下的“.\LabviewSubVI\ rxCRC.vi”

(16)PCM解码模块

        VI 名:PCM_decode.vi

        VI图标:

        VI功能:将PCM编码后数据还原

        VI输入参数:Matlab代码路径,PCM编码数据、错误输入

        VI输出参数:Matlab代码路径、还原后数据、错误输出 VI 位置:课设文件夹下的“.\LabviewSubVI\ PCM_decode.vi”

3.3 仿真结果:

图3-2 真实系统 运行效果

图3-3 仿真框架图 

四、程序代码分析

4.1 QPSK符号映射函数“txMod.m”

        其路径位置“.\MatlabCode\ txMod.m”,

function outData=txMod(inputData,modType)
if modType==1bitSymbol=modType*2;    %一个符号对应的bit数lenOutData=(length(inputData))/bitSymbol;outData=zeros(1,lenOutData);inputData=inputData*(-2)+1;%0 1映射为 1 -1outData=inputData(1,1:2:end)+i*inputData(1,2:2:end); %奇数为实部偶数为虚部   
else disp('输入参数不支持');
end

以上这段代码定义了一个名为 txMod 的函数,该函数用于对输入数据进行调制。函数接受两个参数:inputDatamodTypeinputData 是输入的数据,而 modType 是调制类型。

函数的工作思路如下:

        1.检查 modType 是否等于 1。如果 modType 等于 1:

                (1)计算每个符号对应的比特数 bitSymbol,这里假设 modType 乘以 2。

                (2)根据 bitSymbol 计算输出数据的长度 lenOutData

                (3)初始化输出数据 outData 为全零向量,长度为 lenOutData

                (4)对输入数据 inputData 进行映射,将 0 映射为 1,将 1 映射为 -1。

                (5)将映射后的数据按照奇数位为实部、偶数位为虚部的规则,转换为复数形式的输出数据 outData

        2.如果 modType 不等于 1,则显示一条消息 "输入参数不支持"。

4.2 添加CRC函数“txCRCattach.m”

        其路径位置“.\MatlabCode\ txCRCattach.m

function [out_data] = txCRCattach(input_data, crc_num)
input_num = length(input_data);
%% 变量初始化
out_data = zeros(1, input_num+crc_num);
crcBit = zeros(1, crc_num);
regOut = zeros(1, crc_num);         %#ok%% 功能实现
switch crc_numcase 0out_data = input_data;case 8%生成多项式 gD = D8+D7+D4+D3+D1+1for num = 1:input_num;regOut = crcBit;            %shift bitscrcBit(8)  = xor(regOut(7), xor(regOut(8), input_data(num)));crcBit(7)  = regOut(6);crcBit(6)  = regOut(5);crcBit(5)  = xor(regOut(4), xor(regOut(8), input_data(num)));crcBit(4)  = xor(regOut(3), xor(regOut(8), input_data(num)));crcBit(3)  = regOut(2);crcBit(2)  = xor(regOut(1), xor(regOut(8), input_data(num)));crcBit(1)  = xor(regOut(8), input_data(num)); end out_data(1, 1:input_num) = input_data(1, 1:input_num);out_data(1, input_num+1:input_num+crc_num) = crcBit;  case 12%生成多项式 gD = D12+D11+D3+D2+D1+1for num = 1:input_num;regOut = crcBit;            %shift bitscrcBit(12) = xor(regOut(11), xor(regOut(12), input_data(num)));crcBit(11) = regOut(10);crcBit(10) = regOut(9);crcBit(9)  = regOut(8);crcBit(8)  = regOut(7);crcBit(7)  = regOut(6);crcBit(6)  = regOut(5);crcBit(5)  = regOut(4);crcBit(4)  = xor(regOut(3), xor(regOut(12), input_data(num)));crcBit(3)  = xor(regOut(2), xor(regOut(12), input_data(num)));crcBit(2)  = xor(regOut(1), xor(regOut(12), input_data(num)));crcBit(1)  = xor(regOut(12), input_data(num)); end out_data(1, 1:input_num) = input_data(1, 1:input_num);out_data(1, input_num+1:input_num+crc_num) = crcBit;   case 16%生成多项式 gD = D16+D12+D5+1for num = 1:input_num;regOut = crcBit;            %shift bitscrcBit(16) = regOut(15);	crcBit(15) = regOut(14);crcBit(14) = regOut(13);crcBit(13) = xor(regOut(12), xor(regOut(16), input_data(num)));crcBit(12) = regOut(11);crcBit(11) = regOut(10);crcBit(10) = regOut(9);crcBit(9)  = regOut(8);crcBit(8)  = regOut(7);crcBit(7)  = regOut(6);crcBit(6)  = xor(regOut(5), xor(regOut(16), input_data(num)));crcBit(5)  = regOut(4);crcBit(4)  = regOut(3);crcBit(3)  = regOut(2);crcBit(2)  = regOut(1);crcBit(1)  = xor(regOut(16), input_data(num)); end out_data(1, 1:input_num) = input_data(1, 1:input_num);out_data(1, input_num+1:input_num+crc_num) = crcBit;case 24%生成多项式 gD = D24+D23+D6+D5+D1+1for num = 1:input_num;regOut = crcBit;            %shift bitscrcBit(24) = xor(regOut(23), xor(regOut(24), input_data(num)));crcBit(23) = regOut(22);crcBit(22) = regOut(21);crcBit(21) = regOut(20);crcBit(20) = regOut(19);crcBit(19) = regOut(18);crcBit(18) = regOut(17);crcBit(17) = regOut(16);crcBit(16) = regOut(15);	crcBit(15) = regOut(14);crcBit(14) = regOut(13);crcBit(13) = regOut(12);crcBit(12) = regOut(11);crcBit(11) = regOut(10);crcBit(10) = regOut(9);crcBit(9)  = regOut(8);crcBit(8)  = regOut(7);crcBit(7)  = xor(regOut(6), xor(regOut(24), input_data(num)));crcBit(6)  = xor(regOut(5), xor(regOut(24), input_data(num)));crcBit(5)  = regOut(4);crcBit(4)  = regOut(3);crcBit(3)  = regOut(2);crcBit(2)  = xor(regOut(1), xor(regOut(16), input_data(num)));crcBit(1)  = xor(regOut(24), input_data(num)); end out_data(1, 1:input_num) = input_data(1, 1:input_num);out_data(1, input_num+1:input_num+crc_num) = crcBit;       otherwisefprintf('error:函数mfTxCRCattach的参数crc_num输入错误\n');
end    end

        以上这段代码定义了一个名为 txCRCattach 的 MATLAB 函数。此函数用于在输入数据中加入循环冗余校验(CRC)位。CRC是一种常用的检测数据传输或存储过程中是否出现错误的技术。函数 txCRCattach 接受两个参数:input_datacrc_num,分别代表输入的数据和要添加的CRC位的数量。

1. 函数实现的过程:

        (1)计算输入数据 input_data 的长度 input_num

        (2)初始化输出数据 out_data 和CRC校验位 crcBit 为全零向量。out_data 的长度是输入数据长度加上CRC位的数量,crcBit 的长度是CRC位的数量。

        (3)初始化一个变量 regOut,用作寄存器,长度等于CRC位的数量。

2. 这个函数通过switch语句支持不同长度的CRC生成多项式:

        (1)如果 crc_num 为0,则 out_data 直接等于 input_data,未进行CRC添加。

        (2)如果 crc_num 为8,则使用一个特定的生成多项式来计算8位CRC。这个过程涉及在每个输入数据位上执行一系列异或操作。

        (3)如果 crc_num 为12、16或24,过程类似,只是生成多项式不同,这会影响异或操作的位置。

        对于每个 case,都有一个循环遍历 input_data 的所有位,根据生成多项式更新CRC寄存器 crcBit

        在生成CRC位之后,函数将原始的 input_data 和计算出的CRC位 crcBit 拼接起来,形成最终的 out_data

        如果 crc_num 不是函数支持的值(0, 8, 12, 16, 24),则函数会打印错误信息。

五、所需资源

5.1 硬件资源

        1. XSRP软件无线电平台及其相关连接线

        2.电脑(操作系统:Win7及其以上;以太网网卡:千兆;)

5.2 软件资源

        1. LabVIEW2015

        2. Matlab2012b

        3. XSRP软件无线电平台无线收发软件测试软件(需要配合XSRP软件无线电平台硬 件才能使用)

六、系统调试

        基于软件无线电平台的QPSK(Quadrature Phase Shift Keying)频带通信系统设计和系统调试是一个复杂的过程,涉及信号处理、通讯原理和系统集成等多个方面。

6.1 设计阶段

        理解QPSK调制解调原理,包括信号的相位变化代表不同的符号(比如00, 01, 10, 11),确定系统要求,如数据速率、频带宽度、误码率等。

        选择软件无线电平台,设计QPSK调制解调链路,包括滤波器、放大器、频率合成器等,使用当前的软件(如GNU Radio、MATLAB/Simulink等)进行算法实现,编写代码实现QPSK的调制和解调过程,包括符号映射、脉冲整形、频率转换等,在软件中进行系统仿真,验证链路性能,进行误码率(BER)测试,确保信号质量满足设计要求。

6.2 调试阶段

        设置软件无线电硬件参数,如中心频率、增益、采样率等、确保天线和其他RF组件适合所选的频率范围和功率水平、在实验环境中测试发射和接收路径、检查硬件平台与软件设计的接口是否正确、在实际信道条件下评估BER和信号质量、如果有必要,调整硬件设置和软件算法以提高性能。

        如果发现性能低于预期,进行问题排查、检查硬件连接、软件配置等,确保没有错误、在实际环境下进行长时间的测试,以确保系统稳定性、记录性能数据,并在不同条件下对系统进行优化。

6.3 调优和优化

        根据测试结果调整滤波器系数、同步算法、增益控制等参数、考虑环境因素(如多径效应、干扰等),优化系统以适应不同场景、文档化整个设计和调试过程,包括参数设置、问题及其解决方案、性能记录等,以便未来参考和进一步开发。

七、总结

        在深入参与基于软件无线电平台的QPSK频带通信系统设计实验的过程中,我有幸亲身体验到项目模块设计的精密与卓越。然而,尽管项目的指导材料在大部分方面都做得详尽且具体,为我们的实践操作铺就了扎实的路径,但在少数环节,如信道估计与均衡的设计部分,我发现指导说明相对模糊,这在一定程度上增加了我们理解和实现的难度。

        对于这一挑战,我们有一个建议。在未来的指导过程中,我们可以尝试采取更加循序渐进的方式。比如,对于一些关键但难以理解的部分,我们可以向学生推荐一些相关的学习资料,并指明其中哪些章节或段落是重点阅读的内容。这种指导方式既可以锻炼学生的自主学习能力,又可以避免直接给出答案,鼓励学生自行深入思考和进行探索。

        此外,我必须赞赏项目设计中调制与解调部分的前后呼应。这种设计增强了实验的连贯性,让我们在实现过程中能够更全面、深入地理解通信系统的整体运作原理。这种巧妙的设计思路无疑对于我们知识的巩固和技能的提升起到了重要作用。

        最后,我衷心希望武汉易思达能够延续这样的实习机会,为广大的学生群体提供这样宝贵的实践平台。通过这种实习项目,我们不仅能够将理论知识与实际操作相结合,进一步为我国高校教育注入更多的优秀资源。这种实践机会对于培养学生的创新精神和工程实践能力具有至关重要的意义,同样也是提升我国高等教育质量的重要手段。我期待在未来,有更多的学子能够从这样的实训项目中受益,共同为推动我国通信技术的发展和人才培养的进步贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络基础-SSH协议(思科、华为、华三)

SSH(Secure Shell)是一种用于安全远程访问和安全文件传输的协议。它提供了加密的通信通道,使得用户可以在不安全的网络上安全地远程登录到远程主机,并在远程主机上执行命令、访问文件以及传输文件,本篇主要讲解命令执行…

SpringAI集成本地AI大模型ollama(调用篇)非常简单!!

一,前提准备本地ai模型 1,首先需要去ollama官网下载开源ai到本地 网址:Ollama 直接下载到本地,然后启动ollama 启动完成后,我们可以在cmd中执行ollama可以看到相关命令行 2, 下载ai moudle 然后我们需要…

基于C#开发web网页模板流程-登录界面

前言,首先介绍一下本项目将要实现的功能 (一)登录界面 实现一个不算特别美观的登录窗口,当然这一步跟开发者本身的设计美学相关,像蒟蒻博主就没啥艺术细胞,勉强能用能看就行…… (二&#xff09…

【vector】迭代器

Vector的基本数据结构 可以看到end指向的是数组的最后一个元素&#xff1b; 那么在使用函数遍历的时候就要注意这种清理&#xff1b; 比如计算一个数组前5个数字的最小值&#xff1b; vector<int> prices{2,1,4,2,0,52,12};auto iter_min min_element(prices.begin(),pr…

NSSCTF | [LitCTF 2023]我Flag呢?

这道题没啥好说的&#xff0c;题目标签为源码泄露&#xff0c;我们直接CtrlU查看网页源码就能在最后找到flag 本题完

深入学习指针2

前言 hello,我又来了&#xff0c;今天有我继续带领大家深入的学习指针&#xff0c;通过上次的学习&#xff0c;我们已经了解到了指针的基本概念&#xff0c;指针如何使用&#xff0c;指针使用的益处&#xff0c;以及一些相关的概念&#xff0c;那今天我们就继续深入的学习&am…

Vue3专栏项目 -- 二、自定义From组件(下)

需求分析&#xff1a; 现在我们还需要一个整体的表单在单击某个按钮的时候可以循环的验证每个input的值&#xff0c;最后我们还需要有一个事件可以得到最后验证的结果&#xff0c;从而进行下一步的操作 如下&#xff0c;我们应该有一个form表单包裹着全部的input表单&#xf…

Java面试八股之Java中的IO流分为几种

Java中的IO流分为几种 按数据单位分类&#xff1a; 字节流&#xff08;Byte Stream&#xff09;&#xff1a;以字节&#xff08;8位二进制数&#xff09;为基本单位进行数据读写。字节流适合处理所有类型的数据&#xff0c;包括文本、图像、音频、视频等二进制文件。抽象基类…

打破地域界限,HubSpot海外获客系统引领企业走向国际化

在全球化的浪潮中&#xff0c;企业如何精准把握海外市场、高效获取并转化目标客户&#xff0c;已成为决定其市场地位与未来发展的关键因素。HubSpot海外获客系统以其独特的视角、强大的功能和卓越的性能&#xff0c;正在引领全球营销进入一个新的时代。今天运营坛将深入剖析Hub…

阿里巴巴找黄金宝箱(II) - 贪心思维

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输出描述三、输入描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布自己的解题思路&#xff0c;希望大家多指教 一、题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发…

工作组PTH

文章目录 简述RID 500本地管理员密码喷洒何为RIP 500 安全标识符SID与RIDPTH为何必须是RID 500CrackMapExec进行密码喷洒 简述 在工作组PTH中为什么只有administrator账号可以,下面进行讲解与利用。RID 500本地管理员密码喷洒 何为RIP 500 安全标识符 安全标识符 安全标识符…

触摸OpenNJet,云原生世界触手可及

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 导言OpenNJet云原生引擎介绍云原生平台的介绍优化与创新 为什么选择OpenNJet云原生引擎如何在windo…

Pytorch基础:torch.cuda.set_device函数

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 torch.cuda.set_device函数用于设置当前使用的cuda设备&#xff0c;在当拥有多个可用的GPU且能被pytorch识别的cuda设备情况下&#xff08;环境变量CUDA_VISIBLE_…

【AI大模型】自动生成红队攻击提示--GPTFUZZER

本篇参考论文为&#xff1a; Yu J, Lin X, Xing X. Gptfuzzer: Red teaming large language models with auto-generated jailbreak prompts[J]. arXiv preprint arXiv:2309.10253, 2023. https://arxiv.org/pdf/2309.10253 一 背景 虽然LLM在今天的各个领域得到了广泛的运用…

MacOS java多版本安装与管理

Home - SDKMAN! the Software Development Kit Manager # 安装sdkman curl -s "https://get.sdkman.io" | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"sdk version正常出现sdkman版本号就安装成功了 # 安装java # 安装java8 sdk install java 8.0…

论文笔记:仅一个进程故障就无法达成共识

仅一个进程故障就无法达成共识 仅一个进程故障指的是在异步的分布式系统中 摘要 异步系统的共识问题&#xff08;consensus&#xff09;涉及一组进程&#xff0c;其中有的进程可能不可靠&#xff08;unreliable&#xff09;。共识问题要求可靠的进程一致地从两个侯选中决定&…

【MATLAB源码-第207期】基于matlab的单相光伏并网系统仿真,并网策略采用基于扰动观测法的MPPT模型和使用电压电流双闭环SPWM控制。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 本文将重点分析光伏发电最大功率点跟踪&#xff08;MPPT&#xff09;技术和逆变器的并网控制技术&#xff0c;并在Simulink环境下建立模拟系统&#xff0c;以体现这些技术的应用与效果。文章结构如下&#xff1a;首先简介光伏…

OpenAI下周发布更新;TikTok将自动标记AIGC;智谱AI亮相2024 ICLR

OpenAI 官宣下周举办直播发布更新 OpenAI 今日凌晨官宣&#xff0c;将在当地时间 5 月 13 日上午十点&#xff08;北京时间 5 月 14 日凌晨两点&#xff09;在官网进行直播&#xff0c;届时将演示一些 ChatGPT 和 GPT-4 的更新。 OpenAI CEO Sam Altman 补充表示&#xff0c;届…

2024软件测试面试必备面试题大全

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;…

PCIE协议-2-事务层规范-MEM/IO/CFG request rules

2.2.7 内存、I/O和配置请求规则 以下规则适用于所有内存、I/O和配置请求。每种类型的请求还有特定的额外规则。 所有内存、I/O和配置请求除了常见的头标字段外&#xff0c;还包括以下字段&#xff1a;requester ID[15:0]和Tag[9:0]&#xff0c;形成事务ID。Last DW BE[3:0] a…