BPSK ベースのリレー フェージング チャネルのビット誤り率シミュレーション (AF、DF、CF、およびその他のリレー モードと比較)

目次

1. 理論的根拠

1.1AF

1.2CF

1.3DF

2. コアプログラム

3. シミュレーションの結論


1. 理論的根拠

       無線通信において、中継技術は通信距離の拡大、通信品質の向上、通信容量の増大を図るための重要な技術手段です。リレーは、AF (増幅して転送)、DF (デコードして転送)、CF (圧縮して転送) の 3 つのタイプに分類できます。この記事では、これら 3 つのリレーの原理、利点、欠点、および Matlab の実装について詳しく紹介します。

1.1AF


        AF リレーは、中継された信号を増幅して受信側に信号を転送することに基づいたシンプルなリレー テクノロジーです。具体的には、AF リレーの手順は次のとおりです。
リレー ノードが信号を受信し、信号を増幅して受信側に転送します。
受信側は、元の信号と中継信号の 2 つの信号を受信します。これら 2 つの信号を加算して、最終的な信号を取得します。
       AF リレーの利点は、実装が簡単で、信号の処理が比較的簡単であることです。しかし、信号増幅の過程でノイズや歪みが混入するため、AFリレーの性能が悪く、信号干渉やビットエラーなどの問題が発生しやすくなります。
      Matlab で AF リレーを実現するには、次の手順を実行します。
たとえば、関数 randn を使用してガウス ホワイト ノイズ信号を生成することにより、元の信号を生成します。
中継信号は、元の信号を増幅してノイズを加えるなどして生成される。
元の信号と中継信号を加算するなどして、受信信号を生成します。
信号の時間領域波形と周波数領域波形、およびビット誤り率曲線などのパフォーマンス指標を描画します。

1.2CF

       CFリレーは信号圧縮をベースとした中継技術で、中継信号を圧縮して送信することで送信データ量を削減します。具体的には、CF 中継の手順は次のとおりです。
       中継ノードが信号を受信し、信号を圧縮および符号化し、圧縮された信号を取得します。
       中継ノードは圧縮信号を受信機に転送します。
        受信側は中継信号を受信し、解凍アルゴリズムを使用して信号を解凍し、元の信号を取得します。
        受信側は、復元された信号を元の信号に加算して、最終的な信号を取得します。
         CFリレーのメリットは、送信データ量を削減し、通信効率を向上できることです。ただし、CF リレーには、圧縮解除アルゴリズムの複雑さ、信号の品質と信頼性に関する特定の要件など、いくつかの欠点もあります。
Matlab で CF リレーを実装するには、次の手順を実行します。
たとえば、関数 randn を使用してガウス ホワイト ノイズ信号を生成することにより、元の信号を生成します。
たとえば、ウェーブレット変換などの圧縮方法を使用して、元の信号を圧縮します。
圧縮信号は、例えば、畳み込み符号やターボ符号などの符号化方式を用いて符号化される。
中継ノードは信号を受信し、信号をデコードおよび解凍して元の信号を取得します。
中継信号は、元の信号を圧縮、符号化し、ノイズを付加するなどして生成される。
中継ノードは、復号化された信号と中継信号を受信側に転送する。
受信側は中継信号を受信し、解凍アルゴリズムを使用して信号を解凍し、元の信号を取得します。
受信側は、復元された信号を元の信号に加算して、最終的な信号を取得します。
信号の時間領域波形と周波数領域波形、およびビット誤り率曲線などのパフォーマンス指標を描画します。

1.3DF

       DF リレーは AF リレーよりも複雑な中継技術で、中継ノードに基づいて受信信号をデコードし、デコードされた信号を受信側に転送します。具体的には、DF 中継の手順は次のとおりです。
中継ノードは信号を受信し、信号を復号して元の信号を取得します。
中継ノードは、デコードされた信号を受信機に転送します。
       受信側は、元の信号と中継信号の 2 つの信号を受信します。最終的な信号は、中継信号を復号化し、その復号結果を使用して元の信号に対して干渉除去を実行することによって取得されます。
       DF リレーの利点は、信号の干渉と歪みを軽減し、信号の品質と信頼性を向上できることです。ただし、DF リレーには、デコードとエンコードの複雑さ、チャネル変更の影響を受けやすいなど、いくつかの欠点もあります。
Matlab で DF リレーを実装するには、次の手順に従います。
たとえば、関数 randn を使用してガウス ホワイト ノイズ信号を生成することにより、元の信号を生成します。
元の信号を、例えば、畳み込み符号やターボ符号などの符号化方法を使用して符号化する。
中継ノードは信号を受信し、その信号を復号して元の信号を取得します。
中継信号は、元の信号にノイズを処理するなどして生成される。
中継ノードは、復号化された信号と中継信号を受信側に転送する。
       受信側は、元の信号と中継信号の 2 つの信号を受信します。最終的な信号は、中継信号を復号化し、その復号結果を使用して元の信号に対して干渉除去を実行することによって取得されます。
信号の時間領域波形と周波数領域波形、およびビット誤り率曲線などのパフォーマンス指標を描画します。
 

2. コアプログラム

.......................................................
    %%%%%%%%%Channel characteristics%%%%%%%%%%%%%%%% 
    SNRdB = -3:30; %Range of SNR for which BER is investigated. 

    %additive noise and channel response for the relay channel: 
    %Source uplink channel: 
    noise_d = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 
    h_d = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 

    %interuser channel: 
    noise_r1 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 
    h_r1 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 

    %for Relay uplink: 
    noise_r2 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 
    h_r2 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 

    for k = 1:length(SNRdB) 

    SNR = 10^(SNRdB(k)/10); %convert SNRdB to linear value SNR 

    ftx_r1 = sqrt(SNR) * h_r1 .* tx + noise_r1; 

    %%%%%%%%%%%%%%%%% At the Relay %%%%%%%%%%%%% 
    %%%%%%%%%%%%%%%%%%%%%%%%%Decode n F%%%%%% 
    %equalizing at relay 
    eq_rx1 = ftx_r1 .* conj(h_r1); 
    %hard decision and converting from bipolar to bits 
    r_bits = (sign(real(eq_rx1)) + 1)/2; 
    %channel decoding: 
    dec_dcf_r1 = vitdec(r_bits,trellis,3,'term','hard'); 
    %re-encoding using the same procedure as Source: 
    c_data2 = convenc(dec_dcf_r1,trellis); 
    %BPSK signal for the relay coded data: 
    tx2_dcf = 2 * c_data2 - 1; 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

    %%%%%%%%%%%%%%%%%%Detect n F%%% 

    dec_dtf_r1 = sign(real(eq_rx1)); 
    tx2_dtf = dec_dtf_r1; 

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%Apmlify n F%% 

    beta = sqrt(1./((SNR * abs(h_r1).^2) + 1)); 
    %amplification: 
    ftx_amp = ftx_r1 .* beta; 

    %%%%%%%%%%%%%%%%%%%%%%%%%%Relay to Destination% 
    %DCF 
    ftx_dcf_r2 = sqrt(SNR) * tx2_dcf .* h_r2 + noise_r2 ; 
    %DTF 
    ftx_dtf_r2 = sqrt(SNR) * tx2_dtf .* h_r2 + noise_r2 ; 
    %AF 
    ftx_af_r2 = sqrt(SNR) * ftx_amp .* h_r2 + noise_r2 ; 

....................................................................................
 
figure 
semilogy(SNRdB,avgber_dcf,SNRdB,avgber_dtf,SNRdB,avgber_af,SNRdB,theberawgn,SNRdB,theberrayleigh,SNRdB,mrcth); 
axis([SNRdB(1) max(SNRdB) 10^-5 0.5]); 
grid on 
legend('DCF','DTF','AF','AWGN','Rayleigh','MRC 2 senders'); 
xlabel('SNR dB'); 
ylabel('BER'); 
title(['BER curves for comparison,(averaged for ',num2str(N_iter),' iterations)']); 
UP189

3. シミュレーションの結論

 

おすすめ

転載: blog.csdn.net/ccsss22/article/details/130737988