1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
无线图像传输: 图像数据首先被分割成多个数据包,然后每个数据包经过LDPC编码,接着按OFDM符号映射规则将编码后的比特流映射到各个子载波上进行QPSK调制。在接收端,先利用LS信道估计恢复出原始信号,再经解码得到图像数据,最后还原出原始图像。结合OFDM、QPSK调制、LDPC编译码和LS信道估计,可以构建一个鲁棒的无线图像传输系统。该系统能够在多径和衰落信道中实现可靠的图像传输,通过纠错编码提高传输的可靠性,并通过信道估计来补偿信道对信号的影响
OFDM(正交频分复用)与QPSK调制
OFDM是一种多载波调制技术,其基本思想是将高速数据流分散到多个并行的窄带子载波上进行传输,每个子载波上的数据速率较低,从而降低符号间干扰。对于每个子载波,采用的是QPSK(Quadrature Phase Shift Keying)调制方式,它通过两个正交的基带信号来携带信息,每个信号有2个可能的状态,因此一个QPSK符号可以表示4种状态,对应二进制的00, 01, 10, 11。
LDPC(低密度奇偶校验码)编解码
LDPC码是一种具有稀疏校验矩阵的线性分组码,其性能接近香农极限。编码过程主要是根据预定义的校验矩阵H,将信息比特通过线性运算转化为包含校验比特的编码比特序列。解码通常采用 belief propagation(BP)算法或者最小和(min-sum)算法,在接收端对收到的带有噪声的数据进行迭代软判决译码。
LS(最小二乘)信道估计
在无线通信系统中,由于多径效应等因素,信号在传输过程中会受到信道的影响。LS信道估计算法主要用于估计发送端到接收端的信道频率响应。假设已知导频信号x[n],接收到的信号为y[n],则信道冲激响应h[n]可以通过以下公式估计:
h_LS = (X^T X)^{-1} X^T y
其中,X是导频信号构成的矩阵,y是接收到的对应导频位置的信号向量,h_LS是对信道冲激响应的LS估计。
3.MATLAB核心程序
```for i=1:length(SNR_dB)
i
Error = 0;
err_all = 0;
Rimages = [];
sigma = sqrt(1./(210^(SNR_dB(i)/10)R));
for iii=1:length(datbin)/Iimage_len
[i,iii]
%%
%以单天线方式产生测试信号
%msg = rand(LenNc/4,1)>=0.5;
msg = [datbin(Iimage_len(iii-1)+1:Iimage_leniii)]';
%turbo编码
%LDPC编码
seridata1 = [mod(msg'G,2)];
seridata = [seridata1,zeros(1,LenNc-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);
%信道估计
%ls
[Sig_Lrmmse,Hs] = func_ls_estimation(fft_out,pilot_space,Pilot_seq,pilot_num);
%解调
Dqpsk = func_pideMapping(Sig_Lrmmse,fftlen*Nc);
%LDPC解码
z_hat = func_Dec(2*Dqpsk(1:end-(Len*Nc-length(seridata1)))-1,sigma,H,max_iter);
Dqpsk_decode = round(z_hat(size(G,2)+1-size(G,1):size(G,2)));
Rimages = [Rimages,[Dqpsk_decode(1:Len*Nc/4)]'];
end
Rimages_snr{i} = Rimages;
end
```