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

news2024/11/27 18:47:02

目录:

目录:

一、绪论

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==1
	bitSymbol=modType*2;    %一个符号对应的bit数
	lenOutData=(length(inputData))/bitSymbol;
	outData=zeros(1,lenOutData);
	inputData=inputData*(-2)+1;%0 1映射为 1 -1
	outData=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_num
	case 0
        out_data = input_data;
    case 8
        %生成多项式 gD = D8+D7+D4+D3+D1+1
        for num = 1:input_num;
            regOut = crcBit;            %shift bits
            crcBit(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+1
        for num = 1:input_num;
            regOut = crcBit;            %shift bits
            crcBit(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+1
        for num = 1:input_num;
            regOut = crcBit;            %shift bits
            crcBit(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+1
        for num = 1:input_num;
            regOut = crcBit;            %shift bits
            crcBit(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;       
    otherwise
        fprintf('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.coloradmin.cn/o/1671014.html

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

相关文章

爬取深圳2024年链家二手房数据,共3000条数据(其他城市也可)

文章目录 专栏导读1.目标2.导入相关库3.获取每个二手房的链接4.获取每个链接中的相关数据5.保存数据6.数据展示 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫…

二叉树OJ刷题

制作不易,三连支持一下吧!!! 文章目录 前言一、相同的树二、单值二叉树三.对称二叉树四.二叉树的前序遍历五.另一棵树的子树六.二叉树遍历总结 前言 前三篇博客我们详细介绍了树形结构,及两种特殊的树:堆和…

【Ubuntu永久授权串口设备读取权限“/dev/ttyUSB0”】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限,拥有者是root,所属用户组为dialout2.2 查看dialout用户组成员,如图所示,普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

云原生新手和开源教育分论坛 02-技术 or 非技术,参与 Kubernetes 社区丝滑路径【开源贡献】

https://www.kubernetes.dev/https://www.kubernetes.dev/community/community-groups/https://killercoda.com/https://kwok.sigs.k8s.io/https://training.linuxfoundation.cn/ 演讲

pywinauto,一款Win自动化利器!

pywinauto,一款Win自动化利器! 1.安装 pywinauto是一个用于自动化Python模块,适合Windows系统的软件(GUI),可以通过Pywinauto遍历窗口(对话框)和窗口里的控件,也可以控…

NeurIPS‘24 截稿日期逼近 加拿大温哥华邀你共赴盛会

会议之眼 快讯 第38届NeurIPS24(Conference and Workshop on Neural Information Processing Systems)即神经信息处理系统研讨会将于 2024 年 12月9日-15日在加拿大温哥华会议中心举行! NeurIPS 每一年都是全球AI领域的一场盛宴,吸引着来自世界各地的顶…

软件文档-总体测试计划书(Word原件2024)

软件资料清单列表部分文档: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,技术解决…

第九期济南科创生态大会即将盛大开启,为中小企业注入新动能

【头部财经】近日,备受瞩目的第九期济南科创生态大会即将拉开帷幕。本次大会将聚焦科技创新领域,为参会者提供一个交流合作、资源对接的优质平台。 作为一个专为中小企业打造的科技创新交流平台,济南科创生态大会一直致力于促进中小企业的发…

【VTKExamples::Rendering】第七期 TestShadows

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TestShadows,并解析接口vtkRenderer,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO …

解决Android手机无法通过蓝牙给win10 PC传送文件

(一)先配对设备,正常配对就可以 (二)打开系统设置,win搜索窗口搜索“设置” (三)搜索“蓝牙” (四)打开“蓝牙和其他设备”,点击“更多蓝牙设置”…

【2024年5月备考新增】】 考前篇(2)《官方平台 - 考生模拟练习平台常用操作(一)》

软考考生常用操作说明 说明:模拟作答系统是旨在让考生熟悉计算机化考试环境和作答方式,模拟作答不保存考生作答 历史记录。考试题型、题量、分值、界面及文字内容以正式考试答题系统为准。 1 如何标记试题、切换试题 2 简答题如何查看历史记录、切换输入法 3 选做题,已作答…

C++下使用Matplotlib-cpp的一些配置

Aconda3安装使用 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/下载 切换清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ con…

自动化测试需知的4项测试工具

一般来说学自动化会建议大家先学selenium,因为最早的时候,自动化就代表selenium,进入测试行业就开始做接口测试,而且现在基本每个公司都需要接口测试。今天就和大家聊一下接口测试的工具。 一、Robot Framework 机器人框架。之所…

难以重现的 Bug如何处理

对很多测试人员(尤其是对新手来说)在工作过程中最不愿遇到的一件事情就是:在测试过 程中发现了一个问题,觉得是 bug,再试的时候又正常了。 碰到这样的事情,职业素养和测试人员长期养成的死磕的习性会让她…

04、 .java程序用 editplus 工具打开的过程及在 editplus 工具中配置 java/javac 命令的过程

EditPlus 工具的使用: 1、安装 editplus 工具的过程:其一、安装包地址:其二、安装步骤: 2、使用 editplus 工具打开 .java 程序的过程:其一、修改默认打开 .java 的工具:其二、效果展示: 3、在 …

电商平台接口自动化框架实践||电商API数据采集接口

电商数据采集接口 语言:python 接口自动化实现流程 红色为可实现/尚未完成 绿色为需要人工干预部分 自动生成测试用例模板(俩种方式二选一): mimproxy,通过浏览器代理抓包方式,访问 H5 或者 web 页面&a…

苍穹外卖Day06笔记(复习了jwt的加密解密和传递)

疯玩了一个月,效率好低,今天开始捡起来苍穹外卖~ 1. 为什么不需要单独引入HttpClient的dependency? 因为我们在sky-common的pom.xml中已经引入了aliyun-sdk-oss的依赖,而这个依赖低层就引入了httpclinet的依赖,根据依…

vue3.0(八) 监听器(watch),高级监听器(watchEffect)

文章目录 watch1 watch的用法2 watch的高级用法3 watch性能优化 watchEffect1 停止监听2 侦听多个状态3 懒执行 watch和watchEffect的区别watch和computed的区别 watch watch特性进行了一些改变和优化。与computed不同,watch通常用于监听数据的变化,并执…

深度求索推出DeepSeek-V2:经济高效的多专家语言模型

AI苏妲己 深度求索发布了DeepSeek-V2混合专家(MoE)语言模型,每百万tokens,2元人民币价格,简直便宜到令人发指(而且不是活动价格噢),可以说是继Groq以后,AI领域最惊艳的新…

PyQt:界面无边框+实现窗口最小化(任务栏图标隐藏+托盘图标显示)

一、整体实现效果 诸如WX、各种管家的桌面显示方式。窗口关闭后,往往是任务栏图标消失,保持右下角托盘图标显示,保持后台运行。双击托盘图标后,窗口显示。 二、代码实现 from PyQt5.QtWidgets import * from ato_upgrade impo…