close all
clc

recObj = audiorecorder(42000, 24, 1);
recObj.StartFcn = 'disp('' Start speaking '')';
%recOnj.StopFcn = 'disp('' End of Recording '')';


input('Press to record voice');
recordblocking(recObj, 1);
disp('End of recording. Playing back ...');
y = getaudiodata(recObj);
%[y,Fs] = audioread('Apagar1.mp3');
fileID =  fopen('Primero.txt','w');
fprintf(fileID, '%d\n', y);
fclose(fileID);

plot(y)

%Fs = 42000;
%load Frio2.txt
load Primero.txt
jj = 0;
S = zeros(1,5250*8); %Señal de Voz de entrada
for i = 1:1:42000
%     S(i) = Prueba(:,i)*10000000;
    S(i) = Primero(i,:)*100000000;
end
N = length(S);

[E,Eav,Ssr,nseg] = Eliminacion(S,N); %Función de la etapa de Eliminación del nivel de ruido
Ns = length(Ssr);


%regla de 3 con el tiempo de grabación
Fs = 50e3; %Frecuencia de muestreo a utilizar, para este caso la voz.
To = N/Fs; %Tiempo de grabación-> Señal de Entrada
Tg = Ns*To/N; %Tiempo de grabación-> Señal recortada
nm = 30e-3*Fs; % Númer

[Spp] = Pre_enfasis(Ssr,Ns);

x = fix(Ns/nm);
y = 15;
a = zeros(2*x,y);
aj = zeros(1,y);
aj1 = zeros(1,y);

%aj1=0;
for j=1:x
    
 [Sw,Swc,Seg] = Segmentacion(j,Spp,nm);
 [rxx0, rxx1, Swn, Swcn, auto] = Autocorrelacion(nm, Sw, Swc);
 m = length(rxx0);
 b = (2*j)-1;
 v = (2*j);
 rxx0b = rxx0(m:-1:1);
 a(b,1) = fix(rxx0(2)/(rxx0(1)/8));
 Ki = fix(rxx0(2)/(rxx0(1)/8));
 f1=4096;
 rxx1b = rxx1(m:-1:1);
 a(v,1) = fix(rxx1(2)/(rxx1(1)/8));
 Ki1 = fix(rxx1(2)/(rxx1(1)/8));
 for i = 2:m-1
     Ni = rxx0(i+1)-(rxx0b(i))'*Ki;
     Di = rxx0(1)-(rxx0(i))'*Ki;
     Ki = ceil(Ni/floor(Di/f1));
     
     Ni1 = rxx1(i+1)-(rxx1b(i))'*Ki1;
     Di1 = rxx1(1)-(rxx1(i))'*Ki1;
     Ki1 = ceil(Ni1/floor(Di1/f1));
     for h = 1:i-1
         aaj = floor((Ki*a(b,i-h))/f1);
         aj(h) = (a(b,h))-aaj;
         aj(i) = Ki;
         aaj1 = floor((Ki1*a(v,i-h))/f1);
         aj1(h) = (a(v,h))-aaj1;
         aj1(i) = Ki1;
     end
     a(b,:) = aj;
     a(v,:) = aj1;
 end 
end

l=0;

lpc=zeros(1,2*x*y);
for i = 1:1:2*x
    for k = 1:1:y
        l=l+1;
        lpc(l) = a(i,k);
    end
end
        

scrsz = get(0,'ScreenSize');
figure('Name','Señal de Voz','Position',[0 48 scrsz(3) scrsz(4)/1.205])
subplot(2,1,1),plot(S),title('Señal de Voz sin ruido'),xlabel('Número de Muestras'),ylabel('Amplitud de las Muestras'),grid
subplot(2,1,2),plot(Ssr),title('Señal de Voz filtrada (Pre-énfasis)'),xlabel('Número de Muestras'),ylabel('Amplitud de las Muestras'),grid
%soundsc(Ssr,50e3);


figure('Name','Coeficientes','Position',[0 48 scrsz(3) scrsz(4)/1.205])
plot(lpc,'-o','MarkerFaceColor','r'),title('Coeficientes LPC SEÑAL DE VOZ 1'),xlabel('Número de Segmentos'),ylabel('Amplitud de los Coeficientes'),grid
%aa=a;



% ///////////----nuevo audio de comparacion--------//////%
input('Press to load audio for compare');

%nuevo audio
recObj = audiorecorder(42000, 16, 1);
disp('Recording....');
recordblocking(recObj, 1);
disp('End of recording. Playing back ...');


y4 = getaudiodata(recObj);

fileID2 =  fopen('Segundo.txt','w');
fprintf(fileID2, '%d\n', y4);
fclose(fileID2);

plot(y4)

%Fs = 42000;
%load Frio2.txt
load Segundo.txt


%load Frio2.txt
jj2 = 0;
S2 = zeros(1,5250*8); %Señal de Voz de entrada
for i = 1:1:42000
    S2(i) = Segundo(i,:)*100000000;
end
N2 = length(S2);

[E2,Eav2,Ssr2,nseg2] = Eliminacion2(S2,N2); 
Ns2 = length(Ssr2);

%regla de 3 con el tiempo de grabación
Fs2 = 50e3; %Frecuencia de muestreo a utilizar, para este caso la voz.
To2 = N2/Fs2; %Tiempo de grabación-> Señal de Entrada
Tg2 = Ns2*To2/N2; %Tiempo de grabación-> Señal recortada
nm2 = 30e-3*Fs2; % Númer

[Spp2] = Pre_enfasis2(Ssr2,Ns2);

x2 = fix(Ns2/nm2);
y2 = 15;
a2 = zeros(2*x2,y2);
aj2 = zeros(1,y2);
aj12 = zeros(1,y2);

for j=1:x2
    
 [Sw2,Swc2,Seg2] = Segmentacion2(j,Spp2,nm2);
 [rxx02, rxx12, Swn2, Swcn2, auto2] = Autocorrelacion2(nm2, Sw2, Swc2);
 m2 = length(rxx02);
 b2 = (2*j)-1;
 v2 = (2*j);
 rxx0b2 = rxx02(m2:-1:1);
 a2(b2,1) = fix(rxx02(2)/(rxx02(1)/8));
 Ki2 = fix(rxx02(2)/(rxx02(1)/8));
 f12=4096;
 rxx1b2 = rxx12(m2:-1:1);
 a2(v2,1) = fix(rxx12(2)/(rxx12(1)/8));
 Ki12 = fix(rxx12(2)/(rxx12(1)/8));
 for i = 2:m2-1
     Ni2 = rxx02(i+1)-(rxx0b2(i))'*Ki2;
     Di2 = rxx02(1)-(rxx02(i))'*Ki2;
     Ki2 = ceil(Ni2/floor(Di2/f12));
     
     Ni12 = rxx12(i+1)-(rxx1b2(i))'*Ki12;
     Di12 = rxx12(1)-(rxx12(i))'*Ki12;
     Ki12 = ceil(Ni12/floor(Di12/f12));
     for h = 1:i-1
         aaj2 = floor((Ki2*a2(b2,i-h))/f12);
         aj2(h) = (a2(b2,h))-aaj2;
         aj2(i) = Ki2;
         aaj12 = floor((Ki12*a2(v2,i-h))/f12);
         aj12(h) = (a2(v2,h))-aaj12;
         aj12(i) = Ki12;
     end
     a2(b2,:) = aj2;
     a2(v2,:) = aj12;
 end 
end

l2=0;

lpc2=zeros(1,2*x2*y2);
for i = 1:1:2*x2
    for k = 1:1:y2
        l2=l2+1;
        lpc2(l2) = a2(i,k);
    end
end
        

scrsz2 = get(0,'ScreenSize');
figure('Name','Señal de Voz','Position',[0 48 scrsz2(3) scrsz2(4)/1.205])
subplot(2,1,1),plot(S2),title('Señal de Voz sin ruido'),xlabel('Número de Muestras'),ylabel('Amplitud de las Muestras'),grid
subplot(2,1,2),plot(Ssr2),title('Señal de Voz filtrada (Pre-énfasis)'),xlabel('Número de Muestras'),ylabel('Amplitud de las Muestras'),grid
%soundsc(Ssr,50e3);


figure('Name','Coeficientes','Position',[0 48 scrsz2(3) scrsz2(4)/1.205])
plot(lpc2,'-o','MarkerFaceColor','r'),title('Coeficientes LPC SEÑAL DE VOZ 2'),xlabel('Número de Segmentos'),ylabel('Amplitud de los Coeficientes'),grid
bb=a;
aa=a2;





%/////////////////////--------_/////////////////

Ccp = zeros(1,2*x);
x1 = zeros(1,y);
y1 = zeros(1,y);

for i=1:2*x
    for j=1:y 
    x1(j) = bb(i,j);
    y1(j) = aa(i,j); 
    end
xm1=fix(mean(x1)); %xm1=fix(mean(bb(i,:)));
ym1=fix(mean(y1)); %ym1=fix(mean(aa(i,:))); 

% Covarianza y Desviación Estándar
Sxy1 = 0;vx1 = 0;vy1 = 0; 

for k = 1:1:y
xiXm = x1(k)-xm1; 
yiYm = y1(k)-ym1;
Sxy1 =Sxy1+(floor(xiXm/y)*yiYm);%Ecuanción de Covarianza
vx1 = vx1 + xiXm^2; %Ecuación de Varianza 
vy1 = vy1 + yiYm^2;
end
dx1 = fix(sqrt(vx1)/(y-1)); %Ecuanción de Desviación Estándar 
dy1 = fix(sqrt(vy1)); 
%Ecuanción de Desviación Estándar        
dxdy1 = dx1*dy1;
Ccp(i) = fix((Sxy1)/(dxdy1/16384));
%*+*+*+Datos para Quartus II*+*+*+ -> Para crear las memorias ROM 
for q = 1:1:y
Xm(i,q)=floor((x1(q)-xm1)/y); %Restaparaelcálculodelacovarianzaentreelcomando end
end

D(i)=floor(sqrt(vx1)/(y-1)); %Desviaciónestandardelcomandodereferencia 
end
c=0; %cantidaddecoeficientesquesuperanelumbraldeigualdad 
for u = 1:2*x
    if Ccp(u) >= 1000
        c=c+1;
    end
end
 
porcen=c*100/(2*x); %PorcentajedeCoeficientesdePearsonquesuperanelumbraldecomparación 
if c >= 2*x-1
disp('Comando Válido') 
else
disp('Comando NO Válido') 
end

figure('Position',[0 48 scrsz(3) scrsz(4)/1.205])
plot(Ccp,'-o','MarkerFaceColor','y'),title('Coeficientes de Correlación de Pearson'),xlabel('Número de Coeficientes de Pearson'),ylabel('Amplitud de los Coeficientes'),grid
 
 
 
 
 
 
 
 
 
 
 
 
 