Changeset 147 in flair-src for trunk/lib/FlairFilter/src/LowPassFilter_impl.cpp
- Timestamp:
- Feb 28, 2017, 12:45:08 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/FlairFilter/src/LowPassFilter_impl.cpp
r15 r147 35 35 string name, 36 36 const cvmatrix *init_value) { 37 first_update = true;38 37 39 38 if (init_value != NULL) { 40 prev_value = (cvmatrix *)init_value; 39 // init output matrix of same size as init 40 cvmatrix_descriptor *desc =new cvmatrix_descriptor(init_value->Rows(), init_value->Cols()); 41 42 for (int i = 0; i < init_value->Rows(); i++) { 43 for (int j = 0; j < init_value->Cols(); j++) { 44 desc->SetElementName(i, j, init_value->Name(i, j)); 45 } 46 } 47 output = new cvmatrix(self, desc,init_value->GetDataType().GetElementDataType(), name); 48 for (int i = 0; i < init_value->Rows(); i++) { 49 for (int j = 0; j < init_value->Cols(); j++) { 50 output->SetValue(i, j, init_value->Value(i,j)); 51 } 52 } 41 53 } else { 42 54 // if NULL, assume dimension 1, and init=0 43 55 cvmatrix_descriptor *desc = new cvmatrix_descriptor(1, 1); 44 56 desc->SetElementName(0, 0, "output"); 45 prev_value= new cvmatrix(self, desc, floatType, name);46 prev_value->SetValue(0, 0, 0);57 output = new cvmatrix(self, desc, floatType, name); 58 output->SetValue(0, 0, 0); 47 59 } 48 60 … … 53 65 freq = new DoubleSpinBox(reglages_groupbox->NewRow(), "cutoff frequency", 54 66 " Hz", 0, 10000, 0.1, 2, 1); 55 56 // init output matrix of same size as init 57 cvmatrix_descriptor *desc = 58 new cvmatrix_descriptor(prev_value->Rows(), prev_value->Cols()); 59 60 for (int i = 0; i < prev_value->Rows(); i++) { 61 for (int j = 0; j < prev_value->Cols(); j++) { 62 desc->SetElementName(i, j, prev_value->Name(i, j)); 63 } 64 } 65 66 output = new cvmatrix(self, desc, 67 prev_value->GetDataType().GetElementDataType(), name); 68 69 output->SetValue(0, 0, 0); 67 68 previous_time=GetTime(); 70 69 } 71 70 … … 74 73 void LowPassFilter_impl::UpdateFrom(const io_data *data) { 75 74 float delta_t; 76 float result;77 75 cvmatrix *input = (cvmatrix *)data; 78 76 … … 81 79 input->GetMutex(); 82 80 83 if (first_update == true) { 84 for (int i = 0; i < input->Rows(); i++) { 85 for (int j = 0; j < input->Cols(); j++) { 86 output->SetValueNoMutex(i, j, prev_value->ValueNoMutex(i, j)); 87 prev_value->SetValueNoMutex(i, j, input->ValueNoMutex(i, j)); 88 } 89 } 90 first_update = false; 81 if (T->Value() == 0) { 82 delta_t = (float)(data->DataTime() - previous_time) / 1000000000.; 91 83 } else { 92 if (T->Value() == 0) { 93 delta_t = (float)(data->DataTime() - previous_time) / 1000000000.; 94 } else { 95 delta_t = T->Value(); 96 } 97 for (int i = 0; i < input->Rows(); i++) { 98 for (int j = 0; j < input->Cols(); j++) { 99 100 if (freq->Value() != 0) { 101 output->SetValueNoMutex(i, j, (1 - 2 * PI * freq->Value() * delta_t) * 102 prev_value->ValueNoMutex(i, j) + 103 2 * PI * freq->Value() * delta_t * 104 input->ValueNoMutex(i, j)); 105 } else { 106 output->SetValueNoMutex(i, j, input->ValueNoMutex(i, j)); 107 } 108 prev_value->SetValueNoMutex(i, j, output->ValueNoMutex(i, j)); 84 delta_t = T->Value(); 85 } 86 for (int i = 0; i < input->Rows(); i++) { 87 for (int j = 0; j < input->Cols(); j++) { 88 float cutoff=freq->Value(); 89 if (cutoff == 0 || freq->ValueChanged()) { 90 output->SetValueNoMutex(i, j, input->ValueNoMutex(i, j)); 91 } else { 92 output->SetValueNoMutex(i, j, (1 - 2 * PI * cutoff * delta_t) * 93 output->ValueNoMutex(i, j) + 94 2 * PI * cutoff * delta_t * 95 input->ValueNoMutex(i, j)); 109 96 } 110 97 } 111 98 } 99 112 100 input->ReleaseMutex(); 113 101 output->ReleaseMutex();
Note:
See TracChangeset
for help on using the changeset viewer.