Mercurial > hg > ltpda
diff m-toolbox/classes/@mfir/parseFilterParams.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/@mfir/parseFilterParams.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,100 @@ +% PARSEFILTERPARAMS parses the input plist and returns a full plist for designing a standard FIR filter. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: PARSEFILTERPARAMS parses the input plist and returns a full +% plist for designing a standard FIR filter. Defaults are used +% for those parameters missing from the input plist. +% +% CALL: plo = parseFilterParams(pl) +% +% INPUT: 'type' - one of 'highpass', 'lowpass', 'bandpass', 'bandreject'. +% [default: 'lowpass'] +% 'gain' - gain of filter [default: 1.0] +% 'fs' - sample frequency to design for [default: 1 Hz] +% 'order' - order of filter [default: 64] +% 'fc' - corner frequencies. This is a two element vector for +% bandpass and bandreject filters. [default: 0.1 or [0.1 0.25] Hz] +% 'Win' - a window object to use in the design. [default: Hamming] +% +% VERSION: $Id: parseFilterParams.m,v 1.9 2010/10/29 16:09:13 ingo Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function plo = parseFilterParams(pl) + + plo = plist(); + + % type + type = find(pl, 'type'); + if isempty(type) + type = 'lowpass'; + utils.helper.msg(msg.OPROC2, 'using default type ''lowpass'''); + end + plo = append(plo, 'type', type); + + % gain + gain = find(pl, 'gain'); + if isempty(gain) + gain = 1.0; + utils.helper.msg(msg.OPROC2, ['using default gain ' num2str(gain)]); + end + plo = append(plo, 'gain', gain); + + % order + order = find(pl, 'order'); + if isempty(order) + order = 64; + utils.helper.msg(msg.OPROC2, ['- using default order ' num2str(order)]); + end + if mod(order,2) == 1 + warning('!!! reseting filter order to even number (+1)') + order = order + 1; + end + plo = append(plo, 'order', order); + + % fc + fc = find(pl, 'fc'); + if isempty(fc) + if strcmp(type, 'bandreject') || strcmp(type, 'bandpass') + fc = [0.1 0.25]; + else + fc = 0.1; + end + utils.helper.msg(msg.OPROC2, ['- using default fc ' num2str(fc)]); + end + plo = append(plo, 'fc', fc); + + % fs + fs = find(pl, 'fs'); + if isempty(fs) + fs = 10*max(fc); + warning([sprintf('!!! no sample rate specified. Designing for fs=%2.2fHz.', fs)... + sprintf('\nThe filter will be redesigned later when used.')]); + end + plo = append(plo, 'fs', fs); + + % win + win = find(pl, 'Win'); + if isempty(win) + % then we use the default window + win = specwin('Hamming', order+1); + elseif ischar(win) + if strcmpi(win, 'kaiser') + win = specwin(win, order+1, win.psll); + else + win = specwin(win, order+1); + end + end + if length(win.win) ~= order + 1 + warning('!!! setting window length to filter order !!!'); + switch lower(win.type) + case 'kaiser' + win = specwin(win.type, order + 1, win.psll); + otherwise + win = specwin(win.type, order + 1); + end + end + plo = append(plo, 'Win', win); +end + +