MATLAB-QPSK-AWGN误码率仿真

%****************************************************************
% 内容概述:未编码传输AWGN信道测试
%          每帧的输入是相同的,(不是每帧都不一样,这样可以大幅降低计算量)
%          在帧比特足够多的情况下,应该可以保证随机性(未理论证实)
%          注意两点,1、EsN0与EbN0的区别 2、复高斯噪声的功率
%****************************************************************


clear;
clc;
close all;
M = 4;%4QAM
K = log2(M);

EbN0dB = 0 : 0.1: 10;
EbNoLinear = 10.^(EbN0dB.*0.1);
EsN0dB = EbN0dB + 10*log10(K);
EsNoLinear = 10.^(EsN0dB.*0.1);
num_block_size = 1000000;                       %测试的块尺寸,指包含尾比特的软输入系统系列长度
ber=zeros(1,length(EsN0dB));                    %初始化错误比特率

x = randi([0 M-1],1,num_block_size);
txbit = dec2bin(x);
y = qammod(x,M,'gray','UnitAveragePower',true,'PlotConstellation',true);

for nEN=1:length(EbN0dB)
    errs=0;
    sigma=1/sqrt(2*EsNoLinear(nEN));
    noise = randn(1,num_block_size)+j*randn(1,num_block_size); %噪声
    awgn_in=y + sigma*noise;            %信息噪声叠加

    rxSymb = qamdemod(awgn_in,M,'gray','UnitAveragePower',true);
    rxbit  = dec2bin(rxSymb);
    errs   = sum(rxbit~=txbit,'all');%当前点错误bit数
    ber(1,nEN)= errs/(K * num_block_size);%误比特率
    fprintf('snr:%1.2f;误码率:%8.4e;\n',...
        EbN0dB(nEN),ber(1,nEN));
end
figure; 
semilogy(EbN0dB,ber(1,:));
ylabel('Bit Error Rate');
%--------------------- Theory ----------------------

berTheory1 = -1.5 * erfc(sqrt(EbNoLinear));
berTheory2 = berawgn(EbN0dB,'QAM',4,'nodiff');
grid on;hold on;
semilogy(EbN0dB,berTheory1,'r--');semilogy(EbN0dB,berTheory2,'g*');
xlabel('E_b/N_0 (dB)'); 
ylabel('Bit Error Rate');
title('未编码信息通过AWGN信道性能图 Vs QPSK Theoretical Error Rates' );
legend('Simulation','Theory1','Theory2')

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值