function coef = coeff_mfcc(y, fs, wind, winover, padd, NFFT, p, eq)

% coef = coeff_mfcc(y, fs, wind, winover, padd, NFFT, p, eq)
% 
% Funkcia, ktorá vráti Mel Frequency Cepstral Coefficients (MFCC).
% 
% 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)
% eq        - ak je nastavený na 1 budú aplikované krivky rovnakej hlasitosti (default: 0)
% coef      - matica s MFCC 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 = 15;
    elseif (fs <= 11e3)
        p = 17;
    elseif (fs <= 16e3)
        p = 20;
    elseif (fs <= 22e3)
        p = 22;
    else
        p = 27;
    end
end
if ((nargin < 8) || (isempty(eq)))
    eq = 0;
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 = melbank(fs, size(P,1), p, eq);

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

%% Aplikovanie základného logaritmu
c = log(c);

%% Výpočet diskrétnej cosínovej transformácie
coef = dct(c);

%% Výpočet logaritmu energie
coef(1, :) = log(abs(sum(Y)).^2);