www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wmultisig1d/partstdqual.m

    function varargout = partstdqual(PART,signals,flagN)
%PARTSTDQUAL Partition STD quality indices.
%   [sdtQ1,sdt_Q2,glb_STD,meanVAL,medianVAL,loc_STD] = ...
%           partstdqual(PART,signals)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 02-Feb-2006.
%   Last Revision: 06-Sep-2006.

if nargin<3 , flagN = 0; end
nbPART = length(PART);
nbVAL  = size(signals,2);
if nbPART>1 , OUT = cell(nbPART,6); end
for j =1:nbPART
    if iscell(PART(j)), curPART = PART{j}; else  curPART  = PART(j); end
    NbCLU    = curPART.NbCLU;
    IdxInCLU = curPART.IdxInCLU;
    meanVAL  = zeros(NbCLU,nbVAL);
    medianVAL = zeros(NbCLU,nbVAL);
    loc_STD  = zeros(NbCLU,nbVAL);
    glb_STD  = zeros(NbCLU,1);
    maxVAL   = zeros(NbCLU,1);
    minVAL   = zeros(NbCLU,1);
    for k = 1:NbCLU
        Sig = signals(IdxInCLU{k},:);
        meanVAL(k,:)   = mean(Sig);
        medianVAL(k,:) = median(Sig);
        loc_STD(k,:)   = std(Sig,flagN);
        glb_STD(k)     = sqrt(sum(loc_STD(k,:).*loc_STD(k,:))/nbVAL);
        maxVAL(k)      = max(max(abs(Sig)));
        minVAL(k)      = min(min(abs(Sig)));
    end
    if maxVAL>0
        sdt_Q1 = 1-glb_STD./maxVAL;
    else
        sdt_Q1 = ones(size(glb_STD));
    end
    if (maxVAL-minVAL)>0
        sdt_Q2 = glb_STD./(maxVAL-minVAL);
    else
        sdt_Q2 = zeros(size(glb_STD));
    end
    if nbPART>1
        OUT(j,:) = {sdt_Q1,sdt_Q2,glb_STD,meanVAL,medianVAL,loc_STD};
    end
end
if nbPART<2
    varargout = {sdt_Q1,sdt_Q2,glb_STD,meanVAL,medianVAL,loc_STD};
else
    for k =1:6 , varargout{k} = OUT(:,k); end
end