您现在的位置:首页 >> 通信 >> 内容

m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真

时间:2022/12/20 18:27:30 点击:

  核心提示:05_013_m,包括程序操作录像+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y52YmZlp

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

       人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

       生物神经网络主要是指人脑的神经网络,它是人工神经网络的技术原型。人脑是人类思维的物质基础,思维的功能定位在大脑皮层,后者含有大约10^11个神经元,每个神经元又通过神经突触与大约103个其它神经元相连,形成一个高度复杂高度灵活的动态网络。作为一门学科,生物神经网络主要研究人脑神经网络的结构、功能及其工作机制,意在探索人脑思维和智能活动的规律。人工神经网络是生物神经网络在某种简化意义下的技术复现,作为一门学科,它的主要任务是根据生物神经网络的原理和实际应用的需要建造实用的人工神经网络模型,设计相应的学习算法,模拟人脑的某种智能活动,然后在技术上实现出来用以解决实际问题。因此,生物神经网络主要研究智能的机理;人工神经网络主要研究智能机理的实现,两者相辅相成。

       常用的信道估计算法比如LS/ML估计,LMMSE估计都可以用,只是形式上有点变化。值得一提的是,在某种程度上其信道估计比平衰落信道中的窄带MIMO要容易。因为导频在空域的正交使得我们仅需要将多对收发天线考虑成多个单对收发天线即可,也就是说可以将MIMO系统变为SISO系统来分析。系统模型的接收端原理图如图所示。即各个接收天线收到相应的OFDM符号后,先进行时频同步处理,然后去掉相应的CP,接着进行OFDM解调(FFT),最后根据信道估计的结果进行检测解码,恢复出接收比特流。

4.部分源码

for tt = 1:Stimes

    tt

    %产生二进制随即序列

    X                           = func_signal_gen(N_number,Carriers);

    %QPSK调制

    [X1,X_initial]              = func_QPSK(X,N_number);

    %导频

    [pilot,training_symbols]    = func_pilot(symbols_per_carrier,Np,interval,Carriers);

    %串并

    X2                          = reshape(X1,symbols_per_carrier,Carriers);

    %插入导频

    [X3,signal]                 = func_pilot_insert(X2,pilot,Carriers,Np,training_symbols);

    %IFFT

    IFFT_modulation             = zeros(symbols_per_carrier,IFFT_len);

    IFFT_modulation(:,carriers) = X3;

    X4                          = ifft(IFFT_modulation,IFFT_len,2);

    %加循环前缀

    X6                          = func_cp(X4,symbols_per_carrier,IFFT_len,Cps);

    %并串

    X7                          = reshape(X6.',1,symbols_per_carrier*(IFFT_len+Cps));

    %信道

    Tx_data                     = func_multipath_channel(X7,Carriers,IF_multi);

 

    %高斯白噪声

    Error_ber  = [];

    Error_mse  = [];

    

    for snr_db = SNR

%         RandStream.setDefaultStream(RandStream('mt19937ar','seed',tt));

        rng(tt) 

        code_power  = 0;

        code_power  = [norm(Tx_data)]^2/(length(Tx_data));

        bit_power   = code_power/bits_symbol; 

        noise_power = 10*log10((bit_power/(10^(snr_db/20))));

        noise       = wgn(1,length(Tx_data),noise_power,'complex');

        %最后接收到的信号

        Y7          = Tx_data + noise;

        %串并变换

        Y6          = reshape(Y7,IFFT_len+Cps,symbols_per_carrier).';

        %去保护间隔

        Y5          = func_cp_del(Y6,symbols_per_carrier,IFFT_len,Cps);

        %FFT,傅立叶变换

        Y4          = fft(Y5,IFFT_len,2);

        Y3          = Y4(:,carriers);

        

        

        %进行信道估计

        if sel == 1

            %实部

            [HLs_real,Y2_real] = func_RBF_channel_est(real(Y3),signal,pilot,symbols_per_carrier,Np,real(training_symbols),Carriers,interval);

            %虚部

            [HLs_imag,Y2_imag] = func_RBF_channel_est(imag(Y3),signal,pilot,symbols_per_carrier,Np,imag(training_symbols),Carriers,interval);

        end        

        if sel == 2

            %实部

            [HLs_real,Y2_real] = func_BP_channel_est(real(Y3),signal,pilot,symbols_per_carrier,Np,real(training_symbols),Carriers,interval);

            %虚部

            [HLs_imag,Y2_imag] = func_BP_channel_est(imag(Y3),signal,pilot,symbols_per_carrier,Np,imag(training_symbols),Carriers,interval);

        end

        Y1_real     = Y2_real./repmat(HLs_real,1,Carriers); 

        Y1_imag     = Y2_imag./repmat(HLs_imag,1,Carriers);   

        Y1          = Y1_real + sqrt(-1)*Y1_imag;

        YY1         = reshape(Y1,N_number/bits_symbol,1);

        %QPSK解调

        [y_real1,y_image1,y_re1,y_im1] = func_deqpsk(YY1);

        r01 = [];

        r11 = [];

        for k=1:length(y_re1);

            r11 = [r11,[y_re1(k),y_im1(k)]];

        end

        dif_bit1        = (X_initial - r11); 

        ber_snr1=0;

        for k=1:N_number;

            if dif_bit1(k)~=0;

               ber_snr1=ber_snr1+1;

           end

        end

     Error_ber = [Error_ber,ber_snr1];

     Error_mse = [Error_mse,mse(X_initial - r11)]; 

    end

    BERs(:,tt) = Error_ber./N_number;

    MSEs(:,tt) = Error_mse;

end

Ber_avg = mean(BERs,2);

MSE_avg = mean(MSEs,2);

05_013_m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168