本文主要是介绍Matlab信号处理——基于BP神经网络的调制信号分类与识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 信号生成
我们首先生成了包括8种调制方式的调制信号,具体为:
clc
clear
fc=1000; %载波频率
fs=5000; %采样速率
t0=10; %信号长度
fd=100; %符号速率
ts=1/fs; %采样周期
M=t0*fd; %码元个数
ti=1/fd; %码元间隔
N=ti/ts;
t=0:ts:t0;
titles = {'2ASK', '2FSK', '2PSK', '4ASK', '4FSK', '4PSK', '8PSK', '16QAM'}; % 标题数组
for i = 1:8y = signal(i, M, fc, t, N, fs); % 生成信号subplot(4, 2, i)plot(abs(fft(y))) % 生成信号频谱title(titles{i}) % 设置标题
end
2. 特征提取
对信号进行采样和处理,得到了一系列特征参数,包括幅度均值、频率峰值、频率平方均值以及相位标准差、修正后的相位标准差。最后生成了一共480条数据,如下所示,前五列为特征值,最后一列为调制信号的类别(1-8):
3. BP网络训练
clear
clc
warning off
load("datasets.mat");
%% BP神经网络进行训练
P_train = datasets(1:400,1:end-1)'; %训练集特征
T_train = datasets(1:400,end)'; %训练集标签P_test = datasets(401:end,1:end-1)'; %测试集特征
T_test = datasets(401:end,end)'; %测试集标签% 数据归一化
P_train_normalized = mat2gray(P_train); % 将数据归一化到 [0, 1] 范围
P_test_normalized = mat2gray(P_test);% 设置神经网络参数
hiddenLayerSize = [100 600]; % 隐藏层
outputLayerSize = 8; % 输出层神经元数量
net = patternnet([hiddenLayerSize, outputLayerSize]);
net.trainParam.goal=1e-6; % 训练目标最小误差,这里设置为0.1
net.trainParam.mc=0.95; % 附加动量因子
net.trainParam.lr=0.05; % 学习速率,这里设置为0.05
net.trainParam.min_grad=1e-6; % 最小性能梯度
net.trainParam.min_fail=5; % 最大确认失败次数
net.trainParam.epochs = 150; % 最大轮数% 转换标签为独热编码
T_train_onehot = ind2vec(T_train);
T_test_onehot = ind2vec(T_test);% 训练神经网络
[net, tr] = train(net, P_train_normalized, T_train_onehot);
% 保存神经网络和训练信息
save('model_BP.mat', 'net', 'tr');
%% 使用训练好的神经网络进行预测
Y_train_pred = net(P_train_normalized);
Y_test_pred = net(P_test_normalized);% 反归一化预测结果
Y_train_pred_denormalized = vec2ind(Y_train_pred);
Y_test_pred_denormalized = vec2ind(Y_test_pred);% 计算训练集和测试集的准确率
train_accuracy = sum(T_train == Y_train_pred_denormalized) / numel(T_train);
disp(['训练集准确度:' num2str(train_accuracy)])
test_accuracy = sum(T_test == Y_test_pred_denormalized) / numel(T_test);
disp(['测试集准确度:' num2str(test_accuracy)])% 计算混淆矩阵
C = confusionmat(T_test, Y_test_pred_denormalized);
% 绘制混淆矩阵
figure
heatmap(C);
title(['测试集准确度:' num2str(test_accuracy)])
结果如下:
完整代码链接获取:Matlab信号处理——基于BP神经网络的调制信号分类与识别 (qq.com)
如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!
这篇关于Matlab信号处理——基于BP神经网络的调制信号分类与识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!