function x_k_v=quantify2(x_k, bitnum, mode, symmetry, C)

% x_k_v=quantify2(x_k, bitnum, mode, symmetry, C)
% 
% x_k - a kvantalando jelsorozat
% bitnum - a kvantalo bitszama, felbontasa
% mode - a kvantalo tipusa
%   0 - linearis
%   1 - A-szabaly
%   2 - Mu-szabaly
% symmetry - kvanatalas tipusa
%   sym - szimmetrikus
%   asym - aszimmetrikus
% C - dinamika tartomany (teljes kivezérlés esetén C=max(abs(x_k))
% x_k_v - a kvantalt jel

N=2^bitnum; % a szintek szama

if mode==0
    x_tmp=x_k; % linearis kvantalas eseten, nincs l() fv.
    C2=C;
    x_tmp(x_tmp>C2) = C2; x_tmp(x_tmp<-C2) = -C2;  % túlvezérlés kezelése

elseif mode==1
    x_tmp=compand(x_k,87.6,C,'A/compressor'); % A-szabaly szerinti kompresszio
    C2=compand(C,87.6,C,'A/compressor');
    x_tmp(x_tmp>C2) = C2; x_tmp(x_tmp<-C2) = -C2;  % túlvezérlés kezelése

elseif mode==2
    x_tmp=compand(x_k,255,C,'mu/compressor'); % Mu-szabaly szerinti kompresszio
    C2=compand(C,87.6,C,'mu/compressor');
    x_tmp(x_tmp>C2) = C2; x_tmp(x_tmp<-C2) = -C2;  % túlvezérlés kezelése
    
else
    x_k_v=NaN; % ha nem ad meg mode-ot, kilepunk Not-A-Number-rel
    return;

end

switch symmetry
    case 'asym'
        % aszimmetrikus kvantálás
        delta=2*C2/N; % a lepeskoz adott jel eseten 2C/N keplettel
        x_k_v_tmp=delta*ceil(x_tmp/delta); % ertekek kvantalasa->aszimmetrikus kvantálás
    case 'sym'
        % szimmetrikus kvantálás
        delta=2*C2/(N-1); % a lepeskoz adott jel eseten 2C/(N-1) keplettel
        % valami hiba itt van!
        x_k_v_tmp=-C2 + delta*round((x_tmp+C2)/delta); % ertekek kvantalasa->aszimmetrikus kvantálás
    otherwise
        x_k_v_tmp = zeros(size(x_tmp));
end

if mode==0
    x_k_v=x_k_v_tmp; % keszen vagyunk, nincs l^-1() fv.

elseif mode==1
    x_k_v=compand(x_k_v_tmp,87.6,C,'A/expander'); % A-szabaly szerinti expandalas
    
elseif mode==2
    x_k_v=compand(x_k_v_tmp,255,C,'mu/expander'); % Mu-szabaly szerinti expandalas

end