Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Clasificación de formas de onda de radar mediante aprendizaje profundo

Este ejemplo muestra cómo clasificar los tipos de forma de onda de radar de datos sintéticos generados mediante la distribución Wigner-Ville (WVD) y una red neuronal convolucional profunda (CNN).

La clasificación de modulación es una función importante para un receptor inteligente. La clasificación de modulación tiene numerosas aplicaciones, como el radar cognitivo y la radio definida por software. Normalmente, para identificar estas formas de onda y clasificarlas por tipo de modulación es necesario definir entidades significativas e introducirlas en un clasificador. Si bien es eficaz, este procedimiento puede requerir un amplio esfuerzo y conocimiento del dominio para obtener una clasificación precisa. En este ejemplo se explora un marco para extraer automáticamente las características de frecuencia de tiempo de las señales y realizar la clasificación de señales mediante una red de aprendizaje profundo.

La primera parte de este ejemplo simula un sistema de clasificación de radar que sintetiza tres formas de onda de radar pulsadas y las clasifica. Las formas de onda de radar son:

  • Rectangular

  • Modulación de frecuencia lineal (LFM)

  • Código Barker

Un sistema de clasificación de radar no existe de forma aislada. Más bien, reside en un espectro de frecuencias cada vez más ocupado, compitiendo con otras fuentes transmitidas, como los sistemas de comunicaciones, la radio y los sistemas de navegación. La segunda parte de este ejemplo amplía la red para incluir tipos de modulación de comunicación adicionales. Además del primer conjunto de formas de onda de radar, la red extendida sintetiza e identifica estas formas de onda de comunicación:

  • Tecla de desplazamiento de frecuencia gaussiana (GFSK)

  • Tecla de desplazamiento de frecuencia de fase continua (CPFSK)

  • Modulación de frecuencia de difusión (B-FM)

  • Modulación de amplitud de banda lateral doble (DSB-AM)

  • Modulación de amplitud de banda lateral única (SSB-AM)

Este ejemplo se centra principalmente en las formas de onda de radar, con la clasificación que se extiende para incluir un pequeño conjunto de señales de modulación de amplitud y frecuencia. Consulte un flujo de trabajo completo de clasificación de modulación con una amplia gama de señales de comunicación.Modulation Classification with Deep Learning (Communications Toolbox)

Generar formas de onda de radar

Genere 3000 señales con una frecuencia de muestreo de MHz para cada tipo de modulación.100 Se utiliza para pulsos rectangulares, para LFM y para pulsos codificados por fases con código Barker.phased.RectangularWaveformphased.LinearFMWaveformphased.PhaseCodedWaveform

Cada señal tiene parámetros únicos y se aumenta con varios impedimentos para hacerla más realista. Para cada forma de onda, el ancho del pulso y la frecuencia de repetición se generarán aleatoriamente. Para las formas de onda LFM, el ancho de banda de barrido y la dirección se generan aleatoriamente. Para las formas de onda De barker, el ancho y el número del chip se generan aleatoriamente. Todas las señales se ven afectadas por el ruido gaussiano blanco utilizando la función con una relación señal-ruido aleatoria en el rango de [–6, 30] dB.awgn Se aplica un desplazamiento de frecuencia con una frecuencia portadora aleatoria en el rango de , a cada señal utilizando el objeto.[Fs/6Fs/5]comm.PhaseFrequencyOffset Por último, cada señal se pasa a través de un canal de desvanecimiento Rician multitrayecto, .comm.RicianChannel

La función auxiliar proporcionada crea y aumenta cada tipo de modulación.helperGenerateRadarWaveforms

rng default [wav, modType] = helperGenerateRadarWaveforms();

Trazar la transformación de Fourier para algunas de las formas de onda LFM para mostrar las varianzas en el conjunto generado.

idLFM = find(modType == "LFM",3); nfft = 2^nextpow2(length(wav{1})); f = (0:(nfft/2-1))/nfft*100e6;  figure subplot(1,3,1) Z = fft(wav{idLFM(1)},nfft); plot(f/1e6,abs(Z(1:nfft/2))) xlabel('Frequency (MHz)');ylabel('Amplitude');axis square subplot(1,3,2) Z = fft(wav{idLFM(2)},nfft); plot(f/1e6,abs(Z(1:nfft/2))) xlabel('Frequency (MHz)');ylabel('Amplitude');axis square subplot(1,3,3) Z = fft(wav{idLFM(3)},nfft); plot(f/1e6,abs(Z(1:nfft/2))) xlabel('Frequency (MHz)');ylabel('Amplitude');axis square

Extracción de características mediante la distribución De wigner-Ville

Para mejorar el rendimiento de clasificación de los algoritmos de aprendizaje automático, un enfoque común es introducir entidades extraídas en lugar de los datos de señal originales. Las entidades proporcionan una representación de los datos de entrada que facilita que un algoritmo de clasificación discrimine entre las clases. La distribución Wigner-Ville representa una vista de frecuencia de tiempo de los datos originales que es útil para señales que varían en el tiempo. La alta resolución y la localidad tanto en tiempo como en frecuencia proporcionan buenas características para la identificación de tipos de modulación similares. Utilice la función para calcular el pseudo WVD suavizado para cada uno de los tipos de modulación.wvd

figure subplot(1,3,1) wvd(wav{find(modType == "Rect",1)},100e6,'smoothedPseudo') axis square; colorbar off; title('Rect') subplot(1,3,2) wvd(wav{find(modType == "LFM",1)},100e6,'smoothedPseudo') axis square; colorbar off; title('LFM') subplot(1,3,3) wvd(wav{find(modType == "Barker",1)},100e6,'smoothedPseudo') axis square; colorbar off; title('Barker')

Para almacenar la distribución smoothed-pseudo Wigner-Ville de las señales, primero cree el directorio dentro de su directorio temporal.TFDDatabasetempdir A continuación, cree subdirectorios para cada tipo de modulación.TFDDatabase Para cada señal, calcule la distribución smoothed-pseudo Wigner-Ville y muestree el resultado en una matriz de 227 por 227. Guardar la matriz es un archivo de imagen en el subdirectorio correspondiente al tipo de modulación de la señal..png La función auxiliar realiza todos estos pasos.helperGenerateTFDfiles Este proceso tomará varios minutos debido al gran tamaño de la base de datos y la complejidad del algoritmo.wvd Puede reemplazar con otro directorio en el que tenga permiso de escritura.tempdir

parentDir = tempdir; dataDir = 'TFDDatabase'; helperGenerateTFDfiles(parentDir,dataDir,wav,modType,100e6)

Cree un objeto de almacén de datos de imagen para la carpeta creada para administrar los archivos de imagen utilizados para entrenar la red de aprendizaje profundo. Este paso evita tener que cargar todas las imágenes en la memoria. Especifique el origen de la etiqueta para que sea nombre de carpeta. Esto asigna el tipo de modulación de cada señal según el nombre de la carpeta.

folders = fullfile(parentDir,dataDir,{'Rect','LFM','Barker'}); imds = imageDatastore(folders,...     'FileExtensions','.png','LabelSource','foldernames','ReadFcn',@readTFDForSqueezeNet);

La red está entrenada con el 80% de los datos y probada con el 10%. El 10% restante se utiliza para la validación. Utilice la función para dividir los conjuntos de entrenamiento, validación y pruebas.splitEachLabelimageDatastore

[imdsTrain,imdsTest,imdsValidation] = splitEachLabel(imds,0.8,0.1);

Configurar la red de aprendizaje profundo

Antes de que se pueda entrenar la red de aprendizaje profundo, defina la arquitectura de red. Este ejemplo utiliza el aprendizaje de transferencia SqueezeNet, una CNN profunda creada para la clasificación de imágenes. El aprendizaje de transferencia es el proceso de reentrenamiento de una red neuronal existente para clasificar nuevos objetivos. Esta red acepta la entrada de imagen del tamaño 227 por 227 por 3. Antes de la entrada a la red, la función de lectura personalizada transformará la distribución de frecuencia de tiempo bidimensional en una imagen RGB del tamaño correcto.readTFDForSqueezeNet SqueezeNet realiza la clasificación de 1000 categorías en su configuración predeterminada.

Load SqueezeNet. Si Deep Learning Toolbox™ paquete de soporte técnico no está instalado, el software proporciona un vínculo al paquete de soporte necesario en el Explorador de complementos.for SqueezeNet Network Para instalar el paquete de soporte técnico, vincule el vínculo y, a continuación, haga clic en .Instalar

net = squeezenet;

Extraiga el gráfico de capas de la red. Confirme que SqueezeNet está configurado para imágenes de tamaño 227 por 227 por 3.

lgraphSqz = layerGraph(net); lgraphSqz.Layers(1)
ans =    ImageInputLayer with properties:                        Name: 'data'                  InputSize: [227 227 3]     Hyperparameters           DataAugmentation: 'none'              Normalization: 'zerocenter'     NormalizationDimension: 'auto'                       Mean: [1×1×3 single]  

Para ajustar SqueezeNet a nuestras necesidades, tres de las últimas seis capas necesitan ser modificadas para clasificar los tres tipos de modulación de radar de interés. Inspeccione las últimas seis capas de red.

lgraphSqz.Layers(end-5:end)
ans =    6x1 Layer array with layers:       1   'drop9'                             Dropout                 50% dropout      2   'conv10'                            Convolution             1000 1x1x512 convolutions with stride [1  1] and padding [0  0  0  0]      3   'relu_conv10'                       ReLU                    ReLU      4   'pool10'                            Average Pooling         14x14 average pooling with stride [1  1] and padding [0  0  0  0]      5   'prob'                              Softmax                 softmax      6   'ClassificationLayer_predictions'   Classification Output   crossentropyex with 'tench' and 999 other classes 

Reemplace la capa 'drop9', la última capa de abandono de la red, por una capa de deserción de probabilidad 0.6.

tmpLayer = lgraphSqz.Layers(end-5); newDropoutLayer = dropoutLayer(0.6,'Name','new_dropout'); lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newDropoutLayer);

La última capa reconocible en SqueezeNet es una capa convolucional 1 por 1, 'conv10'. Reemplace la capa por una nueva capa convolucional por el número de filtros igual al número de tipos de modulación. También aumente los factores de la tasa de aprendizaje de la nueva capa.

numClasses = 3; tmpLayer = lgraphSqz.Layers(end-4); newLearnableLayer = convolution2dLayer(1,numClasses, ...         'Name','new_conv', ...         'WeightLearnRateFactor',20, ...         'BiasLearnRateFactor',20); lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newLearnableLayer);

Reemplace la capa de clasificación por una nueva sin etiquetas de clase.

tmpLayer = lgraphSqz.Layers(end); newClassLayer = classificationLayer('Name','new_classoutput'); lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newClassLayer);

Inspeccione las últimas seis capas de la red. Confirme que se han cambiado las capas de abandono, convolución y salida.

lgraphSqz.Layers(end-5:end)
ans =    6x1 Layer array with layers:       1   'new_dropout'       Dropout                 60% dropout      2   'new_conv'          Convolution             3 1x1 convolutions with stride [1  1] and padding [0  0  0  0]      3   'relu_conv10'       ReLU                    ReLU      4   'pool10'            Average Pooling         14x14 average pooling with stride [1  1] and padding [0  0  0  0]      5   'prob'              Softmax                 softmax      6   'new_classoutput'   Classification Output   crossentropyex 

Elija opciones para el proceso de formación que garantice un buen rendimiento de la red. Consulte la documentación para obtener una descripción de cada opción.trainingOptions

options = trainingOptions('sgdm', ...     'MiniBatchSize',128, ...     'MaxEpochs',5, ...     'InitialLearnRate',1e-3, ...     'Shuffle','every-epoch', ...     'Verbose',false, ...     'Plots','training-progress',...     'ExecutionEnvironment','auto',...     'ValidationData',imdsValidation);

Entrenar la red

Utilice el comando para entrenar la CNN creada.trainNetwork Debido al gran tamaño del conjunto de datos, el proceso puede tardar varios minutos. Si el equipo tiene una GPU y Parallel Computing Toolbox™, MATLAB utiliza automáticamente la GPU para el entrenamiento. De lo contrario, utiliza la CPU. Las gráficas de precisión de entrenamiento de la figura muestran el progreso del aprendizaje de la red en todas las iteraciones. En los tres tipos de modulación de radar, la red clasifica casi el 100% de las señales de entrenamiento correctamente.

trainedNet = trainNetwork(imdsTrain,lgraphSqz,options);

Evaluar el rendimiento en formas de onda de radar

Utilice la red entrenada para clasificar los datos de prueba mediante el comando.classify Una matriz de confusión es un método para visualizar el rendimiento de la clasificación. Utilice el comando para calcular y visualizar la precisión de la clasificación.confusionchart Para los tres tipos de modulación de entrada a la red, casi todas las formas de onda codificadas por fase, LFM y rectangulares se identifican correctamente por la red.

predicted = classify(trainedNet,imdsTest); figure confusionchart(predicted,imdsTest.Labels,'Normalization','column-normalized');

Generar formas de onda de comunicaciones y características de extracción

El espectro de frecuencias de un sistema de clasificación de radar debe competir con otras fuentes transmitidas. Veamos cómo se extiende la red creada para incorporar otros tipos de modulación simulada. Otro ejemplo de MathWorks, , realiza la clasificación de modulación de varios tipos de modulación diferentes mediante Communications Toolbox™.Modulation Classification with Deep Learning (Communications Toolbox) La función auxiliar genera y aumenta un subconjunto de los tipos de modulación utilizados en ese ejemplo.helperGenerateCommsWaveforms Puesto que el WVD pierde la información de fase, se utiliza un subconjunto de solamente los tipos de modulación de amplitud y frecuencia.

Consulte el enlace de ejemplo para obtener una descripción detallada del flujo de trabajo necesario para la clasificación de modulación digital y analógica y las técnicas utilizadas para crear estas formas de onda. Para cada tipo de modulación, se utiliza para extraer características de frecuencia de tiempo y visualizar.wvd

[wav, modType] = helperGenerateCommsWaveforms();  figure subplot(2,3,1) wvd(wav{find(modType == "GFSK",1)},200e3,'smoothedPseudo') axis square; colorbar off; title('GFSK') subplot(2,3,2) wvd(wav{find(modType == "CPFSK",1)},200e3,'smoothedPseudo') axis square; colorbar off; title('CPFSK') subplot(2,3,3) wvd(wav{find(modType == "B-FM",1)},200e3,'smoothedPseudo') axis square; colorbar off; title('B-FM') subplot(2,3,4) wvd(wav{find(modType == "SSB-AM",1)},200e3,'smoothedPseudo') axis square; colorbar off; title('SSB-AM') subplot(2,3,5) wvd(wav{find(modType == "DSB-AM",1)},200e3,'smoothedPseudo') axis square; colorbar off; title('DSB-AM')

Utilice la función auxiliar de nuevo para calcular el pseudo WVD suavizado para cada señal de entrada.helperGenerateTFDfiles Cree un objeto de almacén de datos de imagen para administrar los archivos de imagen de todos los tipos de modulación.

helperGenerateTFDfiles(parentDir,dataDir,wav,modType,200e3) folders = fullfile(parentDir,dataDir,{'Rect','LFM','Barker','GFSK','CPFSK','B-FM','SSB-AM','DSB-AM'}); imds = imageDatastore(folders,...     'FileExtensions','.png','LabelSource','foldernames','ReadFcn',@readTFDForSqueezeNet);

De nuevo, divida los datos en un conjunto de entrenamiento, un conjunto de validación y un conjunto de pruebas mediante la función.splitEachLabel

rng default [imdsTrain,imdsTest,imdsValidation] = splitEachLabel(imds,0.8,0.1);

Ajustar la arquitectura de la red de aprendizaje profundo

Anteriormente, la arquitectura de red se configuraba para clasificar tres tipos de modulación. Esto debe actualizarse para permitir la clasificación de los ocho tipos de modulación de señales de radar y de comunicación. Este es un proceso similar al anterior, con la excepción de que ahora requiere un tamaño de salida de ocho.fullyConnectedLayer

numClasses = 8; net = squeezenet; lgraphSqz = layerGraph(net);  tmpLayer = lgraphSqz.Layers(end-5); newDropoutLayer = dropoutLayer(0.6,'Name','new_dropout'); lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newDropoutLayer);  tmpLayer = lgraphSqz.Layers(end-4); newLearnableLayer = convolution2dLayer(1,numClasses, ...         'Name','new_conv', ...         'WeightLearnRateFactor',20, ...         'BiasLearnRateFactor',20); lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newLearnableLayer);  tmpLayer = lgraphSqz.Layers(end); newClassLayer = classificationLayer('Name','new_classoutput'); lgraphSqz = replaceLayer(lgraphSqz,tmpLayer.Name,newClassLayer);

Cree un nuevo conjunto de opciones de entrenamiento.

options = trainingOptions('sgdm', ...     'MiniBatchSize',150, ...     'MaxEpochs',10, ...     'InitialLearnRate',1e-4, ...     'Shuffle','every-epoch', ...     'Verbose',false, ...     'Plots','training-progress',...     'ExecutionEnvironment','auto',...     'ValidationData',imdsValidation);

Utilice el comando para entrenar la CNN creada.trainNetwork Para todos los tipos de modulación, el entrenamiento converge con una precisión de aproximadamente 95% de clasificación correcta.

trainedNet = trainNetwork(imdsTrain,lgraphSqz,options);

Evaluar el rendimiento en todas las señales

Utilice el comando para clasificar las señales que se mantienen a un lado para las pruebas.classify Una vez más, visualice el rendimiento utilizando .confusionchart

predicted = classify(trainedNet,imdsTest); figure; confusionchart(predicted,imdsTest.Labels,'Normalization','column-normalized');

Para los ocho tipos de modulación de entrada a la red, más del 99% de los tipos de modulación B-FM, CPFSK, GFSK, Barker y LFM se clasificaron correctamente. En promedio, más del 85% de las señales AM se identificaron correctamente. A partir de la matriz de confusión, un alto porcentaje de señales SSB-AM se clasificaron erróneamente como señales DSB-AM y DSB-AM como SSB-AM.

Vamos a investigar algunas de estas clasificaciones erróneas para obtener información sobre el proceso de aprendizaje de la red. Utilice la función del almacén de datos de imagen para extraer del conjunto de datos de prueba una sola imagen de cada clase.readimage El WVD mostrado visualmente se ve muy similar. Puesto que las señales DSB-AM y SSB-AM tienen una firma muy similar, esto explica en parte la dificultad de la red para clasificar correctamente estos dos tipos. El procesamiento adicional de la señal podría hacer las diferencias entre estos dos tipos de modulación más claras a la red y dar lugar a una clasificación mejorada.

DSB_DSB = readimage(imdsTest,find((imdsTest.Labels == 'DSB-AM') & (predicted == 'DSB-AM'),1)); DSB_SSB = readimage(imdsTest,find((imdsTest.Labels == 'DSB-AM') & (predicted == 'SSB-AM'),1)); SSB_DSB = readimage(imdsTest,find((imdsTest.Labels == 'SSB-AM') & (predicted == 'DSB-AM'),1)); SSB_SSB = readimage(imdsTest,find((imdsTest.Labels == 'SSB-AM') & (predicted == 'SSB-AM'),1));  figure subplot(2,2,1) imagesc(DSB_DSB(:,:,1)) axis square; title({'Actual Class: DSB-AM','Predicted Class: DSB-AM'}) subplot(2,2,2) imagesc(DSB_SSB(:,:,1)) axis square; title({'Actual Class: DSB-AM','Predicted Class: SSB-AM'}) subplot(2,2,3) imagesc(SSB_DSB(:,:,1)) axis square; title({'Actual Class: SSB-AM','Predicted Class: DSB-AM'}) subplot(2,2,4) imagesc(SSB_SSB(:,:,1)) axis square; title({'Actual Class: SSB-AM','Predicted Class: SSB-AM'})

Resumen

Este ejemplo mostró cómo los tipos de modulación de radar y comunicaciones se pueden clasificar mediante técnicas de frecuencia de tiempo y una red de aprendizaje profundo. Se podrían investigar más esfuerzos para mejorar más utilizando el análisis de frecuencia de tiempo disponible en Wavelet Toolbox™ y análisis adicionales de Fourier disponibles en Signal Processing Toolbox™.

Referencias

[1] Brynolfsson, Johan y Maria Sandsten. "Clasificación de señales no estacionarias unidimensionales utilizando la distribución Wigner-Ville en redes neuronales convolucionales." .25th European Signal Processing Conference (EUSIPCO) IEEE, 2017.

[2] Liu, Xiaoyu, Diyu Yang y Aly El Gamal. "Arquitecturas de redes neuronales profundas para la clasificación de modulación." .51st Asilomar Conference on Signals, Systems and Computers 2017.

[3] 'Wang, Chao, Jian Wang y Xudong Zhang. "Reconocimiento automático de la forma de onda del radar basado en el análisis de frecuencia de tiempo y la red neuronal convolucional." . IEEE International Conference onAcoustics, Speech and Signal Processing (ICASSP) 2017.