0001 function [is_valid, reason] = vb_signal_processor_is_valid_parm(parm)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 if ~exist('parm', 'var')
0018 error('parm is a required parameter.');
0019 end
0020
0021
0022
0023
0024 d = vb_define_signal_processor;
0025
0026 switch(parm.type)
0027 case d.TYPE_PROCESSING_BIAS_CORRECTION
0028 [is_valid, reason] = inner_check_bias_correction(parm);
0029 case d.TYPE_PROCESSING_HIGHPASS
0030 [is_valid, reason] = inner_check_highpass(parm);
0031 case d.TYPE_PROCESSING_LOWPASS
0032 [is_valid, reason] = inner_check_lowpass(parm);
0033 case d.TYPE_PROCESSING_BANDPASS
0034 [is_valid, reason] = inner_check_bandpass(parm);
0035 case d.TYPE_PROCESSING_STOPBAND
0036 [is_valid, reason] = inner_check_stopband(parm);
0037 case d.TYPE_PROCESSING_DOWNSAMPLE
0038 [is_valid, reason] = inner_check_downsampling(parm);
0039 case d.TYPE_PROCESSING_COMMON_REFERENCE
0040 [is_valid, reason] = inner_check_common_reference(parm);
0041 otherwise
0042 error('Unknown parameter type was specified.');
0043 end
0044
0045
0046
0047
0048
0049 function [is_valid, reason] = inner_check_bias_correction(parm)
0050 is_valid = true;
0051 reason = '';
0052 if length(parm.mode) == 2
0053 if parm.mode(1) < 0 || parm.mode(2) <= 0 || parm.mode(1) >= parm.mode(2)
0054 is_valid = false;
0055 reason = 'Specified ''mode''(time window[t1, t2]) is invalid.';
0056 end
0057 elseif (parm.mode == 0 || parm.mode == 1 || parm.mode == 2)
0058
0059 else
0060 is_valid = false;
0061 reason = 'The specified ''mode'' is invalid.';
0062 end
0063
0064
0065 function [is_valid, reason] = inner_check_highpass(parm)
0066 is_valid = true;
0067 reason = '';
0068 if parm.cutoff_freq <= 0
0069 is_valid = false;
0070 reason = 'The specified ''Cutoff frequency'' is invaild.';
0071 elseif ~(parm.impulse_response == 1 || parm.impulse_response == 2)
0072 is_valid = false;
0073 reason = 'The specified ''Impulse response'' is invalid.';
0074 elseif parm.impulse_response == 2 && ...
0075 (parm.order < 0 || ceil(parm.order) ~= parm.order)
0076 is_valid = false;
0077 reason = 'The specified ''Filter order'' is invalid.';
0078 elseif ~(parm.filtfilt == 0 || parm.filtfilt == 1)
0079 is_valid = false;
0080 reason = 'The specified ''Time delay correction'' is invalid.';
0081 end
0082
0083 function [is_valid, reason] = inner_check_lowpass(parm)
0084 is_valid = true;
0085 reason = '';
0086 [is_valid, reason] = inner_check_highpass(parm);
0087
0088
0089 function [is_valid, reason] = inner_check_bandpass(parm)
0090 is_valid = true;
0091 reason = '';
0092 if parm.cutoff_freq_low <= 0
0093 is_valid = false;
0094 reason = 'The specified ''Lower cutoff frequency'' is invalid.';
0095 elseif parm.cutoff_freq_high <= 0
0096 is_valid = false;
0097 reason = 'The speicifed ''Higher cutoff frequency'' is invaild.';
0098 elseif parm.cutoff_freq_low >= parm.cutoff_freq_high
0099 is_valid = false;
0100 reason = 'The specified ''Lower cutoff frequency'' is larger than ''Higher frequency''.';
0101 elseif ~(parm.impulse_response == 1 || parm.impulse_response == 2)
0102 is_valid = false;
0103 reason = 'The specified ''Impulse response'' is invalid.';
0104 elseif parm.impulse_response == 2 && ...
0105 (parm.order < 0 || ceil(parm.order) ~= parm.order)
0106 is_valid = false;
0107 reason = 'The specified ''Filter order'' is invalid.';
0108 elseif ~(parm.filtfilt == 0 || parm.filtfilt == 1)
0109 is_valid = false;
0110 reason = 'The specified ''Time delay correction'' is invalid.';
0111 end
0112
0113 function [is_valid, reason] = inner_check_stopband(parm)
0114 is_valid = true;
0115 reason = '';
0116 [is_valid, reason] = inner_check_bandpass(parm);
0117
0118 function [is_valid, reason] = inner_check_downsampling(parm)
0119 is_valid = true;
0120 reason = '';
0121 if parm.dsamp_freq < 1 || (ceil(parm.dsamp_freq) ~= parm.dsamp_freq)
0122 is_valid = false;
0123 reason = '''New sampling frequency'' should be integer larger than 1.';
0124 end
0125
0126 function [is_valid, reason] = inner_check_common_reference(parm)
0127 is_valid = true;
0128 reason = '';
0129 if ~(parm.mode == 0 || parm.mode == 1)
0130 is_valid = false;
0131 reason = 'The specified ''mode'' is invalid.';
0132 end