clear
clc
close all
load Apagar1.txt
jj = 0;
S = zeros(1,48000); %Señal de Voz de entrada
for i = 1:1:48000
    S(i) = Apagar1(:,i)*1000000;
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 = 48e3; %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úmero de Muestras de Cada Segmento (CS), 30ms es el tamaño de CS--Por regla de 3 con el número de muestras original
%****Pre - enfasis****
[Spp] = Pre_enfasis(Ssr,Ns);

x = fix(Ns/nm); %Número de segmentos necesarios para completar la segmentación de la señal de voz
y = 15; %Número de filas de la matriz, también servirá para el número de elementos del vector de coeficientes de autocorrelación
a = zeros(2*x,y); %Inicialización de la matriz de Coeficientes de la Codificación Predictiva Lineal
aj = zeros(1,y);

%****Segmentos*** y ****Enventanado***
%j
[Sw,Swc,Seg] = Segmentacion(j,Spp,nm);
%****Autocorrelación****
[rxx0, rxx1, Swn, Swcn, auto] = Autocorrelacion(nm, Sw, Swc);
m = length(rxx0); %Longitud del vector de coeficientes de autocorrelación
b = (2*j)-1; %para obtener numeros impares de las filas de la matriz a
v = (2*j); %para obtener numeros pares de las filas de la matriz a
%***Obtención de los Coeficientes de la codificación Predictiva Lineal***
%---Para el vector de autocorrelación normal---
rxx0b = rxx0(m:-1:1); %Inversión del vector de coeficientes de autocorrelación
a(b,1) = fix(rxx0(2)/(rxx0(1)/8)); %Primer coeficiente (Temporal)
Ki = fix(rxx0(2)/(rxx0(1)/8));
f1 = 4096; %Factores de multiplicidad para los coeficientes
%---Para el vector de autocorrelación Complementario---
rxx1b = rxx1(m:-1:1); %Inversión del vector de coeficientes de autocorrelación
a(v,1) = fix(rxx1(2)/(rxx1(1)/8)); %Primer coeficiente (Temporal)
Ki1 = fix(rxx1(2)/(rxx1(1)/8));
for i = 2:m-1
%***Reflexión normal****
Ni = rxx0(i+1)-(rxx0b(i))'*Ki;
Di = rxx0(1)-(rxx0(i))'*Ki;
Ki = ceil(Ni/floor(Di/f1)); %Ki*8192
%***Reflexión complementario****
Ni1 = rxx1(i+1)-(rxx1b(i))'*Ki1;
Di1 = rxx1(1)-(rxx1(i))'*Ki1;
Ki1 = ceil(Ni1/floor(Di1/f1)); %Ki*8192
%***LPC***
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
III
%=*=*= Convertir la matriz a en un vector *=*=*
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'),xlabel('Número de Segmentos'),ylabel('Amplitud de los Coeficientes'),grid
aa=a;

% =*=*=*=*=*=*=*=*=*=*=*=*=*
% Comparación por el método del Coeficiente de Correlación de Pearson
% =*=*=*=*=*=*=*=*=*=*=*=*=*
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); %Resta para el cálculo de la covarianza entre el comando
end %de referencia y el comando pronunciado
IV
D(i) = floor(sqrt(vx1)/(y-1)); %Desviación estandar del comando de referencia
end
c = 0; %cantidad de coeficientes que superan el umbral de igualdad
for u = 1:2*x
if Ccp(u) >= 15290
c = c+1;
end
end
porcen=c*100/(2*x) %Porcentaje de Coeficientes de Pearson que superan el umbral de comparació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