1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
正交频分复用(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)]'];