正交幅度調製(QAM)信號的產生與解調介紹及matlab實現

1.QAM信號的產生

1.1 原理

1.2 仿真代碼

clear all
M=8;
msg = [1 4 3 0 7 5 2 6]; %消息信號
ts = 0.01; %抽樣時間間隔
T = 1; %符號週期
t = 0:ts:T; %符號持續時間向量
x = 0:ts:length(msg); %所有符號的傳輸時間
fc = 1; %載波頻率
c = sqrt(2/T)*exp(j*2*pi*fc*t); %載波信號
msg_qam = qammod(msg,M).'; %基帶8-QAM調製
tx_qam = real(msg_qam*c); %載波調製
tx_qam= reshape(tx_qam.',1,length(msg)*length(t));
plot(x,tx_qam(1:length(x)));
title("8QAM信號波形") 
xlabel("時間t");ylabel("載波振幅");
scatterplot(msg_qam)
title("8QAM信號星座圖")
xlabel("同相分量");ylabel("正交分量");

1.3 仿真結果

QAM信號波形振幅不恆定,說明其既調幅又調相。

2.QAM信號的解調

2.1 原理

2.2 仿真代碼

%基帶等效方式仿真16-QAM載波調製信號在AWGN信道下的誤比特率性能
clear all
nsymbol = 100000; %每種SNR下發送的符號數

M=16; %16-QAM 
graycode = [0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];
EsN0 = 5:20;
snr1 = 10.^(EsN0/10); %信噪比轉換爲線性值
msg = randi([0,1],1,nsymbol); %消息數據
msg1 = graycode(msg+1); % Gray映射
msgmod = qammod(msg1, M); %16-QAM調製
spow = norm(msgmod).^2/nsymbol; %求每個符號的平均gonglv

for indx=1:length(EsN0)
    sigma = sqrt(spow/(2*snr1(indx))); %根據符號功率求噪聲功率
    rx = msgmod+sigma*(randn(1,length(msgmod))+j*randn(1,length(msgmod))); %加高斯白噪聲
    y = qamdemod(rx,M); %判決
    demsg = graycode(y+1);
    [err,ber(indx)] = biterr(msg,demsg,log2(M));
    [err,ser(indx)] = symerr(msg,demsg);
end

P4 = 2*(1-1/sqrt(M))*qfunc(sqrt(3*snr1/(M-1)));
ser1 = 1-(1-P4).^2;
ber1 = 1/log2(M)*ser1;
semilogy(EsN0,ber,"-ko", EsN0, ser, "-k*", EsN0, ser1, "-r*", EsN0, ber1, "-ro");
title("16-QAM載波調製信號在AWGN信道下的誤比特率性能")
xlabel("EbN0");
ylabel("誤比特率P和誤符號率");
legend("誤比特率", "誤符號率", "理論誤符號率", "理論誤比特率")

2.3 仿真結果

 

 

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