目录
在现代通信系统中,信号检测是一个至关重要的环节。随着深度学习技术的发展,卷积神经网络(Convolutional Neural Network,CNN)在信号处理领域展现出了巨大的潜力。QPSK(Quadrature Phase Shift Keying)是一种常用的数字调制方式,
1.QPSK 调制信号简介
QPSK 是一种四相相移键控调制方式,它将输入的二进制数据映射为四个不同的相位状态。QPSK 信号可以表示为:
2.CNN 基本原理
CNN 主要由卷积层、池化层和全连接层组成。
卷积层:通过卷积核与输入数据进行卷积操作,提取输入数据的特征。卷积操作可以表示为:
池化层:对卷积层的输出进行下采样,减少特征图的大小,降低计算量。常见的池化方式有最大池化和平均池化。
全连接层:将池化层的输出展平后连接到全连接层,进行分类或回归任务。
CNN 的训练过程是通过最小化损失函数来调整网络参数。常用的损失函数有交叉熵损失函数和均方误差损失函数。以交叉熵损失函数为例,对于二分类问题,其定义为:
训练过程通常采用反向传播算法,通过计算损失函数对网络参数的梯度,然后使用优化算法(如随机梯度下降法)更新网络参数。
在MATLAB中,一般通过如下函数来表示CNN的上述结构:
% 3x3 卷积层,8 个滤波器,填充方式为 same
convolution2dLayer([3 3], 8, 'Padding', 'same')
% ReLU 激活函数层
reluLayer
% 2x2 最大池化层,步长为 2
maxPooling2dLayer([2 2], 'Stride', 2)
3.基于 CNN 的 QPSK 信号检测原理
首先,对接收的 QPSK 信号进行预处理,包括下变频、采样和归一化等操作。将预处理后的信号转换为适合 CNN 输入的格式,通常是二维矩阵或向量。
构建适合 QPSK 信号检测的 CNN 模型。可以根据具体问题和数据特点选择不同的网络结构和参数。例如,可以使用多个卷积层和池化层提取信号的特征,然后通过全连接层进行分类,判断接收信号的相位状态。
使用已知的 QPSK 信号样本对 CNN 模型进行训练。在训练过程中,不断调整网络参数,使模型能够准确地检测 QPSK 信号。训练完成后,将未知的 QPSK 信号输入到训练好的模型中,进行信号检测。
4.MATLAB程序
if Nlayer==1
% 定义卷积神经网络的层
layers = [
imageInputLayer([im_h im_w]) % 输入层,图像大小为 [im_h im_w]
convolution2dLayer([3 3], 8, 'Padding', 'same') % 3x3 卷积层,8 个滤波器,填充方式为 same
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数层
fullyConnectedLayer(2) % 全连接层,输出节点数为 2
softmaxLayer % Softmax 层
classificationLayer % 分类层
];
end
...............................................................................
if Nlayer==3
% 定义卷积神经网络的层
layers = [
imageInputLayer([im_h im_w]) % 输入层,图像大小为 [im_h im_w]
convolution2dLayer([3 3], 8, 'Padding', 'same') % 3x3 卷积层,8 个滤波器,填充方式为 same
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数层
maxPooling2dLayer([2 2], 'Stride', 2) % 2x2 最大池化层,步长为 2
convolution2dLayer([3 3], 8, 'Padding', 'same') % 3x3 卷积层,8 个滤波器,填充方式为 same
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数层
maxPooling2dLayer([2 2], 'Stride', 2) % 2x2 最大池化层,步长为 2
convolution2dLayer([3 3], 8, 'Padding', 'same') % 3x3 卷积层,8 个滤波器,填充方式为 same
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数层
maxPooling2dLayer([2 2], 'Stride', 2) % 2x2 最大池化层,步长为 2
convolution2dLayer([3 3], 8, 'Padding', 'same') % 3x3 卷积层,8 个滤波器,填充方式为 same
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数层
maxPooling2dLayer([2 2], 'Stride', 2) % 2x2 最大池化层,步长为 2
convolution2dLayer([3 3], 16, 'Padding', 'same') % 3x3 卷积层,16 个滤波器,填充方式为 same
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数层
maxPooling2dLayer([2 2], 'Stride', 2) % 2x2 最大池化层,步长为 2
convolution2dLayer([3 3], 32, 'Padding', 'same') % 3x3 卷积层,32 个滤波器,填充方式为 same
batchNormalizationLayer % 批归一化层
reluLayer % ReLU 激活函数层
fullyConnectedLayer(2) % 全连接层,输出节点数为 2
softmaxLayer % Softmax 层
classificationLayer % 分类层
];
end
% 定义训练选项
options = trainingOptions('sgdm', ... % 使用随机梯度下降法
'ExecutionEnvironment', 'auto', ... % 自动选择执行环境(CPU 或 GPU)
'LearnRateSchedule', 'piecewise', ... % 学习率调度方式为 piecewise
'InitialLearnRate', 0.001, ... % 初始学习率为 0.001
'shuffle', 'every-epoch', ... % 每个 epoch 重新打乱数据
'MaxEpochs', 10, ... % 最大训练轮数为 10
'MiniBatchSize', 31 * 20, ... % 小批量大小为 31 * 20
'plots', 'training-progress', ... % 显示训练进度图
'Verbose', false); % 不显示详细信息
% 训练网络
net = trainNetwork(XTrain, YTrain, layers, options);
4.仿真结果
cnn卷积层数量=1的训练过程
cnn卷积层数量=3的训练过程
cnn卷积层数量=6的训练过程
对比结果如下:
随着卷积层个数的增加,网络可以提取到更高级、更抽象的特征。这对于复杂的信号检测任务可能是有益的,因为更多的特征可以提供更丰富的信息,有助于提高检测性能。然而,过多的卷积层也可能导致过拟合问题。过拟合是指模型在训练数据上表现良好,但在测试数据上性能下降。这是因为过多的卷积层可能会学习到训练数据中的噪声和特定模式,而无法泛化到新的数据。
增加卷积层个数会增加网络的计算复杂度。每个卷积层都需要进行大量的乘法和加法运算,这会导致训练和检测时间的增加。此外,过多的卷积层也可能需要更多的内存资源,这对于硬件设备的要求也会更高。
5.完整程序下载
完整可运行代码,博主已上传至CSDN,使用版本为matlab2022a:
https://download.csdn.net/download/ccsss22/89930479
标签:QPSK,池化层,卷积,检测,same,归一化,CNN From: https://blog.csdn.net/ccsss22/article/details/143311144