16QAM調製解調仿真(matlab,詳細介紹仿真方案的設計、結果及結論、完整代碼及註釋)

一、仿真要求

1.用基帶等效的方式仿真16-QAM在AWGN信道下的誤碼率和誤比特率性能,並與理論值相比較;
2.高階64QAM與低階16QAM的性能比較。

二、仿真方案詳細設計

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、仿真結果及結論

  • 仿真結果
    16QAM的星座點圖
    在這裏插入圖片描述
    64QAM的星座點圖
    在這裏插入圖片描述
    16QAM加噪聲後的星座點圖
    在這裏插入圖片描述
    64QAM加噪聲後的星座點圖
    在這裏插入圖片描述
    16-QAM載波調製信號在AWGN信道下的誤比特率性能比較
    在這裏插入圖片描述
  • 結論:由圖可知,16QAM的誤符號率和仿真理論誤符號率完全擬合,16QAM的誤比特率在性躁比越來越高情況下擬合情況和仿真理論誤比特率越來越接近。

16和64QAM調製信號在AWGN信道的性能比較
在這裏插入圖片描述

  • 結論:由圖可知,在同一個性躁比條件下,64QAM比16QAM的誤碼率更高,因此可以得出普遍的結論,階數越高,誤碼率越高。

四、仿真代碼

clc;clear all;close all;
nsymbol=100000;%表示一共有多少個符號,這裏定義100000個符號
M=16;%M表示QAM調製的階數,表示16QAM,16QAM採用格雷映射(所有星座點圖均採用格雷映射)
N=64;
graycode=[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];%格雷映射編碼規則
graycode1=[0 1 3 2 6 7 5 4 8 9 11 10 14 15 13 12 24 25 27 26 30 31 29 28 16 17 19 18 22 23 21 20 48 49 51 50 54 55 53 52 56 57 59 58 62 63 61 60 40 41 43 42 46 47 45 44 32 33 35 34 38 39 37 36];%格雷映射十進制的表示
EsN0=5:20;%信噪比範圍
snr1=10.^(EsN0/10);%將db轉換爲線性值
msg=randi([0,M-1],1,nsymbol);%0到15之間隨機產生一個數,數的個數爲:1乘nsymbol,得到原始數據
msg1=graycode(msg+1);%對數據進行格雷映射
msgmod=qammod(msg1,M);%調用matlab中的qammod函數,16QAM調製方式的調用(輸入0到15的數,M表示QAM調製的階數)得到調製後符號

scatterplot(msgmod);%調用matlab中的scatterplot函數,畫星座點圖
spow=norm(msgmod).^2/nsymbol;%取a+bj的模.^2得到功率除整個符號得到每個符號的平均功率
%64QAM
nsg=randi([0,N-1],1,nsymbol);
nsg1=graycode1(nsg+1);
nsgmod=qammod(nsg1,N);
scatterplot(nsgmod);%調用matlab中的scatterplot函數,畫星座點圖
spow1=norm(nsgmod).^2/nsymbol;

for i=1:length(EsN0)
    sigma=sqrt(spow/(2*snr1(i)));%16QAM根據符號功率求出噪聲的功率
    sigma1=sqrt(spow1/(2*snr1(i)));%64QAM根據符號功率求出噪聲的功率
    rx=msgmod+sigma*(randn(1,length(msgmod))+1i*randn(1,length(msgmod)));%16QAM混入高斯加性白噪聲
    rx1=nsgmod+sigma*(randn(1,length(nsgmod))+1i*randn(1,length(nsgmod)));%64QAM混入高斯加性白噪聲
    y=qamdemod(rx,M);%16QAM的解調
   y1=qamdemod(rx1,N);%64QAM的解調
   decmsg=graycode(y+1);%16QAM接收端格雷逆映射,返回譯碼出來的信息,十進制
   decnsg=graycode1(y1+1);%64QAM接收端格雷逆映射
   [err1,ber(i)]=biterr(msg,decmsg,log2(M));%一個符號四個比特,比較發送端信號msg和解調信號decmsg轉換爲二進制,ber(i)錯誤的比特率
   [err2,ser(i)]=symerr(msg,decmsg);%16QAM求實際誤碼率
   [err1,ber1(i)]=biterr(nsg,decnsg,log2(N));
   [err2,ser1(i)]=symerr(nsg,decnsg);%64QAM求實際誤碼率
end
%16QAM
scatterplot(rx);%調用matlab中的scatterplot函數,畫rx星座點圖
p = 2*(1-1/sqrt(M))*qfunc(sqrt(3*snr1/(M-1)));
ser_theory=1-(1-p).^2;%16QAM理論誤碼率
ber_theory=1/log2(M)*ser_theory;

%64QAM
scatterplot(rx1);
p1=2*(1-1/sqrt(N))*qfunc(sqrt(3*snr1/(N-1)));
ser1_theory=1-(1-p1).^2;%64QAM理論誤碼率
ber1_theory=1/log2(N)*ser1_theory;%得到誤比特率

%繪圖
figure()
semilogy(EsN0,ber,"o", EsN0, ser, "*",EsN0, ser_theory, "-", EsN0, ber_theory, "-");
title("16-QAM載波調製信號在AWGN信道下的誤比特率性能")
xlabel("EsN0");
ylabel("誤比特率和誤符號率");
legend("誤比特率", "誤符號率","理論誤符號率","理論誤比特率");
%階數不同,16和64QAM調製信號在AWGN信道的性能比較
figure()
semilogy(EsN0,ser_theory,'o',EsN0,ser1_theory,'o');%ber ser比特仿真值 ser1理論誤碼率 ber1理論誤比特率
title('16和64QAM調製信號在AWGN信道的性能比較');grid;
xlabel('Es/N0(dB)');%性躁比
ylabel('誤碼率');%誤碼率
legend('16QAM理論誤碼率','64QAM理論誤碼率');

16QAM調製解調仿真實驗到這裏基本就結束啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章