%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 本程序用于仿真QPSK,16QAM,通过AWGN信道的BER随SNR的变化规律。
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
clc
M_4psk = 4; % 4psk的进制数
k_4psk = log2(M_4psk); % 4psk的一个符号包含的比特数
M_16qam = 16; % 16qam的进制数
k_16qam = log2(M_16qam); % 16qam一个符号包含的比特数
NumSymbols = 10^6; % 定义要发送的比特数
rng default % 使用默认的随机数生成器
dataIn = randi([0 1],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调制以及格雷码编码
EbNo = [-2:2:15]; % 设置SNR范围
berG_4psk = zeros(1,length(EbNo)); % 定义4psk误码率数组
berG_16qam = zeros(1,length(EbNo)); % 定义16qam误码率数组
for index = 1:length(EbNo)
% 计算以db表示的SNR
snr_4psk = EbNo(index) + 10*log10(k_4psk);
snr_16qam = EbNo(index) + 10*log10(k_16qam);
%信号通过AWGN信道
receivedSignalG_4psk = awgn(dataModG_4psk,snr_4psk,'measured');
receivedSignalG_16qam = awgn(dataModG_16qam,snr_16qam,'measured');
%解调以及格雷码解码
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); % 十进制转二进制,准备计算BER
dataOutG_4psk = dataOutMatrixG_4psk(:); % 将数据转化成一维向量
dataOutMatrixG_16qam = de2bi(dataSymbolsOutG_16qam,k_16qam); % 十进制转二进制,准备计算BER
dataOutG_16qam = dataOutMatrixG_16qam(:); % 将数据转化成一维向量
[numErrorsG_4psk,berG_4psk(index)] =
biterr(dataIn,dataOutG_4psk); % 计算4psk误码率
[numErrorsG_16qam,berG_16qam(index)] =
biterr(dataIn,dataOutG_16qam); % 计算16qam误码率
end
%计算信号通过AWGN信道的理论误比特率
==========================================
TheoryBER_4psk = berawgn(EbNo,'psk',4,'nondiff'); % 计算4psk通过AWGN
理论误比特率
TheoryBER_16qam = berawgn(EbNo,'qam',16); % 计算16qam通过AWGN理论误比特率
%==========================================================================
%画图
semilogy(EbNo,TheoryBER_4psk,'b-',EbNo,TheoryBER_16qam,'r-'); % 画出理论BER曲线
hold on;
semilogy(EbNo,berG_4psk,'b*',EbNo,berG_16qam,'r*'); % 画出仿真BER曲线
grid on;
xlabel('Eb/N0 (dB)'); ylabel('BER'); % 横纵坐标
legend('QPSK理论BER','16QAM理论BER','QPSK仿真BER','16QAM仿真BER'); % 图例
title('QPSK/16QAM 通过AWGN信道'); % 题目
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务