目录:
目录:
一、绪论
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
的函数,该函数用于对输入数据进行调制。函数接受两个参数:inputData
和 modType
。inputData
是输入的数据,而 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_data
和 crc_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频带通信系统设计实验的过程中,我有幸亲身体验到项目模块设计的精密与卓越。然而,尽管项目的指导材料在大部分方面都做得详尽且具体,为我们的实践操作铺就了扎实的路径,但在少数环节,如信道估计与均衡的设计部分,我发现指导说明相对模糊,这在一定程度上增加了我们理解和实现的难度。
对于这一挑战,我们有一个建议。在未来的指导过程中,我们可以尝试采取更加循序渐进的方式。比如,对于一些关键但难以理解的部分,我们可以向学生推荐一些相关的学习资料,并指明其中哪些章节或段落是重点阅读的内容。这种指导方式既可以锻炼学生的自主学习能力,又可以避免直接给出答案,鼓励学生自行深入思考和进行探索。
此外,我必须赞赏项目设计中调制与解调部分的前后呼应。这种设计增强了实验的连贯性,让我们在实现过程中能够更全面、深入地理解通信系统的整体运作原理。这种巧妙的设计思路无疑对于我们知识的巩固和技能的提升起到了重要作用。
最后,我衷心希望武汉易思达能够延续这样的实习机会,为广大的学生群体提供这样宝贵的实践平台。通过这种实习项目,我们不仅能够将理论知识与实际操作相结合,进一步为我国高校教育注入更多的优秀资源。这种实践机会对于培养学生的创新精神和工程实践能力具有至关重要的意义,同样也是提升我国高等教育质量的重要手段。我期待在未来,有更多的学子能够从这样的实训项目中受益,共同为推动我国通信技术的发展和人才培养的进步贡献力量。