www.gusucode.com > signal 工具箱matlab源码程序 > signal/+fdesign/@abstracttype/tostring.m

    function str = tostring(this)
%TOSTRING

%   Copyright 2005-2015 The MathWorks, Inc.

s = get(this);
s = reorderstructure(s, 'Response', 'Specification', 'Description');

% Remove Description field
s = rmfield(s, 'Description');

% Remove sampling frequencies and normalized
s = rmfield(s, 'Fs');
if isfield(s,'Fs_in'), s = rmfield(s, 'Fs_in'); end
if isfield(s,'Fs_out'), s = rmfield(s, 'Fs_out'); end

% Remove CICRateChangeFactor if it exists and its value is 1
if isfield(s,'CICRateChangeFactor') && this.CICRateChangeFactor == 1
  s = rmfield(s,'CICRateChangeFactor');
end

s = rmfield(s,'NormalizedFrequency');

specs = getcurrentspecs(this);
if ~isempty(specs) && isfromdesignfilt(specs)
  s = rmfield(s,'Specification');
end

f = fieldnames(s);

param = cell(length(f)+1, 1);
value = param;

param{1} = getString(message('signal:dfilt:info:SamplingFrequency'));
if this.NormalizedFrequency
    if ~isempty(specs) && isfromdesignfilt(specs)
      value{1} = ['2 (' getString(message('signal:dfilt:info:Normalized')) ')'] ;
    else
      value{1} = getString(message('signal:dfilt:info:NAnormalizedFrequency'));
    end
    m = 1;
else
    [fs, m, prefix] = engunits(this.Fs);
    fpost    = sprintf(' %sHz', prefix);
    value{1} = [num2str(fs) fpost];
end

for indx = 1:length(f)
    
    if isnumeric(s.(f{indx})),
        num = str2num(f{indx}(end)); %#ok<ST2NM>
        if isempty(num),
            d = '';
        else
            switch num
                case 1
                    d = [getString(message('signal:dfilt:info:First')) ' '];
                case 2
                    d = [getString(message('signal:dfilt:info:Second')) ' '];
                case 3
                    d = [getString(message('signal:dfilt:info:Third')) ' '];
                case 4
                    d = [getString(message('signal:dfilt:info:Fourth')) ' '];
            end
        end
        
        switch lower(f{indx})
            case {'transitionwidth', 'transitionwidth1', 'transitionwidth2'};
                d    = [d getString(message('signal:dfilt:info:TransitionWidth'))]; %#ok<*AGROW>
            case {'apass', 'apass1', 'apass2'}
                d = [d getString(message('signal:dfilt:info:PassbandRipple'))];
            case {'astop', 'astop1', 'astop2'}
                d = [d getString(message('signal:dfilt:info:StopbandAtten'))];
            case {'fpass', 'fpass1', 'fpass2'}
                d = [d getString(message('signal:dfilt:info:PassbandEdge'))];
            case {'fstop', 'fstop1', 'fstop2'}
                d = [d getString(message('signal:dfilt:info:StopbandEdge'))];
            case {'f3db', 'f6db', 'f3db1', 'f6db1', 'f3db2', 'f6db2'}
                d = [d f{indx}(2) getString(message('signal:dfilt:info:dBPoint'))];
            case {'fcutoff', 'fcutoff1', 'fcutoff2'}
                d = [d getString(message('signal:dfilt:info:cutoffFrequency'))];                
            case {'groupdelay'}
                d = [d getString(message('signal:dfilt:info:GroupDelay'))];
            case {'nomgrpdelay'}
                d = [d getString(message('signal:dfilt:info:NominalGroupDelay'))];                
            case {'filterorder'}
                d = [d getString(message('signal:dfilt:info:FilterOrder'))];       
            case {'nbands'}
                d = [d getString(message('signal:dfilt:info:NumberofBands'))];
            case {'cicratechangefactor'}            
                  d = [d getString(message('signal:dfilt:info:CICRateChangeFactor'))];                
            case {'numberofsections'}            
                  d = [d getString(message('signal:dfilt:info:NumberofSections'))];    
            case {'differentialdelay'}
                  d = [d getString(message('signal:dfilt:info:DifferentialDelay'))];
            case {'decimationfactor'}
                  d = [d getString(message('signal:dfilt:info:DecimationFactor'))];    
            case {'interpolationfactor'}
                  d = [d getString(message('signal:dfilt:info:InterpolationFactor'))];                      
            otherwise
                  d = getTranslatedString('signal:dfilt:info',f{indx});
        end
        
        BiAmplitudesPattern = 'B.Amplitudes';
        BiRipplePattern     = 'B.Ripple';
        BiFreqRespPattern   = 'B.FreqResponse';
        
        if any(strcmpi(f{indx}, ...
                {'Amplitudes','FreqResponse','FilterOrder', ...
                'NumOrder','DenOrder','NumberOfSections','DifferentialDelay', ...
                'DecimationFactor','InterpolationFactor','q','BandsPerOctave',...
                'NBands','Ripple','Class','CICRateChangeFactor','PolynomialOrder'})) ...
                || any(regexp(f{indx},BiAmplitudesPattern)) ...
                || any(regexp(f{indx},BiRipplePattern))     ...
                || any(regexp(f{indx},BiFreqRespPattern))
            post = '';
            value{indx+1} = num2str(this.(f{indx}));
        elseif strncmpi(f{indx}, 'a', 1) || (strncmpi(f{indx}, 'g', 1) && ~strcmpi(f{indx},'groupdelay'))
            post = ' dB';
            value{indx+1} = num2str(this.(f{indx}));
        elseif any(strfind(lower(f{indx}), 'delay'))
            delay = this.(f{indx});
            post    = sprintf(' %s', getString(message('signal:dfilt:info:samples')));
            value{indx+1} = num2str(delay);
            
            if ~this.NormalizedFrequency,
              [~, m, prefix] = engunits(delay,'time');
              post = sprintf(' %s', prefix);
            end
            value{indx+1} = num2str(delay*m);
        elseif this.NormalizedFrequency
            value{indx+1} = num2str(this.(f{indx}));
            post    = '';
        else
            % Default: assumes a frequency with "Hz" units
            [val , ~, valprefix] = engunits(this.(f{indx}));
            post    = sprintf(' %sHz', valprefix);
            value{indx+1} = num2str(val);
        end
        
        value{indx+1} = sprintf('%s%s', value{indx+1}, post);
        param{indx+1} = d;
        
    elseif islogical(s.(f{indx}))
        param{indx+1} = f{indx};
        if s.(f{indx})
          value{indx+1} = getString(message('signal:dfilt:info:true'));
        else
          value{indx+1} = getString(message('signal:dfilt:info:false'));
        end          
    else
        if strcmpi(f{indx},'weightingtype')
          param{indx+1} = getString(message('signal:dfilt:info:WeightingType'));
        elseif strcmpi(f{indx},'multiratetype')
          param{indx+1} = getString(message('signal:dfilt:info:MultirateType'));          
        else
          param{indx+1} = getTranslatedString('signal:dfilt:info',f{indx});
        end
        value{indx+1} = s.(f{indx});
    end
end

str = [char(param) repmat(' : ', length(param), 1) char(value)];