您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > QPSK和16QAM信号通过瑞利频率选择信道的误比特率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%本程序用于仿真QPSK,16QAM,通过瑞利多径频率选择信道的BER随SNR的变化规律%多径信道可分辨路径条数可在47行调整,信道功率剖面呈指数衰减%接收均衡算法:匹配滤波器(MF)ZFLMMSE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clearall;clcM_4psk=4;%4psk的进制数k_4psk=log2(M_4psk);%4psk的一个符号包含的比特数M_16qam=16;%16qam的进制数k_16qam=log2(M_16qam);%16qam一个符号包含的比特数NumIter=10^3;%定义一共要发送次数NumSymbols=10^2;%定义每次发送的比特数rngdefault%使用默认的随机数生成器EbNo=-2:1:12;%设置SNR范围%定义BER空数组ber_4psk_temp=zeros(1,3*length(EbNo));%3倍于信噪比数组元素个数是因为3部分分别用于存MF、ZF、MMSE的均衡BERber_4psk=zeros(1,3*length(EbNo));ber_16qam_temp=zeros(1,3*length(EbNo));ber_16qam=zeros(1,3*length(EbNo));fori=1:NumIterdataIn=randi([01],NumSymbols,1);%生成二进制发送数据dataInMatrix_4psk=reshape(dataIn,length(dataIn)/2,2);%将发送二进制数据整理成两个一行,准备进行进制转换dataSymbolsIn_4psk=bi2de(dataInMatrix_4psk);%转换成十进制dataInMatrix_16qam=reshape(dataIn,length(dataIn)/4,4);%将发送二进制数据整理成四个一行,准备进行进制转换dataSymbolsIn_16qam=bi2de(dataInMatrix_16qam);%转换成十进制dataModG_4psk=pskmod(dataSymbolsIn_4psk,M_4psk,0,'gray');%4psk调制以及格雷码编码dataModG_16qam=qammod(dataSymbolsIn_16qam,M_16qam,0,'gray');%16qam调制以及格雷码编码%生成频率选择衰落信道矩阵decay_para=1.2;%信道衰减参量no_multipath=3;%可分辨多径数量tau=0:no_multipath-1;%各路径延迟PDP=exp(-decay_para*tau);%功率延迟剖面PDP_amp=sqrt(PDP);%功率幅度Rayleigh_amp=(1/sqrt(2))*(randn(1,no_multipath)+1i*randn(1,no_multipath));%生成瑞利信道imp_res_unnorm=Rayleigh_amp.*PDP_amp;%生成未归一化的信道冲击响应ch_power=sum(abs(imp_res_unnorm).^2);%计算各径功率imp_res=imp_res_unnorm/sqrt(ch_power);%归一化%生成4PSK的瑞利频选信道toeplitz阵-------------------------------------------numLine=length(dataModG_4psk);%toeplitz阵的列数numRow=numLine-1;%toeplitz阵的行数a=zeros(numRow,1);%生成一个列向量为调用toeplitz()函数做准备a(1)=imp_res(1);%将列向量的第一个元素赋值为信道冲击相应的第一个值b=zeros(1,numLine);%生成一个行向量为调用toeplitz()函数做准备b(1)=a(1);%保证列向量的第一个元素与行向量的第一个元素相同,以免调用时出错forii=2:length(imp_res)%将信道冲击响应的其它元素依次赋值给行向量的第二个及以后的元素b(ii)=imp_res(ii);endH_4psk=toeplitz(a,b);%生成信道响应的toeplitz阵%--------------------------------------------------------------------------%生成16QAM的瑞利频选信道toeplitz阵------------------------------------------numLine=length(dataModG_16qam);numRow=numLine-1;a=zeros(numRow,1);a(1)=imp_res(1);b=zeros(1,numLine);b(1)=a(1);forii=2:length(imp_res)b(ii)=imp_res(ii);endH_16qam=toeplitz(a,b);%--------------------------------------------------------------------------forindex=1:length(EbNo)%换算线性信噪比snr_4psk=EbNo(index)+10*log10(k_4psk);snr_16qam=EbNo(index)+10*log10(k_16qam);%将信道影响施加在已调信号上dataModG_4psk_chan=H_4psk*dataModG_4psk;dataModG_16qam_chan=H_16qam*dataModG_16qam;%信号通过AWGN信道dataModG_4psk_chan_noise=awgn(dataModG_4psk_chan,snr_4psk,'measured');dataModG_16qam_chan_noise=awgn(dataModG_16qam_chan,snr_16qam,'measured');forj=1:3%均衡方式选取---------------------------------------------------------------ifj==1%匹配滤波W_4psk=H_4psk';W_16qam=H_16qam';endifj==2%ZF均衡器系数W_4psk=pinv(H_4psk);W_16qam=pinv(H_16qam);endifj==3%LMMSE均衡器系数H_4psk_size=size(H_4psk);%返回信道矩阵的维度(实际上只会用到行数),为后面生成的单位阵做准备H_16qam_size=size(H_16qam);W_4psk=H_4psk'*inv(H_4psk*H_4psk'+eye(H_4psk_size(1))*(1/snr_4psk));W_16qam=H_16qam'*inv(H_16qam*H_16qam'+eye(H_16qam_size(1))*(1/snr_16qam));end%--------------------------------------------------------------------------%对接收信号进行均衡receivedSignalG_4psk=W_4psk*dataModG_4psk_chan_noise;receivedSignalG_16qam=W_16qam*dataModG_16qam_chan_noise;%解调以及格雷码解码dataSymbolsOutG_4psk=pskdemod(receivedSignalG_4psk,M_4psk,0,'gray');dataSymbolsOutG_16qam=qamdemod(receivedSignalG_16qam,M_16qam,0,'gray');dataOutMatrixG_4psk=de2bi(dataSymbolsOutG_4psk,k_4psk);%十进制转二进制,准备计算BERdataOutG_4psk=dataOutMatrixG_4psk(:);%将数据转化成一维向量dataOutMatrixG_16qam=de2bi(dataSymbolsOutG_16qam,k_16qam);%十进制转二进制,准备计算BERdataOutG_16qam=dataOutMatrixG_16qam(:);%将数据转化成一维向量%计算当前SNR情况下下的BER[numErrorsG_4psk,ber_4psk_temp(index+((j-1)*length(EbNo)))]=biterr(dataIn,dataOutG_4psk);[numErrorsG_16qam,ber_16qam_temp(index+((j-1)*length(EbNo)))]=biterr(dataIn,dataOutG_16qam);endend%计算本次发送的比特流在不同SNR下的BERber_4psk=ber_4psk+ber_4psk_temp;ber_16qam=ber_16qam+ber_16qam_temp;end%计算所有发送数据的平均BERber_4psk=ber_4psk/NumIter;ber_16qam=ber_16qam/NumIter;%画图fori=1:2ifi==1ber=ber_4psk;elseber=ber_16qam;endfigure%画出匹配滤波均衡仿真BER曲线semilogy(EbNo,ber(1:length(EbNo)),'b-*');holdon;%画出ZF均衡仿真BER曲线semilogy(EbNo,ber(1+length(EbNo):2*length(EbNo)),'c-o');holdon;%画出LMMSE均衡仿真BER曲线semilogy(EbNo,ber(1+2*length(EbNo):3*length(EbNo)),'r-s');%画出仿真BER曲线gridon;legend('MF','ZF','LMMSE');xlabel('Eb/N0(dB)');ylabel('BER');%横纵坐标ifi==1title('QPSK通过瑞利频率选择信道');%题目elsetitle('16QAM通过瑞利频率选择信道');%题目endend
本文标题:QPSK和16QAM信号通过瑞利频率选择信道的误比特率
链接地址:https://www.777doc.com/doc-3668377 .html