基于Googlenet深度学习网络的信号调制类型识别matlab仿真

138 阅读2分钟

1.算法运行效果图预览

  8f8444adda0a0053a66725e3f2d6adcd_82780907_202310262332310797868511_Expires=1698334951&Signature=ooV6ajnll0nctS1AwprbG79ljiI%3D&domain=8.jpg

cbe5b9223a59536a0e29cef12cd30b50_82780907_202310262332310829128607_Expires=1698334951&Signature=dHzaS5K2nuPrrhVn5Q4GhRN0%2B2I%3D&domain=8.jpeg

 

2.算法运行软件版本

MATLAB2022a

 

3.算法理论概述

       信号调制类型识别是在无线通信和无线电频谱监测中的一个重要任务。不同信号调制类型具有不同的频谱特征,深度学习方法在信号调制类型识别中取得了显著的成果。

 

3.1 深度学习与卷积神经网络

深度学习是一种机器学习方法,卷积神经网络(CNN)是深度学习的重要分支。CNN通过多层卷积和池化层来学习输入数据的特征表示。GoogLeNet是一种深度卷积神经网络结构,其主要创新在于使用了多个并行的卷积层和1x1卷积核来提高网络的效率和准确性。

 

3.2 数据预处理

首先,采集信号数据并对其进行预处理。信号数据通常以复数形式表示,包括实部和虚部。预处理可能包括归一化、去噪等步骤。

 

3.3 GoogLeNet结构

GoogLeNet网络结构使用了Inception模块,每个模块包括不同大小的卷积核和池化层,以捕捉多尺度的特征。每个Inception模块的输出被串联在一起,形成网络的输出。

 

GoogLenet网络亮点

 

1.引入了Inception结构(融合不同尺度的特征信息)

2.使用1x1的卷积核进行降维以及映射处理

3.添加两个辅助分类器帮助训练

4.丢弃全连接层,使用平均池化层(大大减少模型参数)

 

Inception结构

fd1e23aecb645b26f296c950ec0ddafd_82780907_202310262333400204836295_Expires=1698335020&Signature=i%2Bu6EY3ipZcBR26UX31Y6ZBBM98%3D&domain=8.jpg  

3.4 分类器

       在网络的顶部,添加一个全连接层作为分类器,将特征映射到各个信号调制类型的概率分布。通常使用softmax函数来获得不同类别的概率。

 

 

4.部分核心程序 `% 获取特征学习器和分类器的层名称

Feature_Learner   = net.Layers(142).Name;

Output_Classifier = net.Layers(144).Name;

% 获取类别数量

Number_of_Classes = numel(categories(Training_Dataset.Labels));

% 创建新的特征学习器和分类器层

New_Feature_Learner = fullyConnectedLayer(Number_of_Classes, ...

    'Name', 'Coal Feature Learner', ...

    'WeightLearnRateFactor', 10, ...

    'BiasLearnRateFactor', 10);

 

New_Classifier_Layer = classificationLayer('Name', 'Coal Classifier');

% 构建新的网络架构

Network_Architecture = layerGraph(net);

 

New_Network = replaceLayer(Network_Architecture, Feature_Learner, New_Feature_Learner);

New_Network = replaceLayer(New_Network, Output_Classifier, New_Classifier_Layer);

% 分析新的网络结构

analyzeNetwork(New_Network)

 

% 设置训练选项

maxEpochs = 20;

Minibatch_Size = 8;

Validation_Frequency = floor(numel(Resized_Training_Dataset.Files)/Minibatch_Size);

Training_Options = trainingOptions('sgdm', ...

    'MiniBatchSize', Minibatch_Size, ...

    'MaxEpochs', maxEpochs, ...

    'InitialLearnRate', 1e-3, ...

    'Shuffle', 'every-epoch', ...

    'ValidationData', Resized_Validation_Dataset, ...

    'ValidationFrequency', Validation_Frequency, ...

    'Verbose', false, ...

    'Plots', 'training-progress');

% 训练网络

net = trainNetwork(Resized_Training_Dataset, New_Network, Training_Options);

% 保存训练好的模型

save gnet.mat`