当前位置:网站首页>[signal recognition] signal modulation classification based on deep learning CNN with matlab code
[signal recognition] signal modulation classification based on deep learning CNN with matlab code
2022-06-24 07:21:00 【Matlab scientific research studio】
1 brief introduction
The large capacity 、 The demand for high-speed information transmission has greatly promoted the technological development in the field of cognitive radio , among , Channel equalization and communication modulation type identification in complex electromagnetic environment , It is one of the important components in this field . The traditional equalization processing mainly uses the gradient descent method to approximate the channel characteristics , The signal is deconvoluted in time domain or frequency domain , To suppress channel interference and distortion , Improve system response ; The traditional modulation recognition method mainly extracts the expert features of the signal , Select the appropriate classifier for recognition . In recent years , Many advanced convolutional neural network architectures and optimization algorithms have been proposed , Deep learning has achieved breakthrough results in many fields . The ability to learn abstract features of original input based on convolution neural network , In this paper, its application in signal de-noising 、 The applications of channel equalization and modulation recognition are deeply studied .
2 Part of the code
classdef helperModClassFrameStore < handle%helperModClassFrameStore Manage data for modulation classification% FS = helperModClassFrameStore creates a frame store object, FS, that% stores the complex baseband signals in a format usable in machine% learning algorithms.%% FS = helperModClassFrameStore(MAXFR,SPF,LABELS) creates a frame store% object, FH, with the maximum number of frames, MAXFR, samples per% frame, SPF, and expected labels, LABELS.%% Methods:%% add(FS,FRAMES,LABEL) adds frame(s), FRAMES, with label, LABEL, to the% frame store.%% [FRAMES,LABELS] = get(FS) returns stored frames and corresponding% labels from frame store, FS.%% See also ModulationClassificationWithDeepLearningExample.propertiesOutputFormat = FrameStoreOutputFormat.IQAsRowsendproperties (SetAccess=private)%NumFrames Number of frames in the frame storeNumFrames = 0%MaximumNumFrames Capacity of frame storeMaximumNumFrames%SamplesPerFrame Samples per frameSamplesPerFrame%Labels Set of expected labelsLabelsendproperties (Access=private)FramesLabelendmethodsfunction obj = helperModClassFrameStore(varargin)%helperModClassFrameStore Store complex I/Q frames% FS = helperModClassFrameStore(MAXFR,SPF,LABELS) returns a frame% store object, FS, to store complex I/Q baseband frames of type% LABEL with frame size of SPF. Frame are stored as a% [SPFxNUMFRAMES] array.inputs = inputParser;addRequired(inputs, 'MaximumNumFrames')addRequired(inputs, 'SamplesPerFrame')addRequired(inputs, 'Labels')parse(inputs, varargin{:})obj.SamplesPerFrame = inputs.Results.SamplesPerFrame;obj.MaximumNumFrames = inputs.Results.MaximumNumFrames;obj.Labels = inputs.Results.Labels;obj.Frames = ...zeros(obj.SamplesPerFrame,obj.MaximumNumFrames);obj.Label = repmat(obj.Labels(1),obj.MaximumNumFrames,1);endfunction add(obj,frames,label,varargin)%add Add baseband frames to frame store% add(FS,FRAMES,LABEL) adds frame(s), FRAMES, with label, LABEL, to% frame store FS.numNewFrames = size(frames,2);if (~isscalar(label) && numNewFrames ~= length(label)) ...&& (size(frames,1) ~= obj.SamplesPerFrame)error(message('comm_demos:helperModClassFrameStore:MismatchedInputSize'));end% Add framesstartIdx = obj.NumFrames+1;endIdx = obj.NumFrames+numNewFrames;obj.Frames(:,startIdx:endIdx) = frames;% Add labels typesif all(ismember(label,obj.Labels))obj.Label(startIdx:endIdx,1) = label;elseerror(message('comm_demos:helperModClassFrameStore:UnknownLabel',...label(~ismember(label,obj.Labels))))endobj.NumFrames = obj.NumFrames + numNewFrames;endfunction [frames,labels] = get(obj)%get Return frames and labels% [FRAMES,LABELS]=get(FS) returns the frames and corresponding% labels in the frame store, FS.%% If OutputFormat is IQAsRows, then FRAMES is an array of size% [2xSPFx1xNUMFRAMES], where the first row is the in-phase% component and the second row is the quadrature component.%% If OutputFormat is IQAsPages, then FRAMES is an array of size% [1xSPFx2xNUMFRAMES], where the first page (3rd dimension) is the% in-phase component and the second page is the quadrature% component.switch obj.OutputFormatcase FrameStoreOutputFormat.IQAsRowsI = real(obj.Frames(:,1:obj.NumFrames));Q = imag(obj.Frames(:,1:obj.NumFrames));I = permute(I,[3 1 4 2]);Q = permute(Q,[3 1 4 2]);frames = cat(1,I,Q);case FrameStoreOutputFormat.IQAsPagesI = real(obj.Frames(:,1:obj.NumFrames));Q = imag(obj.Frames(:,1:obj.NumFrames));I = permute(I,[3 1 4 2]);Q = permute(Q,[3 1 4 2]);frames = cat(3,I,Q);endlabels = obj.Label(1:obj.NumFrames,1);endfunction [fsTraining,fsValidation,fsTest] = ...splitData(obj,splitPercentages)%splitData Split data into training, validation and test% [FSTRAIN,FSVALID,FSTEST]=splitData(FS,PER) splits the stored% frames into training, validation, and test groups based on the% percentages, PER. PER is a three-element vector,% [PERTRAIN,PERVALID,PERTEST], which specifies training,% validation, and test percentages. FSTRAIN, FSVALID, and FSTEST% are the frame stores for training, validation, and test frames.fsTraining = helperModClassFrameStore(...ceil(obj.MaximumNumFrames*splitPercentages(1)/100), ...obj.SamplesPerFrame, obj.Labels);fsValidation = helperModClassFrameStore(...ceil(obj.MaximumNumFrames*splitPercentages(2)/100), ...obj.SamplesPerFrame, obj.Labels);fsTest = helperModClassFrameStore(...ceil(obj.MaximumNumFrames*splitPercentages(3)/100), ...obj.SamplesPerFrame, obj.Labels);for modType = 1:length(obj.Labels)rawIdx = find(obj.Label == obj.Labels(modType));numFrames = length(rawIdx);% First shuffle the framesshuffleIdx = randperm(numFrames);frames = obj.Frames(:,rawIdx);frames = frames(:,shuffleIdx);numTrainingFrames = round(numFrames*splitPercentages(1)/100);numValidationFrames = round(numFrames*splitPercentages(2)/100);numTestFrames = round(numFrames*splitPercentages(3)/100);extraFrames = sum([numTrainingFrames,numValidationFrames,numTestFrames]) - numFrames;if (extraFrames > 0)numTestFrames = numTestFrames - extraFrames;endadd(fsTraining, ...frames(:,1:numTrainingFrames), ...obj.Labels(modType));add(fsValidation, ...frames(:,numTrainingFrames+(1:numValidationFrames)), ...obj.Labels(modType));add(fsTest, ...frames(:,numTrainingFrames+numValidationFrames+(1:numTestFrames)), ...obj.Labels(modType));end% Shuffle new frame storesshuffle(fsTraining);shuffle(fsValidation);shuffle(fsTest);endfunction shuffle(obj)%shuffle Shuffle stored frames% shuffle(FS) shuffles the order of stored frames.shuffleIdx = randperm(obj.NumFrames);obj.Frames = obj.Frames(:,shuffleIdx);obj.Label = obj.Label(shuffleIdx,1);endendend
3 Simulation results


4 reference
[1] Zhou Yu . Research on wireless signal modulation recognition technology based on deep learning [D]. Beijing University of Posts and telecommunications , 2019.
About bloggers : Good at intelligent optimization algorithms 、 Neural networks predict 、 signal processing 、 Cellular automata 、 The image processing 、 Path planning 、 UAV and other fields Matlab Simulation , relevant matlab Code problems can be exchanged by private letter .
Some theories cite network literature , If there is infringement, contact the blogger to delete .
边栏推荐
- Introduction to raspberry pie 4B development board
- 树莓派4B开发板入门
- Intranet learning notes (4)
- What is the mentality of spot gold worth learning from
- Cisco router configuration notes: static routing, rip, OSPF, principles combined with experiments, worth a visit!
- 自动化测试是什么?什么软件项目适合自动化测试?
- MFC多线程 信号量CSemaphore 临界区与互斥 事件
- 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选
- High energy ahead: Figure 18 shows you how to use the waterfall chart to visually reflect data changes
- 两个链表的第一个公共节点_链表中环的入口(剑指offer)
猜你喜欢

Intelligent Vision Group A4 paper recognition example

Decryption of the original divine square stone mechanism

Typora charges? Build vs Code markdown writing environment

Win11怎么设置让CPU性能全开?Win11CPU怎么设置高性能模式?

如何删除/选择电脑上的输入法

Learning to use BACnet gateway of building control system is not so difficult

在js中正则表达式验证小时分钟,将输入的字符串转换为对应的小时和分钟

【Proteus】Arduino UNO + DS1307+LCD1602时间显示

电脑如何打开软键盘,教大家Win10如何打开软键盘的方法

Maui uses Masa blazor component library
随机推荐
Are internal consultants and external consultants in SAP implementation projects difficult or successful? [English version]
What is an intrusion detection system?
2、 What is the principle of layer 3 and 4 switching technology? Recommended collection!
Coding helps promote the internationalization of Tencent games
【WordPress建站】5. 设置代码高亮
Big factories are not the only way to measure ability. The three years' experience of Shangcai's graduation
超宽带脉冲定位方案,UWB精准定位技术,无线室内定位应用
蓝牙耳机怎么连接电脑使用,win10电脑如何连接蓝牙耳机
Win11怎么设置让CPU性能全开?Win11CPU怎么设置高性能模式?
Audio knowledge (V) -- data processing
【云驻共创】华为云HCIA-IoT V2.5培训系列内容之物联网概览
OMX initialization process
Serviceworker working mechanism and life cycle: resource caching and collaborative communication processing
Stop looking! The most complete data analysis strategy of the whole network is here
Prefix and topic training
Leetcode概率题面试突击系列11~15
Huawei experimental topology set, learning methods are attached at the end of the article!
0 foundation a literature club low code development member management applet (5)
Clickhouse source code note 6: exploring the sorting of columnar storage systems
Unexpected token u in JSON at position 0