Changeset 1325 for trunk/src/MathUtils.cpp
- Timestamp:
- 04/12/07 12:07:38 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/MathUtils.cpp
r996 r1325 100 100 return out; 101 101 } 102 103 void mathutil::hanning(Vector<Float>& out, Vector<Bool>& outmask, 104 const Vector<Float>& in, const Vector<Bool>& mask, 105 Bool relaxed, Bool ignoreOther) { 106 Vector< Vector<Float> > weights(8); 107 Vector<Float> vals(3); 108 vals = 0.0;weights[0] = vals;// FFF 109 vals[0] = 1.0; vals[1] = 0.0; vals[2] = 0.0; weights[1] = vals;// TFF 110 vals[0] = 0.0; vals[1] = 1.0; vals[2] = 0.0; weights[2] = vals;// FTF 111 vals[0] = 1.0/3.0; vals[1] = 2.0/3.0; vals[2] = 0.0; weights[3] = vals;// TTF 112 vals[0] = 0.0; vals[1] = 0.0; vals[2] = 1.0;weights[4] = vals;// FFT 113 vals[0] = 0.5; vals[1] = 0.0; vals[2] = 0.5; weights[5] = vals;// TFT 114 vals[0] = 0.0; vals[1] = 2.0/3.0; vals[2] = 1.0/3.0; weights[6] = vals;// FTT 115 vals[0] = 0.25; vals[1] = 0.5; vals[2] = 0.25; weights[7] = vals;// TTT 116 // Chris' case 117 Vector<Bool> weighted(8); 118 if (relaxed) { 119 weighted = False; 120 weighted[7] = True; 121 122 } else { 123 weighted = True; 124 weighted[0] = False; 125 } 126 127 out.resize(in.nelements()); 128 outmask.resize(mask.nelements()); 129 // make special case for first and last 130 /// ...here 131 // loop from 1..n-2 132 out.resize(in.nelements()); 133 out[0] = in[0];out[out.nelements()-1] = in[in.nelements()-1]; 134 outmask.resize(mask.nelements()); 135 outmask = False; 136 uInt m;Vector<Float>* w; 137 for (uInt i=1; i < out.nelements()-1;++i) { 138 m = mask[i-1] + 2*mask[i] + 4*mask[i+1]; 139 w = &(weights[m]); 140 if (weighted[m]) { 141 out[i] = (*w)[0]*in[i-1] + (*w)[1]*in[i] + (*w)[2]*in[i+1]; 142 outmask[i] = True; 143 } else { // mask it 144 out[i] = in[i];//use arbitrary value 145 outmask[i] = False; 146 } 147 } 148 }
Note: See TracChangeset
for help on using the changeset viewer.