m wireless image transmission matlab simulation based on OFDM+QPSK and turbo coding and MMSE channel estimation

Table of contents

1. Algorithm simulation effect

2. Algorithms involve an overview of theoretical knowledge

3. MATLAB core program

4. Complete algorithm code file


1. Algorithm simulation effect

The matlab2022a simulation results are as follows:

 

2. Algorithms involve an overview of theoretical knowledge

       Wireless image transmission based on OFDM+QPSK and Turbo coding and MMSE channel estimation is an efficient and reliable wireless communication system, which is widely used in the field of image transmission. The system uses Orthogonal Frequency Division Multiplexing (OFDM) technology to divide image data into multiple subcarriers for transmission, uses QPSK modulation for signal modulation, enhances signal error tolerance through Turbo coding, and uses MMSE (Minimum Mean Square Error) channel estimation technology to reduce channel transmission errors.

System principle:

     OFDM technology: OFDM is a multi-carrier transmission technology that divides high-speed data into multiple low-speed sub-carriers for transmission, which can effectively resist multipath fading and frequency selective fading. In wireless image transmission, OFDM divides image data into multiple sub-carriers and transmits them simultaneously, improving the rate and reliability of data transmission. In OFDM, the process of modulating an input signal x(t) into a baseband signal X(k) can be expressed as a discrete Fourier transform (DFT):

     QPSK modulation: QPSK is a commonly used digital modulation method, which maps every two bits to a complex signal point to achieve high data transmission efficiency. In this system, QPSK modulation is used to convert binary image data on OFDM subcarriers into complex signals for transmission. In QPSK modulation, converting binary data to a complex signal can be expressed as:

      Turbo coding: Turbo coding is an iterative coding technique that improves the error correction capability of a signal by adding redundant information. In image transmission, the Turbo encoder encodes image data, and the sender and receiver use iterative decoding to enhance signal error correction performance. Turbo coding is a parallel concatenated coding method that uses two identical convolutional coders for coding, expressed as:

       MMSE channel estimation: MMSE channel estimation is a minimum mean square error estimation technique used to estimate the state of the channel. In wireless image transmission, the signal will be affected by the channel and cause transmission error. Using MMSE channel estimation can reduce the channel estimation error and improve the quality of image transmission. MMSE channel estimation is used to estimate the state of the channel H(k) between the received signal Y(k) and the transmitted signal X(k). It can be expressed as:

       In the entire wireless image transmission system, the above steps of OFDM+QPSK+Turbo coding+MMSE channel estimation are iteratively executed to improve the reliability and efficiency of signal transmission. The system has been widely used in high-speed wireless image transmission, video calls and other fields, providing strong support for high-quality image transmission. 

3. MATLAB core program

    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. Complete algorithm code file

V

Guess you like

Origin blog.csdn.net/hlayumi1234567/article/details/131867015