m基于OFDM+QPSK和turbo编译码以及LS信道估计的无线图像传输matlab仿真

目录

1.算法仿真效果

2.算法涉及理论知识概要

3.MATLAB核心程序

4.完整算法代码文件


1.算法仿真效果

matlab2022a仿真结果如下:

2.算法涉及理论知识概要

       正交频分复用(OFDM)技术将图像数据分成多个子载波进行传输,使用QPSK调制对信号进行调制,通过Turbo编码增强信号的纠错能力,并采用LS信道估计技术来估计信道状态。

系统原理:

扫描二维码关注公众号,回复: 15817064 查看本文章

       OFDM技术:OFDM是一种多载波传输技术,将高速数据分成多个低速子载波进行传输,能够有效抵抗多径衰落和频率选择性衰落。在无线图像传输中,OFDM将图像数据划分成多个子载波,并在频域上进行并行传输,提高了数据传输的速率和可靠性。在OFDM中,将输入信号x(t)调制为基带信号X(k)的过程可以用离散傅里叶变换(DFT)表示为:

       QPSK调制:QPSK是一种常用的数字调制方式,将每两个比特映射为一个复数信号点,实现了较高的数据传输效率。在本系统中,QPSK调制用于将OFDM子载波上的二进制图像数据转换为复数信号,从而进行传输。在QPSK调制中,将二进制数据转换为复数信号可以表示为:

        Turbo编码:Turbo编码是一种迭代编码技术,通过增加冗余信息,提高了信号的纠错能力。在图像传输中,Turbo编码器将图像数据进行编码,发送方和接收方使用迭代译码来增强信号纠错性能。Turbo编码是一种并行级联编码方式,使用两个相同的卷积码器进行编码,表示为:

 

       LS信道估计:LS信道估计是一种基于最小二乘法的信道估计技术,用于估计信号传输过程中受到的信道衰落。在无线图像传输中,信号会受到信道的影响而发生传输误差,使用LS信道估计可以减小信道估计误差,提高图像传输的质量。LS信道估计用于估计接收信号Y(k)与发送信号X(k)之间的信道H(k)状态。可以表示为:

       整个无线图像传输系统中,以上的OFDM+QPSK+Turbo编码+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