m基于CNN卷积神经网络的IBDFE单载波频域均衡算法

发布于:2022-10-17 ⋅ 阅读:(870) ⋅ 点赞:(0)

目录

1.算法概述

2.部分程序

3.算法部分仿真结果图

4.完整程序获取


1.算法概述

       单载波频域均衡(SC-FDE)是解决符号间干扰(ISI)问题的一项重要技术。相比于单载波时域均衡(SC-TDE)技术和正交频分复用(OFDM)技术,SC-FDE技术具有复杂度低、峰均功率比小的优点。但是,SC-FDE技术中,均衡算法的性能与复杂度存在制约关系,传统均衡算法无法在二者之间取得较好的折衷。       

       在单载波频域均衡系统中,线性均衡算法虽然简单易行,但是其抑制噪声干扰和符号间干扰的能力有限,因此需要引入非线性的反馈和迭代机制以进一步提升系统性能。迭代块判决反馈均衡(Iterative Block Decision Feed-back Equalization ,IBDFE)就是一种行之有效的非线性算法,但其缺点是计算复杂度高。传统的IBDFE算法结构如下:

       从结构可知,IBDFE由前馈滤波器和反馈滤波器构成,其中C和B表示前馈滤波器和反馈滤波器的系数。从现有的文献和资料上看,目前该结构在计算过程中,每一次迭代均需要进行系数的估计,从而增加了系统实现复杂度。针对问题,目前主要的研究成果例如LC-IBDFE等,其通过将判决信号中的误差与期望信号分离,从而降低了复杂度。但是类似LC-IBDFE的改进思路,其是基于每次迭代的误比特率相同且很小的假设的,实际中这种情况很难满足条件。另外就是在IBDFE中,出现信道严重衰落的时候,会导致过高的相关因子的估计,从而导致误差的扩散。针对这个问题,现有成果主要有联合信道估计和信道均衡的联合均衡算法。但是这样算法的复杂度又进一步增加。

       我们这里做一个简单的改进:

        将CNN训练后的网络权值Wcnn和信道H相乘,将相乘后的结果用于BK的更新和补偿。由于Bk和Wk是相关的,所以这里直接将CNN用于控制WK即可。从而获得最后的结果。

2.部分程序

..............................................    
%信道模型
Channel  = rayleighchan(Ts,Fd,tau,pdb);
%FFT变换
H_channel0 = fft(Channel.PathGains./sqrt(sum((abs(Channel.PathGains)).^2)),Blk_size+Chu_size+Chu_size);

%CHU序列
Chuseq = zeros(1,Chu_size);
for k = 0:Chu_size-1
    tmps(k+1) = pi*k^2./Chu_size;
end
I      = cos(tmps);
Q      = sin(tmps);
Chuseq = I+sqrt(-1)*Q;
%误码率
%turbo参数
Mss    = 295;
for n = 1:length(SNR)
    ErrMMSE = 0;
    for k = 1:NFrame
        [n,k]
        rng(k);
        %随机
        Tdin       = rand(1,Mss)>0.5;
        %利用turbo的交织器,构建TB-DEF,三路输出
        output     = [func_turbo_code(Tdin)];
        output     = reshape(output, 1, []);
        seridata1  = [output,0,0];
        
        %调制
        Data       = modulation(seridata1,Modsel);
        Tx         = [Chuseq,Data,Chuseq];
        Channel0   = Channel.PathGains./sqrt(sum((abs(Channel.PathGains)).^2));
        Rx1        = filter(Channel0,1,Tx);           
        Rx2        = awgn(Rx1,SNR(n),'measured');
        Rx3        = Rx2;%(Chu_size+1:Chu_size+Blk_size);   
        H_channel  = H_channel0;     
        %频域均衡
        Y          = fft(Rx3,Blk_size+Chu_size+Chu_size);       
        Wk         = conj(H_channel)./(H_channel.*conj(H_channel)+10^(-SNR(n)/10)); 
        Zk         = Y.*Wk;
        Qk         = zeros(size(Zk));
        Bk         = (Blk_size-Chu_size)*(abs(H_channel).^2+10^(-SNR(n)/10))./(sum(abs(H_channel).^2+10^(-SNR(n)/10)))-1;
        P          = 5;
        %调用CNN神经网络的输出权值 
        load CNNmodel.mat
        Iter       = 5;
        for iter = 1:Iter
            Wk = conj(H_channel)./(H_channel.*conj(H_channel)+10^(-SNR(n)/10)/P).*(1+Bk);  
            Zk         = Y.*Wk;
            Uk         = Zk-Qk;
            RxMMSE0    = ifft(Uk,Blk_size+Chu_size+Chu_size);    
            xn         = sign(real(RxMMSE0))+sqrt(-1)*sign(imag(RxMMSE0));
            %去UW
            RxMMSE1    = xn(Chu_size+1:Blk_size);
            %进行判决
            RxMMSE     = demodulation(RxMMSE1,Modsel);   
            Tdecode    = round(func_turbo_decode(2*RxMMSE(1:end-2)-1));
            tmps       = Tdecode;
            
            XK         = fft([tmps,Chuseq],length(RxMMSE1));
            %调用CNN深度学习神经网络,计算Bk值
            Bk0        =([H_channel.*conj(H_channel)]+10^(-SNR(n)/10)/P)/(mean(([H_channel.*conj(H_channel)]+10^(-SNR(n)/10)/P)))/(Blk_size)-1;
            Bk         = func_CNN(H_channel,Bk0,cnn);
            Qk         = [XK,ones(1,192)].*Bk;
        end
        CrrMMSE    = find((Tdin-Tdecode) == 0);
        ErrMMSE    = ErrMMSE+(Mss-length(CrrMMSE));
    end
    %统计误码率
    errors(n) = ErrMMSE/(Mss*NFrame*Modsel);
end
.........................................................

3.算法部分仿真结果图

 

 01_169m

4.完整程序获取

使用版本matlab2017b

解压密码:C+123456

获得方式1:

m基于CNN卷积神经网络的IBDFE单载波频域均衡算法

获取方式2:

如果下载链接失效,加博主微信,或私信。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到