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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真

1.算法描述

    在无线通信系统中,从发射端发射的信号,经过直射、反射、散射等路径到达接收端。在ofdm系统中,为了获取更好的性能,需要进行信道估计获取信道的状态信息。ofdm技术虽然可以通过添加循环前缀的方式抑制多径效应产生的符号间干扰,但是却对高速移动产生的多普勒效应极其敏感。典型的信道估计方法包括最小二乘法和最小均方误差法,然而在系统发射端和接收端的相对移动速度较快时,这两种方法性能受限,而且忽略了高速移动时无线信道在时延-多普勒域上的稀疏性。对于高速移动的快时变信道导频位置处的信道响应,可以采用基扩展模型对信道进行建模,将复杂的快时变信道的参数估计简化为对少量的基函数系数的估计,并且可以基于快时变信道的稀疏性,使用压缩感知技术估计基函数系数。最后根据导频位置的信道响应通过插值法得到数据位置的信道响应。但是,由于高速移动中多普勒效应产生的子载波间干扰,会使数据位置的信道响应描述不准确,从而影响系统性能。

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

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

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

image.png

    BP神经网络是一种具有一个输入层,一个或多个隐含层和一个输出层的多层网络。隐含层和输出层上的每个神经元都对应一个激发函数和一个阈值。每一层上的神经元都通过权重与其相邻层上的神经元相互连接。对于输入层上的神经元其阈值为零,其输出等于输入。图2为单隐含层的BP神经网络的一般结构。BP神经网络隐含层和输出层上的某神经元的输出由下式确定:

image.png

   BP算法所采用的学习过程(即权值调整过程)由信息的前向传播和误差的反向传播组成。在前向传播过程中,每一层神经元的状态只影响到下一层神经元网络。如果输出层不能得到期望输出,就是实际输出值与期望输出值之间有误差,那么转入反向传播过程,将误差信号沿原来的连接通路返回,通过修改各层神经元的权值,逐次地向输入层传播去进行计算,再经过前向传播过程,这两个过程的反复运用,使得误差信号最小。BP神经网络的隐节点采用输入模式与权向量的内积作为激活函数的自变量,而激活函数采用Sigmoid函数。各调参数对BP网络的输出具有同等地位的影响,因此BP神经网络是对非线性映射的全局逼近。

   RBF网络是一种三层前向网络,由输入到输出的映射是非线性的,而隐含层空间到输出空间的映射是线性的,从而大大加快了学习速度并避免局部极小问题。RBF网络结构如下图1所示。

image.png

  RBF网络的基本思想是:用RBF作为隐单元的“基”构成隐含层空间,这样就可以将输入矢量直接映射到隐空间,而不需要通过权连接。当RBF的中心点确定以后,这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和,此处的权即为网络可调参数。其中,隐含层的作用是把向量从低维度的p映射到高维度的h,这样低维度线性不可分的情况到高维度就可以变得线性可分了,主要就是核函数的思想。这样,网络由输入到输出的映射是非线性的,而网络输出对可调参数而言却又是线性的。网络的权就可由线性方程组直接解出,从而大大加快学习速度并避免局部极小问题。RBF神经网络的隐节点采用输入模式与中心向量的距离(如欧式距离)作为函数的自变量,并使用径向基函数(如Gaussian函数)作为激活函数。神经元的输入离径向基函数中心越远,神经元的激活程度就越低(高斯函数)。RBF网络的输出与部分调参数有关,譬如,一个wij值只影响一个yi的输出(参考上面第二章网络输出),RBF神经网络因此具有“局部映射”特性。

image.png
image.png

2.仿真效果预览
matlab2022a仿真结果如下:

image.png
image.png

3.MATLAB核心程序

    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);
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
101 80
|
1天前
|
监控 算法 数据安全/隐私保护
基于扩频解扩+turbo译码的64QAM图传通信系统matlab误码率仿真,扩频参数可设置
该通信系统基于MATLAB 2022a仿真,适用于高要求的图像传输场景(如无人机、视频监控等),采用64QAM调制解调、扩频技术和Turbo译码提高抗干扰能力。发射端包括图像源、64QAM调制器、扩频器等;接收端则有解扩器、64QAM解调器和Turbo译码器等。核心程序实现图像传输的编码、调制、信道传输及解码,确保图像质量和传输可靠性。
25 16
|
1天前
|
机器学习/深度学习 人工智能 算法
基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN
该语音情绪识别算法基于MATLAB 2022a开发,可识别如悲伤等情绪,置信度高达0.9559。核心程序含中文注释及操作视频。算法采用MFCC特征提取与GRNN广义回归网络,通过预加重、分帧、加窗、FFT、梅尔滤波器组、对数运算和DCT等步骤处理语音信号,实现高效的情绪分类。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
4月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
63 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
4月前
|
机器学习/深度学习 Linux TensorFlow
【Tensorflow+keras】用代码给神经网络结构绘图
文章提供了使用TensorFlow和Keras来绘制神经网络结构图的方法,并给出了具体的代码示例。
66 0
|
4月前
|
机器学习/深度学习 自然语言处理 TensorFlow
|
5月前
|
机器学习/深度学习 编解码 数据可视化
图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比
目前我们看到有很多使用KAN替代MLP的实验,但是目前来说对于图神经网络来说还没有类似的实验,今天我们就来使用KAN创建一个图神经网络Graph Kolmogorov Arnold(GKAN),来测试下KAN是否可以在图神经网络方面有所作为。
208 0

热门文章

最新文章