qam解调qam解调
这是一段QAM调制解调程序,想要加入如图片所示软解调算法程序,不知怎么添加。还望高手指点,感激不尽!!
%任务三(3):(2,1,4)卷积码+16QAM+AWGN+deqam+维特比软判决和硬判决对性能的影响
clear;
clc;
N=10000;
times=100;
EbN0_db=0:0.5:4.5;
EbN0=10.^(EbN0_db/10);
M=16;
k=log2(M);
codeRate=1/2;%码率
snr_db=EbN0_db+10*log10(k)-10*log10(1/codeRate);
K=5;%约束长度
trellis=poly2trellis(K,[23 33]);%产生格图
tblen=5*K;
%构造调制和解调对象
qamobj = modem.qammod('M', M, 'PhaseOffset', 0, 'SymbolOrder',...
'Gray', 'InputType', 'bit');
qamdeobj1=modem.qamdemod(qamobj);
qamdeobj2=modem.qamdemod(qamobj,'OutputType','bit','DecisionType','approximate llr',...
'NoiseVariance',1);%产生QAM解调对象,选择软判决解调形式。由于此时噪声方差未知,暂设为1
error_rate1=zeros(1,length(length(snr_db)));%硬判决
error_rate2=zeros(1,length(length(snr_db)));%软判决
for j=1:length(snr_db)
error_count1=0;
error_count2=0;
sigma=sqrt(1/(EbN0(j)*2*0.5));
qamdeobj.NoiseVaruance=sigma*sigma;
for jj=1:times
%信源产生
source=randsrc(N,1,[0 1]);
%卷积编码
code=convenc(source,trellis);%卷积编码
%调制
x_qam=modulate(qamobj,code);
%通过信道
y=awgn(x_qam,snr_db(j),'measured');
%解调
y_qam1=demodulate(qamdeobj1,y);
y_qam2=demodulate(qamdeobj2,y);
%卷积码译码
decode1=vitdec(y_qam1,trellis,tblen,'cont','hard');%硬判决
decode2=vitdec(y_qam2,trellis,tblen,'cont','unquant');%软判决
error_count1=error_count1+sum(source(1:N-tblen)~=decode1(tblen+1:N));
error_count2=error_count2+sum(source(1:N-tblen)~=decode2(tblen+1:N));
end;
error_rate1(j)=error_count1/(N*times);%取一个平均
error_rate2(j)=error_count2/(N*times);
end;
figure;
semilogy(EbN0_db,error_rate1,'r-x');
hold on;
semilogy(EbN0_db,error_rate2,'g-o');
grid on;
xlabel('Eb/N0(dB)');
ylabel('BER');
title('维特比软判决和硬判决性能比较(16QAM版)');
legend('硬判决','软判决');
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-30461-1.html
千玺最棒千玺最棒千玺最棒
你先合着找一个