0001 function flags = deglitch(d, params)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 data = d.antenna0.receiver.data;
0021
0022 [s e] = findStartStop(d.index.noise.fast);
0023
0024 s = s-5;
0025 e = e+5;
0026 s(s<1) = 1;
0027 e(e>size(data,1)) = size(data,1);
0028 indNoise = zeros(size(data,1),1);
0029 for m=1:length(s)
0030 indNoise(s(m):e(m)) = 1;
0031 end
0032 indNoNoise = ~indNoise;
0033
0034 data = data(indNoNoise,:);
0035
0036
0037
0038
0039
0040
0041 indSpurious = logical(zeros(size(data,1),1));
0042 stop = 0;
0043 while(stop==0)
0044 for m=1:size(data,2)
0045 a(:,m) = smooth(data(:,m));
0046 end
0047 diffVals = a-data;
0048 stdVals = std(diffVals);
0049 diffNorm = abs(diffVals)./repmat(stdVals, [size(diffVals,1) 1]);
0050 badVals = diffNorm>5;
0051 newIndSpurious = sum(badVals,2)>0;
0052
0053 indSpurious(newIndSpurious) = 1;
0054 data(newIndSpurious,:) = a(newIndSpurious,:);
0055
0056 l = length(find(newIndSpurious));
0057 newOnes = length(find(indSpurious)) - l;
0058
0059 if(newOnes<1)
0060 stop = 1;
0061 end
0062 end
0063 clear diffNorm;
0064 clear diffVals;
0065 clear a;
0066
0067
0068
0069
0070
0071 da = deriv(data);
0072 indDeriv = abs(da(:,1))>params(1) | abs(da(:,6)>params(2));
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086 indDeglitchFast = indSpurious | indDeriv;
0087
0088
0089 indFinal = logical(zeros(size(d.flags.fast,1),1));
0090 indFinal(indNoNoise) = indDeglitchFast;
0091
0092
0093
0094
0095
0096 [d, flags] = setNewFlag(d, indFinal, 'deglitch');
0097
0098 clear d;
0099
0100 return;
0101
0102
0103 function flags = applyFlag(d, flagRegTemp, flagServTemp, ...
0104 flagRxTemp, bitNum)
0105
0106 if(~isempty(flagRegTemp))
0107 flagServTemp = repmat(flagRegTemp, [1 5]);
0108 flagServTemp = flagServTemp';
0109 flagServTemp = flagServTemp(:);
0110
0111 flagRxTemp = repmat(flagRegTemp, [1 100]);
0112 flagRxTemp = flagRxTemp';
0113 flagRxTemp = flagRxTemp(:);
0114
0115 elseif(~isempty(flagServTemp))
0116 flagRegTemp = reshape(flagServTemp, [5, length(flagServTemp)/5]);
0117 flagRegTemp = mean(flagRegTemp) == 1;
0118 flagRegTemp = flagRegTemp';
0119
0120 flagRxTemp = repmat(flagServTemp, [1 20]);
0121 flagRxTemp = flagRxTemp';
0122 flagRxTemp = flagRxTemp(:);
0123 elseif(~isempty(flagRxTemp))
0124 flagRegTemp = reshape(flagRxTemp, [100, length(flagRxTemp)/100]);
0125 flagRegTemp = mean(flagRegTemp) == 1;
0126 flagRegTemp = flagRegTemp';
0127
0128 flagServTemp = reshape(flagRxTemp, [20, length(flagRxTemp)/20]);
0129 flagServTemp = mean(flagServTemp) == 1;
0130 flagServTemp = flagServTemp';
0131 else
0132 error('No flags passed');
0133 end
0134
0135
0136 flags.bit.slow = uint8(2.^(bitNum)*double(flagRegTemp));
0137
0138 flags.bit.medium = uint8(2.^(bitNum)*double(flagServTemp));
0139
0140 flags.bit.fast = repmat(uint8(2.^(bitNum)*double(flagRxTemp)), [1 3]);
0141
0142 display('DEGLITCHING FLAGGING REPORT');
0143 display(sprintf('%d of %d samples were flagged', length(find(flagRxTemp)), ...
0144 size(d.flags.fast,1)));
0145
0146
0147 return;