Matlab信号处理——基于BP神经网络的调制信号分类与识别

2024-04-29 14:44

本文主要是介绍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神经网络的调制信号分类与识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946379

相关文章

PRACH基带信号生成

5G NR:RACH流程 -- Msg1之选择正确的PRACH时频资源_prach配置周期-CSDN博客 NR PRACH(二)PRACH Format及频域位置_prach格式-CSDN博客 把跟高层参数相关的参数先随便设置,先生成基带信号。

matlab的小知识点总结(一直补充)

matlab的小知识点总结(一直补充) 1、寻找数组中某一个数出现的个数,用find函数即可,例子如下: a=[1,2,3,1,4,5,1,1,5,2,3,2,2,-1];size(find(a==5),2)%寻找数组中 元素为5的个数 2、进制之间的转换 先说明一点:二进制是用字符串在表示,例如‘1001’ bin2dec二进制转换成十进制dec2base十进制转换成X进制dec

252 基于MATLAB的自适应差分阈值法检测心电信号的QRS波

基于MATLAB的自适应差分阈值法检测心电信号的QRS波,QRS波群反映左、右心室除极电位和时间的变化,第一个向下的波为Q波,向上的波为R波,接着向下的波是S波。通过GUI进行数据处理,展示心率和QRS。程序已调通,可直接运行。 252 自适应差分阈值法 心电信号检测 QRS波 - 小红书 (xiaohongshu.com)

4. Pytorch入门教程——创建一个基类来构建一个基本的神经网络

现在我们已经准备好了Dataloaders,之后要定义神经网络并训练它。为了定义一个神经网络,最好的方法是定义类来分离和抽象所有类型网络的通用功能,如训练循环,验证,评估,预测,设置不同的超参数等。 我们还需要定义实现特定类型网络的类,例如专门用于迁移学习的类,或为全连接操作的类等等。我们将创建三个主要类: 从Pytorch的核心类nn.Module派生的神经网络的基类,它是Pytorch中任

【opencv】信用卡号识别实验

实验环境:anaconda、jupyter notebook(其它的ide也行) 实验用的包:numpy、matplotlib、opencv 实验目标: 识别信用卡的卡号 信用卡图片: 数字模板图片: 一、包引入 import cv2import matplotlib.pyplot as pltimport numpy as np 二、数字模板特征提取

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测 目录 分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征

家居分类的添加、修改、逻辑删除和批量删除

文章目录 1.逻辑删除家居分类1.将之前的docker数据库换成云数据库2.树形控件增加添加和删除按钮1.找到控件2.粘贴四个属性到<el-tree 属性>3.粘贴两个span到<el-tree>标签里4.代码5.效果6.方法区新增两个方法处理添加和删除分类7.输出查看一下信息8.要求节点等级小于等于2允许有Add,没有子节点允许Delete 3.MyBatis-Plus逻辑删除1.官方文档

matlab四舍五入

Matlab取整函数有: fix, floor, ceil, round.取整函数在编程时有很大用处。 一、取整函数  1.向零取整(截尾取整)  fix-向零取整(Round towards zero);  >> fix(3.6)     ans =      3  2.向负无穷取整(不超过x 的最大整数-高斯取整)  floor-向负无穷取整(Round towards minu

房价暴跌到头?中国楼市回调信号愈发强烈!

一、房地产市场的繁荣与萧条 在过去的几十年里,中国的房地产市场经历了多次繁荣与萧条的周期。自2015年第二季度起,全国房价开始逐渐攀升,这标志着新一轮房地产市场的繁荣期的开始。以深圳为例,新政出台后,这座城市的房价如火箭般蹿升,成为全国房价上涨的领头羊。随后,一线城市和强二线城市紧随其后,房价纷纷上涨,甚至出现了“一房难求”的局面。 然而,好景不长,随着市场调控政策的不断加码,以及金融环境的收

matlab 数据预处理及常用操作

img_out = repmat(img,[10000 1]);%生成一个1万行的img矩阵img=zeros(1,1024); %zeros生成为0的矩阵,其中1024为列数, matlab中若想列出所有列的内容,就直接用:(冒号)即可 tic+toc;%计算程序消耗的时间 dir:   列出文件夹内文件的内容,只要列出的文件夹中有一个子文件夹,则其实代表了有至少有3个子文件夹。其