Lines Matching defs:adap_filter
85 static void adaptive_filter_init(struct yas_adaptive_filter *adap_filter, int len, float noise)
89 adap_filter->num = 0;
90 adap_filter->index = 0;
91 adap_filter->noise = noise;
92 adap_filter->len = len;
94 for (i = 0; i < adap_filter->len; ++i) {
95 adap_filter->sequence[i] = 0;
105 static float adaptive_filter_filter(struct yas_adaptive_filter *adap_filter, float in)
110 if (adap_filter->len <= 1) {
113 if (adap_filter->num < adap_filter->len) {
114 adap_filter->sequence[adap_filter->index++] = in;
115 adap_filter->num++;
118 if (adap_filter->len <= adap_filter->index) {
119 adap_filter->index = 0;
121 adap_filter->sequence[adap_filter->index++] = in;
124 for (i = 0; i < adap_filter->len; i++) {
125 avg += adap_filter->sequence[i];
127 avg /= adap_filter->len;
129 memcpy(sorted, adap_filter->sequence, adap_filter->len * sizeof(float));
130 qsort(&sorted, adap_filter->len, sizeof(float), cmpfloat);
131 median = sorted[adap_filter->len/2];
134 for (i = 0; i < adap_filter->len; i++) {
135 sum += square(avg - adap_filter->sequence[i]);
137 sum /= adap_filter->len;
139 if (sum <= adap_filter->noise) {
143 return ((in - avg) * (sum - adap_filter->noise) / sum + avg);
178 adaptive_filter_init(&t->adap_filter[i], YAS_DEFAULT_FILTER_LEN, noise[i]);
194 output[i] = adaptive_filter_filter(&t->adap_filter[i], input[i]);