clear
clc
close all
load Apagar1.txt
jj = 0;
S = zeros(1,6000*8); %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***
%
for j=1:x
[Sw,Swc,Seg] = Segmentacion(j,Spp,nm);
[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; %Factoresdemultiplicidadparaloscoeficientes
%---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)); 
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));
%***Reflexión complementario****
Ni1 = rxx1(i+1)-(rxx1b(i))'*Ki1; 
Di1 = rxx1(1)-(rxx1(i))'*Ki1; 
Ki1 = ceil(Ni1/floor(Di1/f1));
%***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
end


