该示例显示了如何模拟其中信号是第一个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('bitInpul',真的);qpskdemod = comm.qpskdemodulator('bitoup',真的);
根据仿真参数设置OFDM调制器和解调器对。
OFDMMOD = COMM.OFDMMODULATOR('fftlength',numsc,'cyclicprefixlength',cplen);OFDMDEMOD = COMM.OFDMDEMOMOMOMOULATOR('fftlength',numsc,'cyclicprefixlength',cplen);
设定noisemethod.
AWGN通道对象的属性方差
并定义varianceSource.
属性使噪声功率可以从输入端口设置。
channel = comm.awgnchannel('noisemethod'那'方差'那......'varianceource'那'输入端口');
设定resetInputport.
财产真的
在模拟期间启用错误率计算器要重置。
errorrate = comm.errorrate('resetInputport',真的);
使用信息
功能的功能OFDMMOD.
对象确定OFDM调制器的输入和输出尺寸。
OFDMDIMS = INFO(OFDMMOD)
OFDMDIMS =结构与字段:DataInputSize:[117 1]输出:[160 1]
确定数据子载波的数量Ofdmdims.
结构变量。
numdc = ofdmdims.datainputsize(1)
numdc = 117
从数据子载波的数量和每个符号的比特数确定OFDM帧大小(以位)。
框架= [k * numdc 1];
根据所需的EB / No范围,每个符号的比特数以及数据子载波的数量与子载波总数的比率设置SNR向量。
EBNOVEC =(0:10)';SNRVEC = EBNOVEC + 10 * log10(k)+ 10 * log10(numdc / numsc);
初始化BER和错误统计数组。
Bervec = Zeros(长度(EBNOVEC),3);errorstats = zeros(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系统的理论BER的功能。
Bertheory = Berawgn(Ebnovec,'psk',m,'nondiff');
绘制相同图表上的理论和模拟数据以比较结果。
图半径(EBNOVEC,Bervec(:,1),'*') 抓住上Semilogy(Ebnovec,Bertheory)传奇('模拟'那'理论'那'地点'那'最好的')xlabel('EB / NO(DB)')ylabel('误码率') 网格上抓住离开
观察模拟和理论数据之间存在良好的一致性。