正交振幅調制(QAM)
- 基本原理
-
- 源代碼
-
- 仿真結果
基本原理
見正交振幅調制(QAM)的星座圖、誤碼率(一)
源代碼
1、誤碼率曲線
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 16QAM 誤碼率計算
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
close all;
clear all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 參數設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M =16; % 16進制
k = log2(M);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信源
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count=1e6;
x = randi([0 M-1],1,count);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 調制
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y = qammod(x,M);
scatterplot(y);
title('16QAM調制信号星座圖');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信道(加入高斯白噪聲)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SNR=[-10:0.5:20]; % 信噪比
for m=1:length(SNR)
y_noise = awgn(y,SNR(m)); % 加入高斯白噪聲
y1=qamdemod(y_noise,M); % 解調
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 誤碼率計算
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sum_error(m)=0;
for n=1:count
if y1(n)~=x(n)
sum_error(m)=sum_error(m)+1;
end
end
mean_error(m)=sum_error(m)/count;
end
figure(1)
semilogy(SNR,mean_error); grid on; %繪制半對數圖
xlabel('SNR/dB');ylabel('誤比特率');
title('16QAM信号的誤比特率曲線');
2、蒙特卡洛取誤碼率的平均
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 16QAM 誤碼率計算+蒙特卡洛
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
close all;
clear all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 參數設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M =16; % 16進制
k = log2(M);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信源
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count=1e5; % 碼元個數
x = randi([0 M-1],1,count);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 調制
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y = qammod(x,M);
scatterplot(y);
title('16QAM調制信号星座圖');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信道(加入高斯白噪聲)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SNR=[-10:0.5:20]; % 信噪比
for m=1:length(SNR)
s_error=zeros(1,length(SNR));
N=100; % 蒙特卡洛次數
for p=1:N
y_noise = awgn(y,SNR(m)); % 加入高斯白噪聲
y1=qamdemod(y_noise,M); % 解調
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 誤碼率計算
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sum_error(m)=0;
for n=1:count
if y1(n)~=x(n)
sum_error(m)=sum_error(m)+1;
end
end
mean_error(m)=sum_error(m)/count;
s_error(m)=s_error(m)+mean_error(m);% 蒙特卡洛次數下的總誤碼率
end
m_error(m)=s_error(m)/N;
end
figure(1)
semilogy(SNR,m_error); grid on; %繪制半對數圖
xlabel('SNR/dB');ylabel('誤比特率');
title('16QAM信号的誤比特率曲線');