主要内容

QPSK和Matlab系统对象的OFDM

该示例显示了如何模拟其中信号是第一个QPSK的基本通信系统,然后经受正交频分复用。然后在解复用和解调之前通过添加白色高斯噪声通道的信号。最后,计算比特错误的数量。该示例展示了MATLAB®系统对象™的使用。

设置仿真参数。

m = 4;%调制字母表k=log2(M);%位/符号numsc = 128;%数量的OFDM子载波cplen = 32;%OFDM循环前缀长度maxbiterrors = 100;%最大比特错误数maxnumbits = 1E7;传输的最大比特数

构造模拟所需的系统对象:QPSK调制器、QPSK解调器、OFDM调制器、OFDM解调器、AWGN信道和错误率计算器。使用名称-值对设置对象属性。

设置QPSK调制器和解调器,使其接受二进制输入。

qpskmod = comm.qpskmodulator(“比输入”,真的);qpskdemod = comm.qpskdemodulator('bitoup',真的);

根据仿真参数设置OFDM调制器和解调器对。

OFDMMOD = COMM.OFDMMODULATOR('fftlength',numsc,'cyclicprefixlength',cplen);OFDMDEMOD = COMM.OFDMDEMOMOMOMOULATOR('fftlength',numsc,'cyclicprefixlength',cplen);

设定噪声法AWGN通道对象的属性方差并定义varianceSource.属性,以便可以从输入端口设置噪声功率。

信道=通信AWGN信道('noisemethod''方差'......“VarianceSource”'输入端口');

设定resetInputport.财产符合事实的在模拟期间启用错误率计算器要重置。

errorrate = comm.errorrate(“重置输入端口”,真的);

使用信息功能的功能奥德蒙德对象确定OFDM调制器的输入和输出尺寸。

OFDMDIMS = INFO(OFDMMOD)
OFDMDIMS =结构与字段:DataInputSize:[117 1]OutputSize:[160 1]

确定数据子载波的数量Ofdmdims.结构变量。

numdc = ofdmdims.datainputsize(1)
numdc = 117

从数据子载波的数量和每个符号的比特数确定OFDM帧大小(以位)。

frameSize=[k*numDC 1];

基于所需Eb/No范围、每个符号的位数以及数据子载波数与子载波总数的比率设置SNR向量。

EBNOVEC =(0:10)';SNRVEC = EBNOVEC + 10 * log10(k)+ 10 * log10(numdc / numsc);

初始化BER和错误统计数组。

berVec=零(长度(EbNoVec),3);errorStats=零(1,3);

模拟EB / NO值范围内的通信链路。对于每个EB / NO值,模拟运行直到或maxbiterrors.被记录或传输的比特总数超过maxnumbits.

为了m=1:长度(EbNoVec)snr=snrVec(m);虽然errorstats(2)<= maxbiterrors && errorstats(3)<= maxnumbits datain = randi([0,1],帧质化);%生成二进制数据QPSKTX = QPSKMOD(数据);%应用QPSK调制txsig = OFDMMOD(QPSKTX);%应用OFDM调制PowerDB = 10 * log10(var(txsig));%计算TX信号功率Noisevar = 10. ^(0.1 *(PowerDB-SNR));%计算噪声方差rxsig = channel(txsig,noisevar);%通过嘈杂的频道传递信号QPSKRX = OFDMDEMOD(RXSIG);%申请OFDM解调dataout = qpskdemod(qpskrx);%应用QPSK解调errorstats = errorrate(数据,数据,0);%收集错误统计信息结尾Bervec(m,:) = errorstats;%保存BER数据errorstats = errorrate(日期,dataout,1);%重置错误率计算器结尾

使用Berawgn.函数用于确定QPSK系统的理论误码率。

Bertheory = Berawgn(Ebnovec,'psk',m,'nondiff');

绘制相同图表上的理论和模拟数据以比较结果。

图符号学(EbNoVec,berVec(:,1),'*')持有在…上Semilogy(Ebnovec,Bertheory)传奇('模拟'“理论”“位置”'最好的事物')xlabel('EB / NO(DB)')伊拉贝尔(“误码率”) 网格在…上抓住离开

图包含轴对象。轴对象包含2个类型的类型。这些对象代表仿真,理论。

观察到模拟数据和理论数据之间有很好的一致性。