1 TP1. Le traitement du signal audio en utilisant les fonctions Matlab 1. Lisez
1 TP1. Le traitement du signal audio en utilisant les fonctions Matlab 1. Lisez les materiaux : Introduction aux signaux audio du site: http://mirlab.org/jang/books/audioSignalProcessing/audioIntro.asp?title=3-1 Introduction to Audio Signals (音訊基本介紹) Ce TP présente quelqunes des caractéristiques les plus importantes des fonctions Matlab qui sont utilisés utilisé pour le traitement du signal audio. En particulier , nous couvrirons les sujets de base dans les fonctions suivantes : 1. Lire/read de fichiers audio, .wav; 2. Lecture/play aux signaux audio ; 3. Enregistrement/record d’un signal audio au microphone ; 4. Stockage/save des fichiers .wav . 2. Lire/read de fichiers audio, .wav; MATLAB peut lire les fichiers wave via la commande " wavread " . L'exemple suivant lit le fichier wave " de sunday.wav » et afficher sa forme d'onde. y, fs]=wavread('boy.wav'); sound(y, fs); % Playback of the sound data time=(1:length(y))/fs; % Time vector on x-axis plot(time, y); % Plot the waveform w.r.t. time 0 0.1 0.2 0.3 0.4 0.5 -1.5 -1 -0.5 0 0.5 1 1.5 Dans l'exemple ci-dessus, " fs " est la fréquence d'échantillonnage qui est 16 000 dans ce cas . Cela indique qu'il existe 16 000 échantillons par seconde lorsque l'attache a été enregistrée. Le vecteur "y" est un vecteur de colonne contenant les échantillons des signaux de parole. Nous pouvons utiliser " (Y, fs ) sonores " à jouer les signaux audio lues à partir du fichier. "temps" est un vecteur de temps dans lequel chaque élément correspond à la durée de chaque échantillon. Par conséquent nous pouvons tracer "y" contre " t " pour afficher directement la forme d'onde . La plupart des signaux audio sont numérisés à une résolution binaire de 8 ou 16 bits. Si nous voulons savoir la résolution en bits du fichier d'onde d'entrée , nous pouvons utiliser un des arguments de sortie supplémentaires pour " wavread " pour obtenir les informations , telles que [y , fs , nbits ] = wavread ( ' girl.wav ' ) ; 2 En outre , si nous voulons connaître la durée d'un flux de signaux audio , nous pouvons utiliser " longueur ( y) / fs " directement . L'exemple suivant peut obtenir la plupart de l'information importante du fichier d'onde " de girl.wav Information of the sound file "girl.wav": Duration = 1.45134 seconds Sampling rate = 11025 samples/second Bit resolution = 8 bits/sample De l' exemple qui précède, on peut observer que tous les signaux audio sont compris entre -1 et 1. Cependant, chaque point d' échantillon est représenté par un nombre entier de 8 bits. Comment sont-ils liés ? Tout d'abord , nous devons savoir la convention suivante : 1. Si un fichier d'onde a une résolution de bits 8 bits , alors chaque point d' échantillon est stocké comme un entier non signé compris entre 0 et 255 ( = 2 ^ 8-1 ) . 2. Si un fichier d'onde a une résolution de 16 bits , chaque point d' échantillon est stocké comme un entier non signé entre -32 768 ( = 2 ^ 16/2 ) et 32 767 ( = 2 ^ 16 / 2-1 ) . Depuis presque toutes les variables dans MATLAB ont le type de "double" , donc tous les échantillons sont convertis en un nombre à virgule flottante comprise entre -1 et 1 pour la manipulation facile des données . Par conséquent, pour récupérer les valeurs entières d'origine des signaux audio , nous pouvons procéder comme suit . 1.Pour résolution de 8 bits , nous pouvons multiplier "y" ( la valeur obtenue par wavread ) par 128 , puis plus 128 . 2.Pour résolution de 16 bits , nous pouvons multiplier "y" ( la valeur obtenue par wavread ) par 32 768 . Nous pouvons également utiliser la commande " wavread " pour lire un fichier wave stéréo . La variable retournée sera une matrice de deux colonnes contenant chacune les signaux audio à partir d'un seul canal. Exemple ci-après. fileName='stereofile.wav'; [y, fs]=wavread(fileName); % Read wave file sound(y, fs); % Playback left=y(:,1); % Left channel right=y(:,2); % Right channel subplot(2,1,1), plot((1:length(left))/fs, left); subplot(2,1,2), plot((1:length(right))/fs, right); close all; clear all; [filename1, pathname1]=uigetfile('*.wav') [y, fs, nbits]=wavread(filename1); fprintf('Information of the sound file "%s":\n', filename1); fprintf('Duration = = %g sec\n', length(y)/fs); fprintf(''Sampling rate = %g samples/sec\n', fs); fprintf('Bit resolution = %g bits/sample\n', nbits); 3 3. Lecture/play aux signaux audio Une fois que nous pouvons lire le fichier d'onde dans MATLAB , nous puissions commencer à traiter les signaux audio en modifiant leurs intensités , ou de modifier leurs taux d'échantillonnage , et ainsi de suite . Après les signaux audio sont traités , nous avons besoin de les jouer pour l'inspection auditive . Cette section présente les commandes MATLAB pour les signaux audio jeu . La commande de base pour la lecture de signaux audio est " wavplay " . L'exemple suivant permet de charger un flux de signaux audio à partir du fichier " handel.mat " et de jouer le signal immédiatement. load handel.mat % Load the signals stored in handel.mat wavplay(y, Fs); % Playback of the signal Comme le volume de lecture est déterminé par l'amplitude des signaux audio , on peut changer l'amplitude pour modifier le volume , comme suit . [y, fs]=wavread('vowel.wav'); wavplay(1*y, fs, 'sync'); % Playback with original amplitude wavplay(3*y, fs, 'sync'); % Playback with 3 times the original amplitude wavplay(5*y, fs, 'sync'); % Playback with 5 times the original amplitude Dans l'exemple ci-dessus, l'amplitude est augmentée progressivement, afin que nous puissions percevoir le volume croissant pendant la lecture. En particulier, "wavplay" supposent que les signaux d'entrée sont compris entre -1 et 1. Lorsque les signaux d'entrée sont hors de cette borne "son cassée" (trop grand ou trop petit), nous pouvons entendre. Pour essayer ceci, vous pouvez essayer "wavplay (100 * y, fs)" pour entendre le résultat. En outre, nous mettons un argument entrée 'sync' supplémentaire dans l'exemple ci- dessus. Cela rendra "wavplay" à jouer les signaux de manière synchrone. Ce est, la lecture ne démarre pas jusqu'à ce que la lecture précédente est terminée. Nous aurons plus de détails sur cette suite. OBS. Dans l'exemple ci-dessus, bien que nous ayons augmenter l'amplitude d'un facteur de 5, l'intensité perçue par l'oreille ne est pas par le facteur de 5. Cela sert à illustrer que la perception de volume ne est pas linéairement proportionnel à l'amplitude. En fait, il est proportionnel à l'amplitude de la logrithm. Si nous changeons la fréquence d'échantillonnage en cours de lecture, il aura une incidence sur la durée ainsi que la hauteur/pitch perçue. Dans l'exemple suivant, nous allons augmenter les taux d'échantillonnage progressivement, de sorte que vous entendrez un son plus court avec de grand pas, similaire à le son du personnage de dessin animé Disney Donald Fauntleroy Duck. [y, fs]=wavread('father.wav'); wavplay(y, 1.0*fs, 'sync'); % Playback at the original speed wavplay(y, 1.2*fs, 'sync'); % Playback at 1.2 times the original speed wavplay(y, 1.5*fs, 'sync'); % Playback at 1.5 times the original speed wavplay(y, 2.0*fs, 'sync'); % Playback at 2.0 times the original speed D'autre part , si nous baissons la fréquence d'échantillonnage progressivement , nous allons obtenir plus et sons graves . Finalement, il sonnera comme la moo de vache . 4 [y, fs]=wavread('father.wav'); wavplay(y, 1.0*fs, 'sync'); % Playback at the original speed wavplay(y, 0.9*fs, 'sync'); % Playback at 0.9 times the original speed wavplay(y, 0.8*fs, 'sync'); % Playback at 0.8 times the original speed wavplay(y, 0.6*fs, 'sync'); % Playback at 0.6 times the original speed Si nous voulons garder la même durée de temps, mais augmenter ou diminuer la hauteur des signaux audio , alors nous devons effectuer un décalage de hauteur ou pas mise à l'échelle . Il est au-delà de la portée de ce chapitre et sera expliqué dans les chapitres suivants . Si on inverse les signaux audio en multipliant par -1 , la perception sera exactement le même que l'original. (Ce servent également à démontrer que la perception humaine de l'audio ne est pas affecté par sa phase.) Toutefois, si le les signaux audio inverser dans l'axe de temps , il sonnera comme une langue inconnue . [y, fs]=wavread('father.wav'); wavplay(y, fs, 'sync'); % Playback of the original signal wavplay(-y, fs, 'sync'); % Playback of the up-down flipped signal wavplay(flipud(y), fs, 'sync'); % Playback of the left-right flipped signal MATLAB a une autre commande similaire " son " pour la lecture , qui peut être utilisé pour les deux plates- formes Windows et Unix. 4. Enregistrement/record d’un signal audio au microphone ; Vous pouvez également utiliser la commande MATLAB " wavrecord " pour lire les signaux audio du microphone directement . Le format de la commande est y = wavrecord ( n , fs ) ; où «n» est le nombre d'échantillons à enregistrer, et " fs " est la fréquence d'échantillonnage . L'exemple suivant enregistre deux secondes de votre microphone . fs=16000; % sampling rate duration=2; % record duration fprintf('Press any key to start %g sec...', duration); pause fprintf('Recording...'); y=wavrecord(duration*fs, fs); % Duration*fs is the no. of samples fprintf('Finish Record’\n'); fprintf(‘Press any key to play...'); pause; fprintf('\n'); uploads/Litterature/ tp1.pdf
Documents similaires










-
30
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 04, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.4807MB