Matlab - Automatizar funcion

 
Vista:
sin imagen de perfil
Val: 63
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Automatizar funcion

Publicado por luis (36 intervenciones) el 05/12/2018 16:53:57
Hola, quisiera automatizar lo siguiente:
-Tengo un script principal que lee los arhivos de audio que esten en cierto directorio,
-luego los procesa:
1) se hace una normalización de los audios.
2) se calcula unos coeficientes(con la función mfcc , esta almacena los coeficiente btenido en una matriz nxm)
3) estas matrices se trasponen
4) se halla el espectro a partir de estos coeficientes (con la fuunción lpcar2pf, esta función obitiene un espectro por cada fila)
5) se halla el promedio de cada espectro.
6) este espectro se pasa a db
7) se grafica cada espectro y se calcula unas medidas

Esto se debe hacer para todos los archivos de audio dentro del direcotorio, adjunto las funciones y códigos usados. El script principal es MFCCAUTO.m

De antemano gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 63
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Automatizar funcion

Publicado por luis (36 intervenciones) el 05/12/2018 17:43:57
Me da este error:
Index exceeds matrix dimensions.

Error in MFCCAUTO (line 75)
plot(f,MPF(2*i-1,:),f,MPF(2*i,:));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Automatizar funcion

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/12/2018 18:13:14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
clear all
ruta=pwd;
clc
diract = cd;
directorio = uigetdir(cd,...
    'ELEGIR CARPETA DE AUDIOS QUE SE DESEAN CARGAR');
if isequal(directorio,0)
    msgbox(...
        'No ha elegido ninguna carpeta',...
        'MENSAJE',...
        'help')
    return
end
cd(directorio)
lista = dir('*wav');
[n,~] = size(lista);
if isequal(n,0)
    msgbox(...
        'No hay ninguna imagen en la carpeta especificada',...
        'MENSAJE',...
        'help')
    cd(diract)
    return
end
names = cell(n,1);
for i = 1:n
    names{i} = lista(i).name;
end
cd(ruta)
for i = 1:n
   A{i}= audioread([directorio,'\',names{i}],[500,20799]);
    B=cell2mat(A);
    B = (bsxfun(@rdivide, bsxfun(@minus, B, mean(B)), std(B)));
    tw=25;
ts=10;
alpha=0.97;
R=[300 4000];
N=13;
L=22;
hamming = @(N)(0.54-0.46*cos(2*pi*[0:N-1].'/(N-1)));
M=20;
Fs=20000;
% n=512;              %Number of FFT points
% Tf=0.032;           %Frame duration in seconds
% N=Fs*Tf;            %Number of samples per frame
% fn=24;              %Number of mel filters
% l=length(B);        %total number of samples in speech
% Ts=0.016;            %Frame step in seconds
% FrameStep=Fs*Ts;    %Frame step in samples
% a=1;
% b=[1, -0.97];       %a and b are high pass filter coefficients
 [MFCC]= mfcc(B(:,i),20000,tw,ts,alpha,hamming,R,M,N,L);
% opt= mfccOptSet(20000)
% opt.frameSize=3000;
%  [MFCC(:,i)]= wave2mfcc(B(:,i), 20000, opt)
% [MFCC(:,i)]=kannumfcc(13,B(:,i),Fs);
% MFCC=  bsxfun(@minus, MFCC, mean(MFCC));
    MFILA=MFCC';
    [MPF,f]=lpcar2pf(MFILA,127);
%     MPF=sum(MPF)/128;
%     MPF=pow2db(MPF);
%     MPF2=transpose(MPF);
%     norm = transpose(bsxfun(@rdivide, bsxfun(@minus, MPF2, mean(MPF2)), std(MPF2)));
 
 
 
 
end
 for i =1:n/2
SR(i,:)=MPF(2*i,:);
CR(i,:)=MPF(2*i-1,:);
CB=pdist2(SR,CR,'cityblock');
CH=pdist2(SR,CR,'chebychev');
dCB=diag(CB);
dCH=diag(CH);
HM=pdist2(SR,CR,'hamming');
dHM=diag(HM);
      fig=figure;
      plot(f,MPF(2*i-1,:),f,MPF(2*i,:));
      xlabel('Frecuencia normalizada')
      ylabel('Espectro de potencia MFCC [dB]')
      legend('Posfiltrada','Limpia')
      print(fig,['miplot',num2str(i)],'-dpng');
      pause(0.5)
       eu(i)=disteusq(MPF(2*i-1,:),MPF(2*i,:),'s');
      deu=eu';
       pm=corrcoef(MFILA(2*i-1,:),MFILA(2*i,:)) ;
       pcorM(i)=pm(1,2);
       pcorM=pcorM';
      rmseM(i,:)=sqrt(sum((MFILA(2*i-1,:)-MFILA(2*i,:)).^2))*(1/13);
       EUCLIDIANA= xlswrite('MFCC2.xlsx',deu,'A2:A26');
       cosh(i)=abs(distchpf(MPF(2*i-1,:),MPF(2*i,:)));
      dcosh=10*cosh';
      COSH= xlswrite('MFCC.xlsx',dcosh,'B2:B26');
      DCB= xlswrite('MFCC2.xlsx',dCB,'b2:b26');
      DCH= xlswrite('MFCC2.xlsx',dCH,'c2:c26');
      DHM= xlswrite('MFCC.xlsx',dHM,'E2:E26');
       p=corrcoef(MPF(2*i-1,:),MPF(2*i,:)); 
       pcor(i)=p(1,2);
      pcor=pcor';
      rmse(i,:)=sqrt(sum((MPF(2*i-1,:)-MPF(2*i,:)).^2)*(1/512));
     end
cd(diract)


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar