function coef = coeff_plp(y, fs, wind, winover, padd, NFFT, p, Q)

% coef = coeff_plp(y, fs, wind, winover, padd, NFFT, p, Q)
% 
% Funkcia, ktorá vráti Perceptive Linear Predictive (PLP)
% koeficient.
% 
% y         - vstupný vektor
% fs        - vzorkovacia frekvencia
% wind      - dĺžka okna vo vzorkoch 
% winover   - presah okna vo vzorkoch
% padd      - ak je nastavený na 1, posledný segment bude vyplnený nulami,
%             ak je to potrebné (default: 0)
% NFFT      - počet FFT bodov (default: 2048)
% p         - počet filtrov v banke (default: depending on fs)
% Q         - rád lineárnej predikcie (default: fs/1000 + 2)
% coef      - matica s PLP koeficientami, segmenty sú prepojené so stĺpcami

%% Cesty a premenné
if ((nargin < 3) || (isempty(wind)))
    wind = hamming(0.02*fs); 
end
if ((nargin < 4) || (isempty(winover)))
    winover =  length(wind)/2;
end
if ((nargin < 5) || (isempty(padd)))
    padd = 0;
end
if ((nargin < 6) || (isempty(NFFT)))
    NFFT = 2048;
end
if ((nargin < 7) || (isempty(p)))
    if (fs <= 8e3)
        p = 17;
    elseif (fs <= 11e3)
        p = 19;
    elseif (fs <= 16e3)
        p = 21;
    elseif (fs <= 22e3)
        p = 23;
    else
        p = 27;
    end
end
if ((nargin < 8) || (isempty(Q)))
    Q = fix(fs/1e3) + 2;
end

%% Segmentácia vstupného signálu
[rows, cols] = size(y);
if ((rows == 1) || (cols == 1))
    if (rows < cols)
        y = y.';
    end
    Y = segmentation(y, wind, winover, padd);
else
    Y = y;
end

%% Výpočet spektra
P = abs(fft(Y, NFFT)).^2;
P = P(1:ceil(end/2), :);

%% Banka filtrov
M = barkbank(fs, size(P, 1), p, 1);

%% Použitie banky a suma vzorkov
c = M*P;

%% Nastavenie hodnôt do intenzity
c(1, :)   = 2.*c(1, :);
c(end, :) = 2.*c(end, :);
c = c.^(0.3);

%% Aproximácia pomocou AR modelu
rx = real(ifft([c; flipud(c)]));
rx = rx(1:p, :);

[coef, e] = levinson(rx, Q);
coef = coef'./repmat(e', size(coef, 2), 1);