m simulation matlab de transmission d'images sans fil basée sur OFDM + QPSK et turbo codage et estimation de canal MMSE

Table des matières

1. Effet de simulation d'algorithme

2. Les algorithmes impliquent un aperçu des connaissances théoriques

3. Programme de base MATLAB

4. Fichier de code d'algorithme complet


1. Effet de simulation d'algorithme

Les résultats de la simulation matlab2022a sont les suivants :

 

2. Les algorithmes impliquent un aperçu des connaissances théoriques

       La transmission d'images sans fil basée sur le codage OFDM + QPSK et Turbo et l'estimation de canal MMSE est un système de communication sans fil efficace et fiable, largement utilisé dans le domaine de la transmission d'images. Le système utilise la technologie de multiplexage par répartition orthogonale de la fréquence (OFDM) pour diviser les données d'image en plusieurs sous-porteuses pour la transmission, utilise la modulation QPSK pour la modulation du signal, améliore la tolérance aux erreurs de signal grâce au codage turbo et utilise la technologie d'estimation de canal MMSE (erreur quadratique moyenne minimale) pour réduire les erreurs de transmission de canal.

Principe du système :

     Technologie OFDM : OFDM est une technologie de transmission multiporteuse qui divise les données à grande vitesse en plusieurs sous-porteuses à basse vitesse pour la transmission, ce qui peut résister efficacement à l'évanouissement par trajets multiples et à l'évanouissement sélectif en fréquence. Dans la transmission d'images sans fil, l'OFDM divise les données d'image en plusieurs sous-porteuses et les transmet simultanément, améliorant ainsi le débit et la fiabilité de la transmission des données. En OFDM, le processus de modulation d'un signal d'entrée x(t) en un signal en bande de base X(k) peut être exprimé sous la forme d'une transformée de Fourier discrète (DFT) :

     Modulation QPSK : QPSK est une méthode de modulation numérique couramment utilisée, qui mappe tous les deux bits à un point de signal complexe pour obtenir une efficacité de transmission de données élevée. Dans ce système, la modulation QPSK est utilisée pour convertir les données d'image binaires sur les sous-porteuses OFDM en signaux complexes pour la transmission. Dans la modulation QPSK, la conversion de données binaires en un signal complexe peut être exprimée comme suit :

      Turbo codage : le turbo codage est une technique de codage itérative qui améliore la capacité de correction d'erreur d'un signal en ajoutant des informations redondantes. Dans la transmission d'images, l'encodeur Turbo encode les données d'image, et l'expéditeur et le récepteur utilisent un décodage itératif pour améliorer les performances de correction des erreurs de signal. Le codage turbo est une méthode de codage parallèle concaténé qui utilise deux codeurs convolutifs identiques pour le codage, exprimé comme suit :

       Estimation du canal MMSE : l'estimation du canal MMSE est une technique d'estimation de l'erreur quadratique moyenne minimale utilisée pour estimer l'état du canal. Dans la transmission d'images sans fil, le signal sera affecté par le canal et provoquera une erreur de transmission.L'utilisation de l'estimation de canal MMSE peut réduire l'erreur d'estimation de canal et améliorer la qualité de la transmission d'image. L'estimation de canal MMSE est utilisée pour estimer l'état du canal H(k) entre le signal reçu Y(k) et le signal émis X(k). Il peut être exprimé comme suit :

       Dans l'ensemble du système de transmission d'images sans fil, les étapes ci-dessus de codage OFDM + QPSK + Turbo codage + estimation de canal MMSE sont exécutées de manière itérative pour améliorer la fiabilité et l'efficacité de la transmission du signal. Le système a été largement utilisé dans la transmission d'images sans fil à haut débit, les appels vidéo et d'autres domaines, offrant un support solide pour la transmission d'images de haute qualité. 

3. Programme de base MATLAB

    for iii=1:length(datbin)/Iimage_len
        [i,iii]
       %%
        %以单天线方式产生测试信号
        %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));
        
       %%
        %Step1:大规模MIMO信道
        [Hm,Hmmatrix]            = func_mychannels(Radius,Scale1,Scale2,Nh,Nv);       
        %Step2:多径参数和大规模MIMO参数输入到信道模型中
        %信道采样点数,每个调制符号采一个点
        [passchan_ofdm_symbol]   = func_conv_channels(Hmmatrix,Guard_int_ofdm_out,Nmultipath,Pow_avg,delay_multi,Fre_offset,timeval,iii);
        %Step3:噪声信道 
        Rec_ofdm_symbol          = awgn(passchan_ofdm_symbol,SNR_dB(i),'measured');
        
       %%
        %开始接收
        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);
        %信道估计
        %mmse
        [Sig_Lrmmse,Hs]  = func_mmse_est(fft_out,pilot_space,Pilot_seq,pilot_num,delay_avg/timeval,4e-6/timeval,10^(SNR_dB(i)/10));
        %解调
        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)]'];
    end
0X_013m

4. Fichier de code d'algorithme complet

V

Je suppose que tu aimes

Origine blog.csdn.net/hlayumi1234567/article/details/131867015
conseillé
Classement