1.算法描述
GRNN,即General Regression Neural Network,中文全称为广义回归神经网络,是由The Lockheed Palo Alto研究实验室在1991年提出的。GRNN是一种新型的基于非线性回归理论的神经网络模型。GRNN是建立在非参数核回归基础之上的,该神经网络是以测试样本为后验条件,并从观测样本中计算得到自变量和因变量之间的概率密度函数,然后在计算出因变量关于自变量的回归值。由于GRNN不需要规定模型的类型,只需要设置神经网络的光滑因子参数,GRNN神经网络的光滑因子参数的取值对神经网络的输出影响较大,当光滑因子参数较大的时候,其对应的神经元所覆盖的输入区域就越大;当光滑因子参数较小的时候,神经网络对应的径向基函数曲线较陡,因此神经网络输出结果更接近期望值,但此时光滑度越差。由于GRNN广义回归神经网络是基于非线性核回归分析的神经网络,因此,对于任意一个非独立变量y,其相对于独立变量x的回归分析的过程是计算具有最大概率值y。现假设随机变量x和y的联合概率密度函数为f (x ,y),已知x的观测值为X,则y相对于X的回归,即条件均值为:
从图3的结构图可知,GRNN神经网络的输入层神经元数目和输入样本的维度是相同的,即每一个神经元将输入信号直接传递给GRNN神经网络的隐含层中。GRNN神经网络的模式层的神经元数目和学习训练样本的数目相同,即每一个神经元都分别对应着一个不同的学习训练样本.
特征提取:
高阶统计量,通常是指信号的高阶矩,高阶累积量等信号统计信息的统称。在这些高阶统计量中,高阶累积量具有十分重要的重用,不同阶数的累积量可以反映出信号的不同特征,因此高阶累积量往往应用在信号分类,信号调制方式识别等领域。高阶累积量中的二阶累积量和四阶累积量可以有效抑制高斯白噪声的干扰,且对相位偏移具有一定的容错能力,其数学表达式为:
第一、研究了基于高阶累积量的信噪比盲估计法和基于信号子空间信噪比盲估计法的基本原理。其中,高阶累积量的原理是通过计算信号矩的方式获得信号能量与噪声能量的估计值。信号子空间法的原理是通过对信号协方差矩阵的分解来分离信号与噪声,从而得到信号的信噪比估计值。
第二、通过MATLAB对高阶累积量信噪比估计法与信号子空间信噪比估计法进行了性能分析。分别分析了高阶累积量信噪比估计法与信号子空间信噪比估计法的性能、输入信号长度对信噪比估计结果的影响分析、不同采样频率对信噪比估计结果的影响分析、不同频偏对信噪比估计结果的影响分析、定时误差对信噪比估计结果的影响分析。仿真实验表明信号子空间信噪比估计法性能优于高阶累积量信噪比估计法。
2.仿真效果预览
matlab2022a仿真结果如下:
从仿真结果可知,8个特征中,特征3,4,6,8,对整体的识别性能最好。
从性能看,直接采用4个特征,性能不如8个特征好,这是由于,当采用四个特征的时候,无法反应实际信号的各个特点,而8个特征,则反应的比较全面,可以更好的区分不同类型的信号。
从仿真结果看,参数0.1的时候,性能可以达到最优。
3.MATLAB核心程序
SNRs = [5:1:12];
Err = zeros(size(SNRs));
MTKL = 20;
for jj = 1:length(SNRs)
jj
SNR=SNRs(jj);
for ii = 1:MTKL
rng(ii);
%%
%产生需要测试的无线信号
%1:WIFI
if SEL == 1
Signal = func_wifi(SNR);
end
%2:3G
if SEL == 2
Signal = func_3G_mobile(SNR);
end
%3:Fsk广播信号
if SEL == 3
Signal = func_2FSK(5000);
end
%采样化处理
Fs = 1e6; %信号采样率
fc = Fs/32; %信号采样率
nsamp = 32; %过采样率
delay = 16; %根号下升余弦的群时延
dataout = RRCsend(Signal,Fs,nsamp,delay);
%基于SDR的上变频
if SEL == 1 | SEL == 2
R = real(dataout).*cos(2*pi*fc*[1:length(dataout)]/Fs) + imag(dataout).*sin(2*pi*fc*[1:length(dataout)]/Fs);
end
if SEL == 3
R = dataout;
end
%通过噪声信道
dataout = awgn(R,SNR,'measured');
%%
%以下是SDR的接收平台
Rec = dataout;
%特征提取
char = real(func_para_check(real(Rec),Fs,fc));
%识别
load Grnn.mat
T(ii) = round(sim(Net,char'));
end
Err(jj) = length(find(T==SEL))/MTKL;
end