m transmisión inalámbrica de imágenes simulación matlab basada en OFDM+QPSK y codificación turbo y estimación de canal MMSE

Tabla de contenido

1. Efecto de simulación de algoritmo

2. Los algoritmos implican una visión general del conocimiento teórico

3. Programa básico de MATLAB

4. Archivo de código de algoritmo completo


1. Efecto de simulación de algoritmo

Los resultados de la simulación matlab2022a son los siguientes:

 

2. Los algoritmos implican una visión general del conocimiento teórico

       La transmisión inalámbrica de imágenes basada en OFDM+QPSK y codificación Turbo y estimación de canal MMSE es un sistema de comunicación inalámbrica eficiente y confiable, que se usa ampliamente en el campo de la transmisión de imágenes. El sistema utiliza la tecnología de multiplexación por división de frecuencia ortogonal (OFDM) para dividir los datos de la imagen en varias subportadoras para la transmisión, utiliza la modulación QPSK para la modulación de la señal, mejora la tolerancia a los errores de la señal a través de la codificación Turbo y utiliza la tecnología de estimación del canal MMSE (Minimum Mean Square Error) para reducir los errores de transmisión del canal.

Principio del sistema:

     Tecnología OFDM: OFDM es una tecnología de transmisión multiportadora que divide los datos de alta velocidad en múltiples subportadoras de baja velocidad para la transmisión, que pueden resistir eficazmente el desvanecimiento multirruta y el desvanecimiento selectivo de frecuencia. En la transmisión inalámbrica de imágenes, OFDM divide los datos de imágenes en varias subportadoras y las transmite simultáneamente, lo que mejora la velocidad y la confiabilidad de la transmisión de datos. En OFDM, el proceso de modular una señal de entrada x(t) en una señal de banda base X(k) se puede expresar como una transformada discreta de Fourier (DFT):

     Modulación QPSK: QPSK es un método de modulación digital de uso común, que asigna cada dos bits a un punto de señal complejo para lograr una alta eficiencia de transmisión de datos. En este sistema, la modulación QPSK se usa para convertir datos de imágenes binarias en subportadoras OFDM en señales complejas para la transmisión. En la modulación QPSK, la conversión de datos binarios en una señal compleja se puede expresar como:

      Codificación turbo: la codificación turbo es una técnica de codificación iterativa que mejora la capacidad de corrección de errores de una señal mediante la adición de información redundante. En la transmisión de imágenes, el codificador Turbo codifica los datos de la imagen y el emisor y el receptor utilizan la decodificación iterativa para mejorar el rendimiento de la corrección de errores de la señal. La codificación turbo es un método de codificación concatenado en paralelo que utiliza dos codificadores convolucionales idénticos para la codificación, expresados ​​como:

       Estimación de canal MMSE: La estimación de canal MMSE es una técnica de estimación de error cuadrático medio mínimo utilizada para estimar el estado del canal. En la transmisión inalámbrica de imágenes, la señal se verá afectada por el canal y provocará un error de transmisión. El uso de la estimación del canal MMSE puede reducir el error de estimación del canal y mejorar la calidad de la transmisión de la imagen. La estimación del canal MMSE se utiliza para estimar el estado del canal H(k) entre la señal recibida Y(k) y la señal transmitida X(k). Se puede expresar como:

       En todo el sistema de transmisión inalámbrica de imágenes, los pasos anteriores de estimación de canal OFDM+QPSK+Turbo coding+MMSE se ejecutan iterativamente para mejorar la confiabilidad y la eficiencia de la transmisión de la señal. El sistema ha sido ampliamente utilizado en la transmisión de imágenes inalámbricas de alta velocidad, videollamadas y otros campos, brindando un fuerte soporte para la transmisión de imágenes de alta calidad. 

3. Programa básico de 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. Archivo de código de algoritmo completo

V

Supongo que te gusta

Origin blog.csdn.net/hlayumi1234567/article/details/131867015
Recomendado
Clasificación