clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
M = 16; % M-ary
k = log2(M); % bits per symbol
N_Bit_frame=240;
N_Symbol=N_Bit_frame/k; % Number of symbol per frame
N_Error_Th=300;
Eb_N0_dB = [0:12];
Es_N0_dB = Eb_N0_dB + 10*log10(k);
simBer_AWGN=zeros(size(Eb_N0_dB));
simBer_Rayleigh=zeros(size(Eb_N0_dB));
for ii = 1:length(Eb_N0_dB)
%% AWGN Simulation
N_Tx_Bit=0;
N_Error_Bit=0;
fprintf('AWGN %d dB Simulation... \n', Eb_N0_dB(ii));
while (N_Error_Bit <= N_Error_Th) % Error 가 300 보다 작은 경우 까지만 시뮬레이션 한다
% for nnnn=1:1000
bitSeq=randi([0,1],1,N_Bit_frame); % Bit generation
QamSymbol=QAM16_mapper(bitSeq); % Power Normalized 16 QAM mapping
% AWGN
n = 1/sqrt(2)*[randn(1,N_Symbol) + j*randn(1,N_Symbol)]; % White Guassian Noise
y = QamSymbol + 10^(-Es_N0_dB(ii)/20)*n; % Additive White Gaussian Noise
% Receiver
DecisionSymbol=QAM16_slicer(y); % Symbol Decision
DecisionBit=QAM16_demapper(DecisionSymbol); % Symbol to bit demapping
% Bit Error Calculation
N_error_frame=sum(bitSeq~=DecisionBit); % Current Error
N_Error_Bit=N_Error_Bit+N_error_frame; % Total Error bits
N_Tx_Bit=N_Tx_Bit+N_Bit_frame; % Total Tx bits
end
simBer_AWGN(ii)=N_Error_Bit./N_Tx_Bit; % Simulation BER
%% Flat Fading Simulation
N_Tx_Bit=0;
N_Error_Bit=0;
fprintf('Fading %d dB Simulation... \n', Eb_N0_dB(ii));
while (N_Error_Bit <= N_Error_Th) % Error 가 300 보다 작은 경우 까지만 시뮬레이션 한다
bitSeq=randi([0,1],1,N_Bit_frame); % Bit generation
QamSymbol=QAM16_mapper(bitSeq); % Power Normalized 16 QAM mapping
% Flat fading & AWGN
h = 1/sqrt(2)*[randn(1,N_Symbol) + j*randn(1,N_Symbol)]; % flat Rayleigh fading
n = 1/sqrt(2)*[randn(1,N_Symbol) + j*randn(1,N_Symbol)]; % White Guassian Noise
y = QamSymbol.*h + 10^(-Es_N0_dB(ii)/20)*n; % flat Rayleigh fading & Additive White Gaussian Noise
% Receiver
y1=y.*conj(h)./(abs(h).^2); % Fading Channel Receiver
DecisionSymbol=QAM16_slicer(y1); % Symbol Decision
DecisionBit=QAM16_demapper(DecisionSymbol); % Symbol to bit demapping
% Bit Error Calculation
N_error_frame=sum(bitSeq~=DecisionBit); % Current Error
N_Error_Bit=N_Error_Bit+N_error_frame; % Total Error bits
N_Tx_Bit=N_Tx_Bit+N_Bit_frame; % Total Tx bits
end
simBer_Rayleigh(ii)=N_Error_Bit./N_Tx_Bit; % Simulation BER
end
%%
theoryBer = (1/k)*3/2*erfc(sqrt(k*0.1*(10.^(Eb_N0_dB/10)))); % Theoretical BER
close all; figure
semilogy(Eb_N0_dB,theoryBer,'bs-','LineWidth',2);
hold on
semilogy(Eb_N0_dB,simBer_AWGN,'mx-','LineWidth',2);
semilogy(Eb_N0_dB,simBer_Rayleigh,'rp-','LineWidth',2);
axis([0 13 10^-4 1])
grid on
legend('theory', 'simulation','fading');
xlabel('Eb/No, dB')
ylabel('Bit Error Rate')
title('Bit error probability curve for 16-QAM modulation')
没有合适的资源?快使用搜索试试~ 我知道了~
matlab-16QAM的AWGN信道与平坦衰落信道的误码率星座图仿真-源码
共6个文件
m:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 196 浏览量
2021-09-30
21:22:13
上传
评论
收藏 5KB RAR 举报
温馨提示
matlab_16QAM的AWGN信道与平坦衰落信道的误码率星座图仿真_源码
资源推荐
资源详情
资源评论
收起资源包目录
matlab_16QAM的AWGN信道与平坦衰落信道的误码率星座图仿真_源码.rar (6个子文件)
matlab_16QAM的AWGN信道与平坦衰落信道的误码率星座图仿真_源码
Runme_Diversity_Symbol.m 2KB
Runme_Rayleigh_BER.m 3KB
Runme_Diversity_BER.m 3KB
func
QAM16_mapper.m 352B
QAM16_slicer.m 709B
QAM16_demapper.m 377B
共 6 条
- 1
资源评论
mYlEaVeiSmVp
- 粉丝: 1924
- 资源: 19万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功