Contenu principal

Signal Analyzer

Visualiser et comparer plusieurs signaux et spectres

Description

L’application Signal Analyzer est un outil interactif servant à visualiser, prétraiter, mesurer, analyser et comparer des signaux dans les domaines temporel, fréquentiel et temps-fréquence. Avec cette application, vous pouvez :

  • Accéder facilement à tous les signaux dans l’espace de travail MATLAB®.

  • Compléter les données manquantes (depuis R2024a) et lisser, filtrer, rééchantillonner, débruiter, extraire, modifier et éliminer la tendance des signaux sans quitter l’application.

  • Ajouter et appliquer des fonctions de prétraitement personnalisées.

  • Lire les signaux audio. (depuis R2024a)

  • Visualiser et comparer simultanément plusieurs représentations de la forme d’onde, du spectre, de la persistance, du spectrogramme et du scalogramme de signaux.

  • Mesurer les statistiques des données et des signaux.

L’application Signal Analyzer permet de travailler simultanément sur un grand nombre de signaux de durée variable dans une même vue.

Pour plus d’informations, veuillez consulter Utiliser l’application Signal Analyzer.

  • Une licence Wavelet Toolbox™ est nécessaire pour utiliser la vue du scalogramme et pour appliquer un débruitage par ondelettes aux signaux.

Signal Analyzer app

Ouvrir l'application Signal Analyzer

  • Barre d’outils MATLAB : dans l’onglet Apps, dans la section Signal Processing and Communications, cliquez sur l’icône de l’application.

  • Invite de commande MATLAB : saisissez signalAnalyzer.

Exemples

développer tout

Chargez un signal de parole échantillonné à Fs=7418Hz. Le fichier contient l’enregistrement d’une voix féminine disant le mot « MATLAB® ».

load mtlb

Pour simuler une situation où 70 % des données audio sont manquantes, affectez des valeurs NaN de manière aléatoire au signal.

rng(2024) 
numToReplace = round(length(mtlb) * 0.70);
missing = randperm(length(mtlb),numToReplace);

mtlbMissing = mtlb;
mtlbMissing(missing) = NaN;

Ouvrez Signal Analyzer et faites glisser les variables mtlb et mtlbMissing depuis le volet Workspace Browser vers la table « Filter Signals ». Sélectionnez les deux signaux. Dans l’onglet Analyzer, cliquez sur Time Values et sélectionnez Sample Rate and Start Time. Définissez Sample Rate à Fs Hz et Start Time à 0 s. Cliquez sur Display Grid pour créer deux affichages côte à côte. Tracez mtlb dans l’affichage de gauche et mtlbMissing dans l’affichage de droite. Pour écouter le signal audio mtlb, sélectionnez-le et cliquez sur Play dans la section Playback de la barre d’outils sous l’onglet Display. Pour répéter le signal, sélectionnez Play in Loop avant de lancer la lecture.

Signal Analyzer app, showing the Display strip, the "mtlb" signal is selected and played in loop.

Sélectionnez le signal avec des données manquantes et cliquez sur Preprocess sous l’onglet Analyzer pour passer en mode prétraitement. Sélectionnez ensuite Fill Missing dans la liste des options de prétraitement. Utilisez le panneau Function Parameters pour ajuster les paramètres Fill Missing. Sélectionnez Autoregressive model et cliquez sur Apply pour compléter le signal manquant. Cliquez sur Accept All pour enregistrer les résultats du prétraitement et quitter le mode. Pour des informations sur d’autres fonctions pour compléter un signal, veuillez consulter fillmissing et fillgaps.

Signal Analyzer app, showing the Search bar in the Preprocess strip. Clicking the Search bar shows a variety of preprocessing options. The "Fill Missing" option is selected.

Vous pouvez maintenant lire le signal complété avec le bouton Play. Pour visualiser l’effet de compléter des données manquantes sur le spectrogramme, cliquez sur Time-Frequency dans l’onglet Display. Dans l’onglet Spectrogram, spécifiez une résolution temporelle de 20 ms et un chevauchement de 80 % entre les segments adjacents. Définissez les valeurs Power Limits à –50 dB et –10 dB. Cliquez sur l’affichage de gauche et répétez les mêmes étapes.

Signal Analyzer app, showing the Spectrogram strip, the "mtlb" and "mtlbMissing" signals with their respective spectrograms.

Vous pouvez ajuster la fuite spectrale de la fenêtre d’analyse pour résoudre les sinusoïdes dans Signal Analyzer.

Générez un signal bicanal échantillonné à 100 Hz pendant 2 secondes.

  1. Le premier canal se compose d’un signal sonore de 20 Hz et d’un autre de 21 Hz. Les deux signaux sonores ont une amplitude unitaire.

  2. Le second canal contient lui aussi deux signaux sonores. L’un a une amplitude unitaire et une fréquence de 20 Hz. L’autre a une amplitude de 1/100 et une fréquence de 30 Hz.

fs = 100;
t = (0:1/fs:2-1/fs)';

x = sin(2*pi*[20 20].*t)+[1 1/100].*sin(2*pi*[21 30].*t);

Ajoutez du bruit blanc au signal. Spécifiez un rapport signal à bruit de 40 dB.

x = x + randn(size(x)).*std(x)/db2mag(40);

Ouvrez Signal Analyzer et tracez le signal. Dans l’onglet Analyzer, assurez-vous que le signal est sélectionné dans la table Signal, cliquez sur Time Values et sélectionnez Sample Rate and Start Time. Définissez Sample Rate à fs Hz et Start Time à 0 s. Dans l’onglet Display, cliquez sur Spectrum pour ajouter un tracé spectral à l’affichage.

Signal Analyzer app, showing the Display strips, from which the Time and Spectrum views are selected. The app also displays the signal "x" with channels 1 and 2, in time domain and frequency domain.

Cliquez sur l’onglet Spectrum. Le curseur qui contrôle la fuite spectrale est positionné au milieu, ce qui correspond à une bande passante de résolution d’environ 1,28 Hz. Les deux signaux sonores du premier canal ne sont pas résolus. Le signal de 30 Hz du second canal est visible bien qu’il soit beaucoup plus faible que l’autre.

Augmentez la fuite pour que la bande passante de résolution soit d’environ 0,83 Hz. Le signal faible du second canal est visiblement résolu.

Signal Analyzer app, showing the Spectrum strip, from which Leakage is selected. The app also displays the signal "x" with channels 1 and 2, in time domain and frequency domain.

Déplacez le curseur jusqu’à la valeur maximale. La bande passante de résolution est d’environ 0,5 Hz. Les deux signaux sonores du premier canal sont résolus. Le signal faible du second canal est masqué par les grands lobes secondaires de la fenêtre.

Cliquez sur l’onglet Display. Utilisez le zoom horizontal pour agrandir l’axe de la fréquence. Ajoutez deux curseurs à l’affichage et faites glisser les curseurs du domaine fréquentiel pour estimer la fréquence des signaux sonores.

Signal Analyzer app, showing the Display strips, from which the Data Cursor toggle button is selected. The app also displays the signal "x" with channels 1 and 2. Two vertical data cursors are shown in the time-domain and frequency-domain plots.

Lisez l’enregistrement audio d’une brosse à dents électronique dans MATLAB®. Le signal est échantillonné à 48 kHz. La brosse à dents est mise en marche à environ 1,75 seconde et fonctionne pendant 2 secondes environ.

[y,fs] = audioread("toothbrush.m4a");

Ouvrez Signal Analyzer et faites glisser le signal depuis le volet Workspace Browser vers la table « Signal ». Ajoutez des informations temporelles au signal en sélectionnant ce dernier dans la table « Signal » et en cliquant sur Time Values dans l’onglet Analyzer. Sélectionnez Sample Rate and Start Time et saisissez fs comme fréquence d'échantillonnage.

Dans l’onglet Display, cliquez sur Display Grid pour créer une grille de 2 x 2 affichages. Sélectionnez chaque affichage, cliquez sur Spectrum pour ajouter une vue spectrale puis cliquez sur Time pour supprimer la vue temporelle. Faites glisser le signal vers chacun des quatre affichages.

Signal Analyzer app, showing the Display strip, from which the Spectrum view is selected. The app also shows the signal "y" in frequency domain in a 2-by-2 grid of displays. The four displays show the same spectrum for "y".

Cliquez sur l’onglet Spectrum pour modifier la vue spectrale de chaque affichage.

  1. Cliquez sur l’affichage supérieur gauche pour le sélectionner. Déplacez le curseur Leakage pour régler la valeur de fuite à 32.

  2. Cliquez sur l’affichage supérieur droit pour le sélectionner. Dans la section Resolution Type, sélectionnez Window Length. Dans la section Window Length, sélectionnez Specify et spécifiez une longueur de fenêtre de 1 500 échantillons. Dans la section Window Options, sélectionnez une fenêtre Rectangular et spécifiez un pourcentage de chevauchement de 20.

  3. Cliquez sur l’affichage inférieur gauche pour le sélectionner. Dans la section Resolution Type, sélectionnez Window Length. Dans la section Window Length, sélectionnez Specify et spécifiez une longueur de fenêtre de 500 échantillons. Dans la section Window Options, sélectionnez une fenêtre de Hamming et spécifiez un pourcentage de chevauchement de 50. Dans la section NFFT, spécifiez 550 points de transformée de Fourier discrète.

  4. Cliquez sur l’affichage inférieur droit pour le sélectionner. Dans la section Resolution Type, sélectionnez Window Length. Dans la section Window Length, sélectionnez Specify et spécifiez une longueur de fenêtre de 5 000 échantillons. Dans la section Window Options, sélectionnez une fenêtre de Chebyshev et spécifiez une atténuation de lobe secondaire de 50 dB et un pourcentage de chevauchement de 90.

Vous pouvez voir que certaines vues ont une résolution supérieure mais aussi une fuite supérieure, alors que d’autres vues ont une fuite inférieure mais au détriment de la résolution.

Signal Analyzer app, showing the Display strip, from which the Spectrum view is selected. The app also shows the signal "y" in frequency domain in a 2-by-2 grid of displays. The four displays now show different spectra for "y", each of them modified with its own spectrum settings.

Exemples associés

Utilisation programmatique

développer tout

signalAnalyzer ouvre l’application Signal Analyzer.

signalAnalyzer(sig) ouvre l’application Signal Analyzer et importe et trace le signal sig. Si l’application est déjà ouverte, sig est tracé dans l’affichage courant. Si sig est déjà tracé mais a changé, l’appel de fonction met à jour le tracé.

sig peut être une variable de l’espace de travail ou une expression MATLAB. sig peut être :

  • Un vecteur ou une matrice avec des signaux indépendants dans chaque colonne.

  • Une timetable avec des valeurs temporelles correspondant à des durées.

  • Un objet timeseries.

Pour plus de précisions, veuillez consulter Data Types Supported by Signal Analyzer.

Par défaut, l’application trace le signal en fonction de l’index de l’échantillon. Si vous indiquez des informations temporelles ou si le signal a des informations temporelles intrinsèques, l’application trace le signal en fonction du temps.

signalAnalyzer(sig1,...,sigN) importe N vecteurs ou matrices de signaux et les trace dans l’affichage courant. L’application ne supporte pas l’importation de signaux avec et sans informations temporelles intrinsèques dans le même appel de fonction.

signalAnalyzer(___,'SampleRate',fs) définit une fréquence d'échantillonnage fs par un scalaire positif exprimé en Hz. L’application utilise cette fréquence d'échantillonnage pour tracer un ou plusieurs signaux en fonction du temps en supposant une heure de début égale à zéro. Il est possible de spécifier une fréquence d'échantillonnage pour les signaux sans informations temporelles intrinsèques.

signalAnalyzer(___,'SampleTime',ts) définit un pas d’échantillonnage ts par un scalaire positif exprimé en secondes. L’application utilise ce pas d’échantillonnage pour tracer un ou plusieurs signaux en fonction du temps en supposant une heure de début égale à zéro. Il est possible de spécifier un pas d’échantillonnage pour les signaux sans informations temporelles intrinsèques.

signalAnalyzer(___,'StartTime',st) définit l’heure de début du signal st par un scalaire exprimé en secondes. Si vous ne spécifiez pas de fréquence ni de pas d’échantillonnage, l’application suppose une fréquence d'échantillonnage égale à 1 Hz. Il est possible de spécifier une heure de début pour les signaux sans informations temporelles intrinsèques.

signalAnalyzer(___,'TimeValues',tv) spécifie un vecteur tv avec des valeurs temporelles correspondant aux points de données. tv peut être un vecteur numérique réel avec des valeurs exprimées en secondes. tv peut également être un tableau duration. Les valeurs de tv doivent être uniques et non NaN, mais il n’est pas nécessaire qu’elles soient espacées uniformément. Tous les signaux d’entrée doivent avoir la même longueur que tv. Il est possible de spécifier un vecteur de valeurs temporelles pour les signaux sans informations temporelles intrinsèques.

Le filtrage et la vue du scalogramme ne supportent pas les signaux échantillonnés de manière non uniforme.

Historique des versions

Introduit dans R2016a

développer tout