Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Clasificación de forma de onda de radar mediante Deep Learning

Este ejemplo muestra cómo clasificar los tipos de onda de radar de los datos sintéticos generados usando la distribución de 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. Tiene numerosas aplicaciones, como el radar cognitivo y la radio definida por software. Por lo general, para identificar estas formas de onda y clasificarlas por tipo de modulación es necesario definir características significativas e introducir un clasificador. Si bien es eficaz, este procedimiento puede requerir un gran esfuerzo y conocimientos de dominio para producir una clasificación precisa. Este ejemplo explora un marco para extraer automáticamente las características de frecuencia de tiempo de las señales y realizar la clasificación de la señal mediante una red de aprendizaje profundo.

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

  • Rectangular

  • Modulación de frecuencia lineal (LFM)

  • Código Barker

Un sistema de clasificación por radar no existe aisladamente. Más bien, reside en un espectro de frecuencias cada vez más ocupado, compitiendo con otras fuentes transmitidas como sistemas de comunicaciones, radio y 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:

  • Incrustación por desplazamiento de frecuencia gaussiana (GFSK)

  • Codificación por desplazamiento de frecuencia de fase continua (CPFSK)

  • Modulación de frecuencia de radiodifusió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 amplía para incluir un pequeño conjunto de señales de comunicación de modulación de amplitud y frecuencia. Vea para 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 señales 3000 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.RectangularWaveform, phased.LinearFMWaveformphased.PhaseCodedWaveform

Cada señal tiene parámetros únicos y se complementa con varios impedimentos para hacerlo 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 y la dirección del barrido se generan aleatoriamente. Para las formas de onda Barker, el ancho y el número del chip se generan aleatoriamente. Todas las señales se deterioran con ruido Gaussiano blanco utilizando la función con una relación señal-ruido aleatoria en el rango de [– 6, 30] dB.awgn Un desplazamiento de frecuencia con una frecuencia portadora aleatoria en el rango de, se aplica 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 de Rician multipath,comm.RicianChannel.

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

[wav, modType] = helperGenerateRadarWaveforms();

Trace la transformada de Fourier para algunas de las formas de onda de LFM para mostrar las desviaciones 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 utilizando 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 las entidades extraídas en lugar de los datos de la señal original. Las características proporcionan una representación de los datos de entrada que hace que sea más fácil para un algoritmo de clasificación discriminar a través de las clases. La distribución de Wigner-Ville representa una vista de frecuencia de tiempo de los datos originales que es útil para las señales de variación de tiempo. La alta resolución y la localidad en tiempo y frecuencia proporcionan buenas características para la identificación de tipos de modulación similares. Utilice la función para computar 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')

La función auxiliar computa el pseudo WVD suavizado para cada señal de entrada, reduce el resultado al tamaño 227-by-227 y lo guarda como una imagen.helperGenerateTFDfiles Se crea una carpeta en el directorio actual para almacenar todas las distribuciones para cada tipo de modulación.TFDDatabase Cada tipo de modulación se coloca en una subcarpeta con el nombre de acuerdo con su tipo. Este proceso puede tardar varios minutos debido al tamaño de la base de datos grande y la complejidad del algoritmo.wvd

helperGenerateTFDfiles(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 como nombres de carpeta. Esto asigna el tipo de modulación de cada señal según el nombre de la carpeta.

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

La red se entrena con el 80% de los datos y se prueba 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 prueba.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 para AlexNet, que es 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-by-227-by-3. Antes de la entrada a la red, la función de lectura personalizada transforma la distribución de frecuencia de tiempo bidimensional en una imagen RGB del tamaño correcto.readTFDForAlexNet AlexNet realiza la clasificación de 1000 categorías en su configuración predeterminada. Para sintonizar AlexNet para nuestras necesidades, debemos modificar las tres últimas capas de clasificación para que clasifiquen sólo los tres tipos de modulación de radar.

Especificado a con un tamaño de salida de tres, uno para cada uno de los tipos de modulación.fullyConnectedLayer La final y se utilizan para hacer las clasificaciones de salida final.softmaxLayerclassificationLayer

numClasses = 3; net = alexnet; layersTransfer = net.Layers(1:end-3); layers = [     layersTransfer     fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)     softmaxLayer     classificationLayer]
layers =    25x1 Layer array with layers:       1   'data'    Image Input                   227x227x3 images with 'zerocenter' normalization      2   'conv1'   Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]      3   'relu1'   ReLU                          ReLU      4   'norm1'   Cross Channel Normalization   cross channel normalization with 5 channels per element      5   'pool1'   Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]      6   'conv2'   Grouped Convolution           2 groups of 128 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]      7   'relu2'   ReLU                          ReLU      8   'norm2'   Cross Channel Normalization   cross channel normalization with 5 channels per element      9   'pool2'   Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]     10   'conv3'   Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]     11   'relu3'   ReLU                          ReLU     12   'conv4'   Grouped Convolution           2 groups of 192 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]     13   'relu4'   ReLU                          ReLU     14   'conv5'   Grouped Convolution           2 groups of 128 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]     15   'relu5'   ReLU                          ReLU     16   'pool5'   Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]     17   'fc6'     Fully Connected               4096 fully connected layer     18   'relu6'   ReLU                          ReLU     19   'drop6'   Dropout                       50% dropout     20   'fc7'     Fully Connected               4096 fully connected layer     21   'relu7'   ReLU                          ReLU     22   'drop7'   Dropout                       50% dropout     23   ''        Fully Connected               3 fully connected layer     24   ''        Softmax                       softmax     25   ''        Classification Output         crossentropyex 

Elija Opciones para el proceso de entrenamiento 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',...     'ValidationData',imdsValidation);

Entrena la red

Utilice el comando para entrenar la CNN creada.trainNetwork Debido al gran tamaño del DataSet, el proceso puede tardar varios minutos. Si su máquina tiene una GPU y una caja de herramientas de computación paralela™, MATLAB utiliza automáticamente la GPU para el entrenamiento. De lo contrario, utiliza la CPU. Los trazados de precisión de entrenamiento en 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 correctamente casi el 100% de las señales de entrenamiento.

trainedNet = trainNetwork(shuffle(imdsTrain),layers,options);

Evalúe 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 clasificación. Utilice el comando para calcular y visualizar la precisión de la clasificación.confusionchart Para la entrada de tres tipos de modulación a la red, la red identificó correctamente casi todos los códigos de fase, LFM y formas de onda rectangulares.

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

Generar formas de onda de comunicaciones y extraer características

El espectro de frecuencias de un sistema de clasificación por radar debe competir con otras fuentes transmitidas. Veamos cómo se extiende la red creada para incorporar otros tipos de modulación simulados. Otro ejemplo de MathWorks,,, realiza la clasificación de modulación de varios tipos de modulación diferentes utilizando 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 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, utilice para extraer las 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(wav,modType,200e3) folders = fullfile('TFDDatabase',{'Rect','LFM','Barker','GFSK','CPFSK','B-FM','SSB-AM','DSB-AM'}); imds = imageDatastore(folders,...     'FileExtensions','.png','LabelSource','foldernames','ReadFcn',@readTFDForAlexNet);

Una vez más, divida los datos en un conjunto de entrenamiento, un conjunto de validación y un conjunto de pruebas mediante la función.splitEachLabel

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

Ajustar la arquitectura de 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 las señales de radar y de comunicación. Este es un proceso similar al anterior, con la excepción de que el ahora requiere un tamaño de salida de ocho.fullyConnectedLayer

numClasses = 8; net = alexnet; layersTransfer = net.Layers(1:end-3); layers = [     layersTransfer     fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)     softmaxLayer     classificationLayer];  options = trainingOptions('sgdm', ...     'MiniBatchSize',256, ...     'MaxEpochs',5, ...     'InitialLearnRate',1e-3, ...     'Shuffle','every-epoch', ...     'Verbose',false, ...     'Plots','training-progress',...     '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(shuffle(imdsTrain),layers,options);

Evalúe el rendimiento en todas las señales

Utilice el comando para clasificar las señales mantenidas 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, rectangular 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 las señales DSB-AM se clasificaron erróneamente como SSB-AM y SSB-AM como DSB-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 imágenes para extraer del DataSet de prueba una sola imagen de cada clase.readimage El WVD visualizado 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 de señales adicionales podría hacer que las diferencias entre estos dos tipos de modulación sean más claras para la red y resultar en 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'})

Este ejemplo mostraba cómo los tipos de modulación de radar y comunicaciones se pueden clasificar mediante técnicas de procesamiento de señal de frecuencia de tiempo y una red de aprendizaje profundo. Se podrían investigar los esfuerzos adicionales para mejorar la mejora utilizando el análisis de frecuencia de tiempo disponible en wavelet Toolbox™ y el análisis adicional de Fourier disponible en la caja de herramientas de procesamiento de señal™.

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 análisis de frecuencia de tiempo y red neuronal convolucional." . IEEE International Conference onAcoustics, Speech and Signal Processing (ICASSP) 2017.