HDL OFDM MATLAB参考资料
这个例子展示了如何在MATLAB®中建模OFDM发射机、加性高斯白噪声(AWGN)和OFDM接收器硬件算法,作为开发硬件的Simulink®实现的步骤。HDL OFDM的MATLAB参考示例在数学算法和硬件实现之间架起了桥梁。这个例子提供了HDL OFDM发射器,HDL AWGN和HDL OFDM接收器算法的MATLAB参考。您可以使用这些MATLAB参考来生成测试向量,以验证HDL的实现高密度脂蛋白OFDM发射机,AWGN生成器的HDL实现,高密度脂蛋白OFDM接收机仿真软件模型。
HDL OFDM发射机MATLAB参考
本节介绍了HDL OFDM发射机的MATLAB参考。
这个MATLAB参考接受调制顺序、码率索引、帧数和要传输的数据位作为txParam
结构或结构的数组。txParam
这些字段。
modOrder
—为“BPSK”、“QPSK”、“16QAM”和“64QAM”分别指定2、4、16或64。默认值是4 ('QPSK')。codeRateIndex
—将速率'1/2'、'2/3'、'3/4'和'5/6'分别指定为0、1、2或3。默认值是0('1/2')。numFrames
—请输入正整数。缺省值是5。txDataBits
—指定长度为行或列向量的二进制值trBlkSize
xtxParam.numFrames
.默认值是一个列向量,包含随机生成的长度的二进制值trBlkSize
xtxParam.numFrames
.
计算传输块大小(trBlkSize
)。
numSubCar
-每个符号的子载波数pilotsPerSym
-每个符号的导频数numDataOFDMSymbols
—数据OFDM符号数bitsPerModSym
-每个调制符号的比特数codeRate
-破码率dataConvK
-卷积编码器的约束长度dataCRCLen
- - - - - - CRC长度
trBlkSize = ((numSubCar - pilotsPerSym) x numDataOFDMSymbols x bitsPerModSym x codeRate) - (dataConvK-1) - dataCRCLen
例如,使用传输块中的随机数据位生成调制方案为16QAM、码率为1/2的5帧时域OFDM发射机波形,将输入格式化为结构。
txParam。modOrder= 16;%调制顺序对应16-QAMtxParam。codeRateIndex = 0;对应1/2的码率索引txParam.numFrames= 5;生成的帧数使用参数计算传输块大小(trBlkSize)numSubCar = 72;每个符号的子载波数pilotsPerSym = 12;每个符号的导频数numDataOFDMSymbols = 32;数据OFDM符号的百分比bitsPerModSym = log2 (txParam.modOrder);每个调制符号的比特数codeRate = 1/2;%戳穿代码率dataConvK = 7;卷积码多项式的约束长度dataCRCLen = 32;数据CRC长度trBlkSize = ((numSubCar-pilotsPerSym) * numDataOFDMSymbols *...bitsPerModSym*codeRate - (dataConvK-1) - dataCRCLen;txParam。txDataBits = randi([0 1],txParam.numFrames*trBlkSize,1);生成复杂基带发射机波形流(' \ n -------------------------\ n ');流(\n正在传输%d帧…\n', txParam.numFrames);[txWaveform, txGrid txDiagnostics] = whdlexamples.OFDMTx (txParam);流(“\ n传输成功。\ n”);流(' \ n -------------------------\ n ');
------------------------- 发送5帧…传输成功。-------------------------
的whdlexamples。OFDMTx
函数返回参数txWaveform
,txGrid
,txDiagnostics
.
txWaveform
生成的时域波形,并作为长度(()的列向量返回。fftLen
+cpLen
) xtxParam.numFrames
xnumSymPerFrame
),其中:
fftLen
为FFT长度。cpLen
是循环前缀长度。txParam.numFrames
为生成的OFDM帧数。numSymPerFrame
为每帧OFDM符号的数量。
如果txParam
是一个数组的结构,那么在表达式txParam.numFrames
被替换成所有的和numFrames
数组中出现的属性。所生成的时域波形的帧结构txWaveform
类似于Simulink HDL OFDM发射器的输出波形。有关框架结构的详细说明,请参见高密度脂蛋白OFDM发射机的例子。
txGrid
发射机网格是否输出并作为大小矩阵返回numSubCar
————(txParam.numFrames
xnumSymPerFrame
),numSubCar
是活跃子载波数。
txDiagnostics
是一个结构或结构数组,由以下三个字段组成:
headerBits
将标题位表示为大小为14的列向量,其中包括3位用于FFT长度索引,2位用于符号调制类型,2位用于代码速率索引,以及7位备用。dataBits
表示在给定帧数中传输的实际数据位(txParam.numFrames
).该字段是一个二进制值的行或列向量,长度等于(txParam.numFrames
xtrbBlkSize
).是否dataBits
行向量还是列向量取决于的维数txParam.dataBits
.默认的大小是长度等于的列向量txParam.numFrames
xtrbBlkSize
.ofdmModOut
表示OFDM调制器输出为长度等于(的列向量fftLen
+cpLen
) xtxParam.numFrames
xnumSymPerFrame
.
OFDMTx
whdlexamples。OFDMTx
函数用于生成具有同步、参考、报头、导频和数据信号的OFDM发射机波形。这个函数返回txWaveform
,txGrid
,txDiagnostics
使用发射机参数txParam
.这个函数在内部调用这些单独的函数。
generateOFDMSyncSignal
—生成同步信号SyncSignal
.该函数使用根索引为25、长度为62的Zadoff-Chu序列。
generateOFDMRefSignal
-该函数产生参考信号refSignal
对于给定的FFT长度fftLen
.该函数使用bpsk调制的伪随机二进制序列。
generateOFDMPilotSignal
-该函数生成导频信号飞行员
.该函数使用bpsk调制的伪随机二进制序列。
OFDMSymbolModulate
—根据指定的调制方案BPSK、QPSK、16QAM、64QAM,将输入位调制成复杂的调制符号。
绘制发射机波形的资源网格。图中显示了每个资源网格元素的大小变化。
plotResourceGrid (txGrid);
HDL AWGN MATLAB参考
本节介绍HDL AWGN的MATLAB参考。
这个MATLAB参考是用来评估HDL OFDM发射和接收算法的性能。HDL AWGN MATLAB参考通过接受以分贝(dB)为单位的信噪比(SNR)和种子集生成AWGN。有关更多细节,请参见AWGN生成器的HDL实现.生成的AWGN被添加到HDL OFDM发射机输出中。
FFTLen = 128;CPLen = 32;usedSubCarr = 72;在128个子载波中,72个子载波加载了数据SNRdB = 30;SNRdBSimInput = SNRdB *的(长度(txWaveform) + 633, 1);种子surng1 = [121 719 511];tasurng1的种子种子surng2 = [2343 323 833];tasurng2的种子txScaleFactor = FFTLen /√(usedSubCarr);awgnNoise = whdlexamples.hdlawgn (SNRdBSimInput seedsURNG1 seedsURNG2);rx波形= tx波形+ (1/txScaleFactor)*awgnNoise(634:end);流('\n在%d dB处应用AWGN通道…\n', SNRdB);
应用AWGN通道在30分贝…
HDL OFDM接收机MATLAB参考
本节介绍了HDL OFDM接收机的MATLAB参考。
这个MATLAB参考包括时间同步,CFO估计和校正,OFDM解调,报头恢复,CPE估计和校正,数据恢复。
的whdlexamples。OFDMRx
函数接受rxWaveform
,通过AWGN信道的传输波形。
的whdlexamples。OFDMRx
函数返回已解码的位rxBits
以及一系列的结构,rxDiagnostics
,由这八个字段组成。
estCFO
-估计载波频率偏移rxConstellationHeader
-解调头星座符号rxConstellationData
-解调数据星座符号softLLR
-解调软LLR比特decodedCodeRateIndex
-从报头解码的码率索引decodedModOrder
-解码来自头部的调制命令headerCRCErrorFlag
—头部CRC状态dataCRCErrorFlag
—数据CRC状态
OFDMRx
的whdlexamples。OFDMRx
函数用于解调和解码接收到的数据rxWaveform
.这个函数在内部调用这些单独的函数。
OFDMFrequencyOffset
—该函数基于循环前缀(CP)技术估计载波频偏。接收到的时域波形的循环前缀部分与估计频率偏移有关。
OFDMFrequencyCorrect
—该函数使用估计的频率偏移量校正接收波形上的载波频率偏移量。
OFDMFrameSync
-该函数通过使用参考信号执行相关来同步接收到的波形。这一步在解调接收波形时减少了码间干扰。
OFDMDemodulation
—该函数将时域波形转换为频域波形,以便进一步解码。的对象dsp。HDLFFT
用于接收器的HDL实现。
OFDMChannelEstimation
-该函数使用两个参考信号对信道进行估计。它采用最小二乘估计技术。LS估计平均,以提高信道估计精度。
OFDMChannelEqualization
-该函数使用估计的通道执行零强制(ZF)均衡。然后,接收到的无通道的波形用于报头恢复和数据恢复。
OFDMHeaderRecovery
—该函数通过符号解调、解交织和维特比解码来恢复报头信息。CRC状态表示报头信息恢复成功或失败。报头恢复CRC状态作为接收器的输出来指示帧丢失或恢复。当CRC检查失败时,头部CRC状态为1
.否则,它是0
.
OFDMDataRecovery
-该函数执行符号解调、解交织、解刺、维特比解码和解乱。该函数仅在头部CRC检查通过时处理数据。对解码后的数据进行解码器后,对恢复的数据位进行CRC检查,以指示数据包是否有错误。当CRC检查失败时,头部CRC状态为1
.否则,它是0
.
流(\n接收过程开始…\n');[rxDataBits, rxDiagnostics] = whdlexamples.OFDMRx (rxWaveform);流(“\ n接待完成\ n \ n”);绘制标头和数据的星座散点图(rxDiagnostics.rxConstellationHeader (:) 1 0,“b”。)标题(“头星座”) axisObj = gca;axisObj。XColor =' w ';axisObj。YColor =' w ';散点图(rxDiagnostics.rxConstellationData (:) 1 0,“b”。)标题(“数据星座”);甘氨胆酸axisObj =;axisObj。XColor =' w ';axisObj。YColor =' w ';
接收过程开始……估计载波频率偏移…前四帧用于载波频偏估计。估计载波频偏为-1.913549e-01 Hz。发现和处理框架5 ------------------------------------------ 头CRC通过调制:16 qam, codeRate = 1/2和FFT长度= 128 CRC传递数据解码完成 ------------------------------------------ 接收完成
用MATLAB参考软件验证Simulink模型
在本节中,以定点实现的Simulink HDL OFDM发射器、AWGN生成器和Simulink HDL OFDM接收器与以浮点实现的等效MATLAB HDL参考模型进行比较。
Simulink模型由OFDM发射器组成,该发射器为用户定义的调制顺序和码率生成时域波形。时域波形然后通过AWGN通道,引入所需信噪比(dB)的AWGN噪声。然后利用OFDM Receiver进行信息位的解调和解码。在每个阶段用MATLAB参考软件对Simulink模型的输出结果进行验证。
开放HDLOFDMTxRx;sim卡HDLOFDMTxRx;
启动串行模型参考仿真构建whdlOFDMRx的模型参考仿真目标是最新的。whdlOFDMTx的模型参考模拟目标是最新的。构建总结0的2个模型(2个模型已经是最新的)构建持续时间:0h 0m 1.576s
用MATLAB验证Simulink HDL OFDM发射机
在本节中,绘制出HDL OFDM发射机的实部和虚部的MATLAB参考函数输出txWaveform
并与输出比较高密度脂蛋白OFDM发射机块。
matlabTxWaveform = txWaveform;simulinkTxWaveform = simTxOut;图;情节(真实(matlabTxWaveform),“博”)举行在情节(真实(simulinkTxWaveform(1:长度(matlabTxWaveform))),- r。)传说(MATLAB Tx波形的,仿真软件Tx波形的);标题(MATLAB Tx与Simulink Tx(实部)的比较);ylim ([-0.2 - 0.2]);包含(“时域样本”);ylabel (“振幅”);图;情节(图像放大(matlabTxWaveform),“博”)举行在情节(图像放大(simulinkTxWaveform(1:长度(matlabTxWaveform))),- r。)传说(MATLAB Tx波形的,仿真软件Tx波形的);标题(“MATLAB Tx与Simulink Tx(虚部)的比较”);ylim ([-0.2 - 0.2]);包含(“时域样本”);ylabel (“振幅”);
用MATLAB的HDL AWGN验证Simulink HDL AWGN Generator
在本节中,将绘制MATLAB HDL AWGN的实部和虚部与Simulink AWGN Generator块的输出进行比较。
matlabChannelOut = rxWaveform;simulinkChannelOut = simChannelOut;图;情节(真实(matlabChannelOut),“博”);持有在;情节(真实(simulinkChannelOut(1:长度(matlabChannelOut))),- r。);传奇(MATLAB通道输出的,仿真软件通道输出的);标题(MATLAB通道与Simulink通道(实部)的比较);ylim ([-0.2 - 0.2]);包含(“时域样本”);ylabel (“振幅”);图;情节(图像放大(matlabChannelOut),“博”);持有在;情节(图像放大(simulinkChannelOut(1:长度(matlabChannelOut))),- r。);传奇(MATLAB通道输出的,仿真软件通道输出的);标题(《MATLAB通道与Simulink通道(虚部)的比较》);ylim ([-0.2 - 0.2]);包含(“时域样本”);ylabel (“振幅”);
用MATLAB HDL OFDM Receiver验证Simulink HDL OFDM Receiver
在本节中,绘制MATLAB接收机的解码位与Simulink接收机的解码位的比较图。
matlabRxOut = rxDataBits;simulinkRxOut = simRxDataBits;图;情节(rxDataBits“博”);持有在;情节(simulinkRxOut(1:长度(rxDataBits)),- r。);传奇(“MATLAB Rx位”,“仿真软件的处方位”);标题(“MATLAB和Simulink解码比特”);ylim ([-0.25 - 1.25]);包含(“时域样本”);ylabel (“振幅”);