m wireless image transmission matlab simulation based on OFDM+QPSK and turbo coding and LS 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

       Orthogonal frequency division multiplexing (OFDM) technology divides image data into multiple subcarriers for transmission, uses QPSK modulation to modulate the signal, enhances the error correction capability of the signal through Turbo coding, and uses LS channel estimation technology to estimate the channel state.

System principle:

       OFDM technology: OFDM is a multi-carrier transmission technology that divides high-speed data into multiple low-speed sub-carriers for transmission, and can effectively resist multipath fading and frequency selective fading. In wireless image transmission, OFDM divides image data into multiple sub-carriers and transmits them in parallel in the frequency domain, 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:

 

       LS channel estimation: LS channel estimation is a channel estimation technique based on the least square method, which is used to estimate the channel fading suffered during signal transmission. In wireless image transmission, the signal will be affected by the channel and cause transmission errors. Using LS channel estimation can reduce channel estimation errors and improve the quality of image transmission. LS channel estimation is used to estimate the channel H(k) state between received signal Y(k) and transmitted signal X(k). It can be expressed as:

       In the entire wireless image transmission system, the above steps of OFDM+QPSK+Turbo coding+LS channel estimation are iteratively executed to improve the reliability and efficiency of signal transmission. The system has broad application prospects in high-speed wireless image transmission, video calls and other applications, and the system performance can be further improved by optimizing parameters and algorithms. 

3. MATLAB core program

       %以单天线方式产生测试信号
        %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. Complete algorithm code file

V

Guess you like

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