Mercurial > hg > ltpda
diff m-toolbox/classes/@specwin/specwin.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@specwin/specwin.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,303 @@ +% SPECWIN spectral window object class constructor. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: SPECWIN spectral window object class constructor. +% Create a spectral window from libSpecWin. +% +% SUPERCLASSES: ltpda_nuo < ltpda_obj +% +% SPECWIN CONSTRUCTORS: +% +% w = specwin() - creates an empty object +% w = specwin(w) - copies a specwin object +% w = specwin('name') - creates the specified specwin object +% w = specwin('name', N) - creates a specwin object of a +% particular type and length. +% w = specwin('Kaiser', N, psll) - create a specwin Kaiser window +% with the prescribed psll. +% +% 'name' should be one of the following standard windows: +% +% Rectangular, Welch, Bartlett, Hanning, Hamming, +% Nuttall3, Nuttall4, Nuttall3a, Nuttall3b, Nuttall4a +% Nuttall4b, Nuttall4c, BH92, SFT3F, SFT3M, FTNI, SFT4F, SFT5F +% SFT4M, FTHP, HFT70, FTSRS, SFT5M, HFT90D, HFT95, HFT116D +% HFT144D, HFT169D, HFT196D, HFT223D, HFT248D +% +% VERSION: $Id: specwin.m,v 1.80 2011/05/24 16:19:00 mauro Exp $ +% +% SEE ALSO: ltpda_obj, ltpda_nuo +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +classdef (Hidden = true) specwin < ltpda_nuo + + %------------------------------------------------ + %---------- Private read-only Properties -------- + %------------------------------------------------ + properties (SetAccess = private) + type = ''; % name of window object + alpha = []; % alpha parameter for various window functions + psll = []; % peak sidelobe level + rov = []; % recommended overlap + nenbw = []; % normalised equivalent noise bandwidth + w3db = []; % 3 dB bandwidth in bins + flatness = []; % window flatness + levelorder = []; % levelling coefficient + skip = []; % number of bins to skip + end + + properties (SetAccess = public) + len = 0; % window number of samples + end + + properties (Dependent = true, SetAccess = private, Hidden = true) + win = []; % window samples + ws = 0; % sum of window values + ws2 = 0; % sum of squares of window values + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Check property setting % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods + function obj = set.win(obj, vals) + obj.len = length(vals); + end + + function obj = set.ws(obj, ~) + end + + function obj = set.ws2(obj, ~) + end + + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Getters for constant properties % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods + function win = get.win(obj) + win_name = sprintf('win_%s', lower(obj.type)); + win = feval(win_name, obj, 'build'); + end % win get method + + function ws = get.ws(obj) + if obj.len ~= 0 + % In this case, we need to calculate the property 'win' before + ws = sum(obj.win); + else + ws = 0; + end + end + + function ws2 = get.ws2(obj) + if obj.len ~= 0 + % In this case, we need to calculate the property 'win' before + ws2 = sum(obj.win .* obj.win); + else + ws2 = 0; + end + end + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Constructor % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + methods + function ww = specwin(varargin) + + import utils.const.* + utils.helper.msg(msg.OMNAME, 'running %s/%s', mfilename('class'), mfilename); + + %%%%%%%%%% Set dafault values %%%%%%%%%% + + switch nargin + case 0 + utils.helper.msg(msg.OPROC1, 'empty constructor'); + + case 1 + if isa(varargin{1}, 'specwin') + utils.helper.msg(msg.OPROC1, 'copy constructor'); + %%%%%%%%%% spw = specwin(specwin-object) %%%%%%%%%% + % copy existing specwin + ww = copy(varargin{1}, 1); + + elseif isstruct(varargin{1}) + %%%%%%%%%% spw = specwin(struct) %%%%%%%%%% + utils.helper.msg(msg.OPROC1, 'constructing from struct'); + ww = fromStruct(ww, varargin{1}); + + elseif ischar(varargin{1}) + %%%%%%%%%% spw = specwin(window-name) %%%%%%%%%% + utils.helper.msg(msg.OPROC1, 'constructing from string'); + N = find(specwin.getInfo('specwin', 'From Window').plists, 'N'); + ww = get_window(ww, varargin{1}, N); + + else + error('### Unknown 1 argument constructor for specwin object.') + end + + case 2 + utils.helper.msg(msg.OPROC1, 'constructing type %s', varargin{1}); + if ischar(varargin{1}) + %%%%%%%%%% spw = specwin('Win_type', N) %%%%%%%%%% + ww = get_window(ww, varargin{1}, varargin{2}); + + elseif isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl') && ... + isa(varargin{2}, 'history') + %%%%%%%%%% obj = specwin(DOM node, history-objects) %%%%%%%%%% + ww = fromDom(ww, varargin{1}, varargin{2}); + + else + error('### Unknown 2 argument constructor for specwin object.') + end + + case 3 + utils.helper.msg(msg.OPROC1, 'constructing type %s', varargin{1}); + %%%%%%%%%% spw = specwin('Kaiser', N, psll) %%%%%%%%%% + %%%%%%%%%% spw = specwin('levelledHanning', N, levelcoeff) %%%%%%%%%% + ww = get_window(ww, varargin{1}, varargin{2}, varargin{3}); + + otherwise + error('### Unknown number of constructor arguments'); + end % End of constructor + + end + + end % End constructor + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (Static, Public) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Static = true) + + function ww = getTypes() + ww = {... + 'Rectangular', 'Welch', 'Bartlett', 'Hanning', 'Hamming',... + 'Nuttall3', 'Nuttall4', 'Nuttall3a', 'Nuttall3b', 'Nuttall4a',... + 'Nuttall4b', 'Nuttall4c', 'BH92', 'SFT3F', 'SFT3M', 'FTNI', 'SFT4F', 'SFT5F',... + 'SFT4M', 'FTHP', 'HFT70', 'FTSRS', 'SFT5M', 'HFT90D', 'HFT95', 'HFT116D',... + 'HFT144D', 'HFT169D', 'HFT196D', 'HFT223D', 'HFT248D', ... + 'Kaiser', ... + 'levelledHanning'... + }; + end + + function out = VEROUT() + out = '$Id: specwin.m,v 1.80 2011/05/24 16:19:00 mauro Exp $'; + end + + function ii = getInfo(varargin) + ii = utils.helper.generic_getInfo(varargin{:}, 'specwin'); + end + + function out = SETS() + out = {'Default', 'From Window'}; + end + + function out = getDefaultPlist(set) + switch lower(set) + case 'default' + out = plist(); + case 'from window' + prefs = getappdata(0, 'LTPDApreferences'); + out = plist('type', char(prefs.getMiscPrefs.getDefaultWindow), 'N', 0); + otherwise + error('### Unknown set [%s]', set); + end + end + + function obj = initObjectWithSize(n,m) + obj = specwin.newarray([n m]); + end + + end % End static methods + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (Static, Private) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Static = true, Access = private) + + varargout = kaiser_alpha(varargin) + varargout = kaiser_flatness(varargin) + varargout = kaiser_nenbw(varargin) + varargout = kaiser_rov(varargin) + varargout = kaiser_w3db(varargin) + + end % End static private methods + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (static, hidden) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Static = true, Hidden = true) + varargout = loadobj(varargin) + varargout = update_struct(varargin) + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (public) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Hidden = true) + varargout = attachToDom(varargin) + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (protected) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Access = protected) + varargout = fromStruct(obj, obj_struct) + varargout = fromDom(varargin) + + varargout = get_window(varargin) + varargout = win_bh92(varargin) + varargout = win_bartlett(varargin) + varargout = win_fthp(varargin) + varargout = win_ftni(varargin) + varargout = win_ftsrs(varargin) + varargout = win_hft116d(varargin) + varargout = win_hft144d(varargin) + varargout = win_hft169d(varargin) + varargout = win_hft196d(varargin) + varargout = win_hft223d(varargin) + varargout = win_hft248d(varargin) + varargout = win_hft70(varargin) + varargout = win_hft90d(varargin) + varargout = win_hft95(varargin) + varargout = win_hamming(varargin) + varargout = win_hanning(varargin) + varargout = win_nuttall3(varargin) + varargout = win_nuttall3a(varargin) + varargout = win_nuttall3b(varargin) + varargout = win_nuttall4(varargin) + varargout = win_nuttall4a(varargin) + varargout = win_nuttall4b(varargin) + varargout = win_nuttall4c(varargin) + varargout = win_rectangular(varargin) + varargout = win_sft3f(varargin) + varargout = win_sft3m(varargin) + varargout = win_sft4f(varargin) + varargout = win_sft4m(varargin) + varargout = win_sft5f(varargin) + varargout = win_sft5m(varargin) + varargout = win_welch(varargin) + varargout = win_kaiser(varargin) + varargout = win_levelledhanning(varargin) + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (private) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Access = private) + end + +end % End classdef +