Maison > Article > tutoriels informatiques > traitement audio Matlab : programme pour générer des spectrogrammes au format WAV et des formes d'onde dans le domaine temporel
Bonjour%, ce programme lit le fichier mywav.wav puis affiche le spectre et la forme d'onde. Notez que le fichier mywav.wav ne doit pas être trop long, sinon l'opération sera très lente.
[y,Fs,bits]=wavread('mywav.wav'); % du signal lu, taux d'échantillonnage et nombre de bits d'échantillonnage.
y=y(:,1);%Je suppose ici que votre voix est binaurale. Je n'utilise que le mono pour l'analyse. Si vous souhaitez analyser un autre canal, veuillez le changer en y=y(:,2 )
.sigLength=longueur(y);
Y = fft(y,sigLength);
Pyy = Y.* conj(Y) / sigLength;
halflength=floor(sigLength/2);
f=Fs*(0:demi-longueur)/sigLength;
figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');
t=(0:sigLength-1)/Fs;
figure;plot(t,y);xlabel('Time(s)');
Donnez-moi un exemple, changez-le vous-même
fs=1000;% définit la fréquence d'échantillonnage
N=1024;% de la longueur des données définie
i=0:N-1;
t=i/fs;
f=100;% définit la fréquence du signal sinusoïdal
%Générer un signal sinusoïdal
x=sin(2*pi*f*t);
intrigue secondaire(231);
plot(t,x); % crée la forme d'onde dans le domaine temporel du signal sinusoïdal
axe([0,0.01,-1,1]);
xlabel('t');
ylabel('y');
title('Forme d'onde du domaine temporel du signal sinusoïdal');
grille;
%Effectuer une transformation FFT et créer un spectrogramme
y=fft(x,N); % effectue la transformation fft
mag=abs(y);% amplitude
f=(0:N-1)*fs/N; L'expression du % de fréquence en abscisse est f=(0:M-1)*Fs/M;
intrigue secondaire(232);
plot(f,mag);% fait un spectrogramme
axe([0,100,0,80]);
xlabel('Fréquence (Hz)');
ylabel('magnitude');
title('Diagramme du spectre d'amplitude du signal sinusoïdal');
grille;
% Spectre quadratique moyen
sq=abdos(y);
figure(1);
intrigue secondaire(233);
intrigue(f,sq);
xlabel('Fréquence (Hz)');
ylabel('spectre quadratique moyen');
title('Spectre quadratique moyen du signal sinusoïdal');
grille;
% spectre de puissance
puissance=carré^2;
figure(1);
intrigue secondaire(234);
intrigue(f,puissance);
xlabel('Fréquence (Hz)');
ylabel('spectre de puissance');
title('Spectre de puissance du signal sinusoïdal');
grille;
% Spectre logarithmique
ln=log(sq);
figure(1);
intrigue secondaire(235);
intrigue(f,ln);
xlabel('Fréquence (Hz)');
ylabel('log spectre');
title('Spectre logarithmique du signal sinusoïdal');
grille;
% Utilisez IFFT pour restaurer le signal d'origine
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
intrigue secondaire(236);
intrigue(ti,magx);
xlabel('t');
ylabel('y');
title('Forme d'onde du signal sinusoïdal convertie par IFFT');
grille;Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!