レイリー フェージングを使用した M-QAM 変調の matlab で作業していますが、統合部分に少し問題があります。近似値を使用してそのコードを作成しました。
function y = m_qam_ray( M )
%UNTITLED4 Summary of this function goes here
% Detailed explanation goes here
% simulation for M-QAM transmission
EbNodB = [0:2:40];
EbNolin = 10.^(EbNodB/10) ;
Pe_sim=[];
% For M-QAM
if(M==4)
a=1;
else
a=4/log2(M);
end
b=3*log2(M)/(M-1);
Pe=[];
for i = 1:((40/2)+1),
Pe= [Pe 0.5*a*(1-sqrt(0.5*b*EbNolin(i)/(1+0.5*b*EbNolin(i))))]; %THE APROXIMATION
end % Ref: Wireless Communication, A. Goldsmith
semilogy(EbNodB,Pe)
xlabel('SNR, EbNo(dB)');
ylabel('Bit error probability, Pe');
title('Theoretical results of BER of M-QAM');
legend(num2str(M));
legend('-DynamicLegend')
hold off
end
そのコードは正しく動作しますが、修正を行う必要があります。
0.5*a*(1-sqrt(0.5*b*EbNolin(i)/(1+0.5*b*EbNolin(i))))
次のような新しい値が必要です。
(a/pi)*int((a/pi)*mgf*(-b/(2*((sin(phi))^2)) integrated from phi = 0..pi/2
どこ
mgf = (2*(sin(phi))^2)/(2*(sin(phi))^2+b*EbNolin)
したがって、コードを次のように変更しました。
function y= m_qam_ray2(M)
%UNTITLED4 Summary of this function goes here
% Detailed explanation goes here
% simulation for M-QAM transmission
EbNodB = [0:2:40];
EbNolin = 10.^(EbNodB/10) ;
%Pe_sim=[];
if(M==4)
a=1; %Amplitud alpha_m
else
a=(4/log2(M))*(1-(1/sqr(M)));
end
b=3*log2(M)/(M-1); %beta_m
%mgf= (2*(sin(phi))^2)/(2*(sin(phi))^2+b*EbNolin);
Pe=[];
for i = 1:((40/2)+1),
Pe= [Pe (a/pi)*int((a/pi)*((2*((sin(phi))^2)/(2*((sin(phi))^2)+b*EbNolin(i)))*(-b/(2*((sin(phi))^2)), phi = 0..pi/2)];
end % Ref: Wireless Communication, A. Goldsmith
semilogy(EbNodB,Pe)
xlabel('SNR, EbNo(dB)');
ylabel('Bit error probability, Pe');
title('Theoretical results of BER of M-QAM');
legend(num2str(M));
legend('-DynamicLegend')
hold off
終わり
i のすべてのループで、0 と pi/2 の間の積分を行っています (あまり効率的ではないことはわかっていますが、今はそれが必要なだけです)。の
Pe = [Pe (a/pi)*int(((2*((sin(phi))^2)/(2*((sin(phi))^2)+b*EbNolin(i)))*(-b/(2*((sin(phi))^2)))), phi = 0..pi/2)];
エラーは??? エラー: ファイル: m_qam_ray2.m 行: 22 列: 108 等号の左側の式は、代入の有効なターゲットではありません。
そして、それが私のループがプログラムされていないためなのか、それとも積分が原因なのかはわかりません。
誰かが助けてくれたらとてもありがたいです。
ありがとう :)