天天看點

萊斯信道衰落下的QPSK誤碼率分析

在無線信道中,萊斯分布是一種最常見的用于描述接收信号包絡統計時變特性的分布類型。其中萊斯因子是反映信道品質的重要參數,在計算信道品質和鍊路預算、移動台移動速度以及測向性能分析等都發揮着重要的作用 [4] 。信号在傳輸過程中由于多徑效應,接收信号是直射信号(主信号)和多徑信号的疊加,此時接收信号的包絡服從萊斯分布。事實上,在考慮多徑效應的時候,原始信号與呈現瑞利分布的多徑分量的和常常被描述為萊斯分布。

其中,萊斯分布的機率密度函數為

萊斯信道衰落下的QPSK誤碼率分析

下面給出在萊斯信道衰落下的QPSK誤碼率分析代碼。

clear all;
close all;
K_rice_dB=40;               %萊斯分布的增益
K_rice=10^(K_rice_dB/10);
M=4;                        %MPSK
k=log2(M);                  %每符号的比特數
N_sym=10;                   %分塊處理,每個塊含有的符号數
N_bit=k*N_sym;              %總共要處理的符号數
N_block=10000;              %塊的數目
Es=1;                       %将每個符号的能量歸一化    
Eb=Es/k;                    %計算每比特的能量   
Eb_N0_dB=0:1:10;            %初始化信噪比
Eb_N0=10.^(Eb_N0_dB/10);
N0=Eb./Eb_N0;               %計算噪聲功率譜密度
len_EbN0=length(Eb_N0);

EbN0_pointer=1;
temp_EbN0_pointer=EbN0_pointer;
errs=zeros(1,len_EbN0);     %錯誤碼元數目初始化
block_count=zeros(1,len_EbN0);
while (EbN0_pointer <= len_EbN0) && (block_count(len_EbN0) < N_block)
    B=round(rand(1,N_bit)); %産生随機二進制序列
    Dm=reshape(B,k,N_sym);  %矩陣轉置
    D = Dm(1,:)+1i*Dm(2,:); %産生兩路獨立的二進制信号.
    Tx_data = sqrt(Eb) * (2*D-(1+1i));                      %發射雙極性不歸零二進制信号
    Noise=sqrt(0.5)*(randn(1, N_sym)+1i*randn(1, N_sym));   %高斯噪聲
    h_ray=sqrt(0.5)*(randn(1,1)+1i*randn(1,1));             %瑞利衰落分布信道
    h_rice=(sqrt(K_rice)+h_ray)/sqrt(1+K_rice);             %萊斯衰落分布信道,這裡要做歸一化
    for n = EbN0_pointer : len_EbN
        Rx_data = h_rice*Tx_data + sqrt(N0(n))*Noise;       %接收端信号
        y=Rx_data/h_rice;                                   %信道增益
        Recov_Tx_data= sqrt(Eb)*(sign(real(y))+1i*sign(imag(y)));
        Recov_D = 0.5*(1+1i+Recov_Tx_data/sqrt(Eb));
        errs(n)= errs(n)+sum(abs(Recov_D-D).^2);            %計算錯誤比特數
        if errs(n)>=800
            temp_EbN0_pointer = temp_EbN0_pointer+1;
        end;
        block_count(n)=block_count(n)+1;                    %進入下一塊循環
    end;
    EbN0_pointer=temp_EbN0_pointer;
    block_count
end; 
Num_BER = errs./(N_bit*block_count);                        %數值模拟誤碼率
Ana_BER=0.5*(1-sqrt(Eb_N0./(1+Eb_N0)));                     %理論誤碼率
figure;                                                     %做出誤碼率曲線
semilogy(Eb_N0_dB, Num_BER, '-s');
hold on;
semilogy(Eb_N0_dB, Ana_BER, 'r-*');
grid on;
Rician_legend=['Rician fading (K= ',num2str(K_rice_dB),' dB)'];
legend(Rician_legend, 'Rayleigh fading');
title('QPSK in Ricean Fading Channels');
xlabel('Eb/N0 (dB)');
ylabel('BER');