OFDM+QPSK、ターボ符号化、LS チャネル推定に基づくワイヤレス画像伝送 Matlab シミュレーション

目次

1. アルゴリズムシミュレーション効果

2. アルゴリズムには理論的知識の概要が含まれます

3. MATLABコアプログラム

4. 完全なアルゴリズム コード ファイル


1. アルゴリズムシミュレーション効果

matlab2022a のシミュレーション結果は次のとおりです。

2. アルゴリズムには理論的知識の概要が含まれます

       直交周波数分割多重 (OFDM) 技術は、画像データを複数のサブキャリアに分割して送信し、QPSK 変調を使用して信号を変調し、ターボ符号化により信号の誤り訂正能力を強化し、LS チャネル推定技術を使用してチャネル状態を推定します。

システム原理:

       OFDM テクノロジー: OFDM は、高速データを複数の低速サブキャリアに分割して送信するマルチキャリア送信テクノロジーで、マルチパス フェージングと周波数選択性フェージングに効果的に対抗できます。無線画像伝送では、OFDM により画像データが複数のサブキャリアに分割され、周波​​数領域で並列に伝送されるため、データ伝送の速度と信頼性が向上します。OFDM では、入力信号 x(t) をベースバンド信号 X(k) に変調するプロセスは、離散フーリエ変換 (DFT) として表現できます。

       QPSK 変調: QPSK は一般的に使用されるデジタル変調方式で、2 ビットごとを複雑な信号ポイントにマッピングして、高いデータ伝送効率を実現します。このシステムでは、QPSK 変調を使用して、OFDM 副搬送波上のバイナリ画像データを複素信号に変換して送信します。QPSK 変調では、バイナリ データを複素信号に変換することは次のように表すことができます。

        ターボ コーディング: ターボ コーディングは、冗長情報を追加することで信号の誤り訂正能力を向上させる反復コーディング手法です。画像送信では、ターボ エンコーダが画像データをエンコードし、送信側と受信側は反復デコードを使用して信号エラー訂正パフォーマンスを強化します。ターボ コーディングは、コーディングに 2 つの同一の畳み込みコーダーを使用する並列連結コーディング方法であり、次のように表現されます。

 

       LS チャネル推定: LS チャネル推定は、信号送信中に被るチャネル フェージングを推定するために使用される最小二乗法に基づくチャネル推定技術です。無線画像伝送では、信号がチャネルの影響を受けて伝送エラーが発生しますが、LSチャネル推定を使用することでチャネル推定誤差を低減し、画像伝送品質を向上させることができます。LS チャネル推定は、受信信号 Y(k) と送信信号 X(k) の間のチャネル H(k) 状態を推定するために使用されます。これは次のように表現できます。

       無線画像伝送システム全体では、上記の OFDM+QPSK+ターボ符号化+LS チャネル推定のステップが繰り返し実行され、信号伝送の信頼性と効率が向上します。このシステムは、高速無線画像伝送、ビデオ通話など幅広い用途が期待でき、パラメータやアルゴリズムを最適化することでシステム性能をさらに向上させることができます。 

3. MATLABコアプログラム

       %以单天线方式产生测试信号
        %msg                            = rand(Len*Nc/4,1)>=0.5;
        msg                            = [datbin(Iimage_len*(iii-1)+1:Iimage_len*iii)]';
        %turbo编码
        seridata1                      = func_turbo_code(msg,N,M);
        seridata                       = [seridata1,zeros(1,Len*Nc-length(seridata1))]';
        %QPSK映射
        [Qpsk0,Dqpsk_pilot,symbol_bit] = func_piQPSK_mod(seridata);
        %变换为矩阵   
        Qpsk_matrix                    = reshape(Qpsk0,fftlen,Nc);
        [Pilot_in,pilot_num,Pilot_seq,pilot_space] = func_insert_pilot(Dqpsk_pilot,Qpsk_matrix,pilot_type,T,TG);
        Pilot_in                       = fft(Pilot_in);
        %sub carrier mapping
        Pilot_in                       = func_subcarrierMap(Pilot_in); 
        %IFFT transform,产生OFDM信号
        ifft_out                       = ifft(Pilot_in);
        %插入包含间隔     
        Guard_int                      = ceil(BWs/fftlen);  
        Guard_int_ofdm                 = func_guard_interval_insert(ifft_out,fftlen,Guard_int);
        %将矩阵数据转换为串行进行输出
        Guard_int_ofdm_out             = reshape(Guard_int_ofdm,1,(fftlen+Guard_int)*(Nc+pilot_num));
        
............................................................................
       %%
        %开始接收
        Guard_int_remove = func_guard_interval_remove(Rec_ofdm_symbol,(fftlen+Guard_int),Guard_int,(Nc+pilot_num));
        %FFT
        fft_out          = fft(Guard_int_remove);
        %sub carrier demapping
        fft_out          = func_desubcarrierMap(fft_out);
        fft_out          = ifft(fft_out);
        %信道估计
        %ls
        [Sig_Lrmmse,Hs]  = func_ls_estimation(fft_out,pilot_space,Pilot_seq,pilot_num);
        %解调
        Dqpsk            = func_pideMapping(Sig_Lrmmse,fftlen*Nc);
        %turbo解码
        Dqpsk_decode     = [func_turbo_decode(2*Dqpsk(1:end-(Len*Nc-length(seridata1)))-1,N,M)]';
        %计算误码率
        %err_num          = Len*Nc/4-length(find(msg==Dqpsk_decode(1:Len*Nc/4)));
        %Error            = Error + err_num;
        Rimages = [Rimages,[Dqpsk_decode(1:Len*Nc/4)]'];
0X_012m

4. 完全なアルゴリズム コード ファイル

V

おすすめ

転載: blog.csdn.net/hlayumi1234567/article/details/131868138