Code covered by the BSD License  

Highlights from
MIRtoolbox

image thumbnail
from MIRtoolbox by Olivier Lartillot
An innovative environment, on top of Matlab, for music and audio analysis

mirentropy(x,varargin)
function varargout = mirentropy(x,varargin)
%   h = mirentropy(a) calculates the relative entropy of a.
%   (Cf. User's Manual.)
%   mirentropy(..., ?Center?) centers the input data before
%       transforming it into a probability distribution.

        center.key = 'Center';
        center.type = 'Boolean';
        center.default = 0;
    option.center = center;
    
specif.option = option;

varargout = mirfunction(@mirentropy,x,varargin,nargout,specif,@init,@main);


function [x type] = init(x,option)
if isamir(x,'miraudio')
    x = mirspectrum(x);
end
type = 'mirscalar';


function h = main(x,option,postoption)
if iscell(x)
    x = x{1};
end
m = get(x,'Data');
v = cell(1,length(m));
for h = 1:length(m)
    v{h} = cell(1,length(m{h}));
    for k = 1:length(m{h})
        mk = m{h}{k};
        mn = mk;
        if isa(x,'mirhisto') || isa(x,'mirscalar')
            mn = mn';
        end
        
        if option.center
            mn = center(mn);
        end
        
        % Negative data is trimmed:
        mn(mn<0) = 0;
        
        % Data is normalized such that the sum is equal to 1.
        mn = mn./repmat(sum(mn)+repmat(1e-12,...
                            [1 size(mn,2) size(mn,3) size(mn,4)]),...
                       [size(mn,1) 1 1 1]);
                   
        % Actual computation of entropy
        v{h}{k} = -sum(mn.*log(mn + 1e-12))./log(size(mn,1));
        
        if isa(x,'mirhisto') || isa(x,'mirscalar')
            v{h}{k} = v{h}{k}';
        end
    end
end
t = ['Entropy of ',get(x,'Title')];
h = mirscalar(x,'Data',v,'Title',t);

Contact us at files@mathworks.com