dc_cancelation: implement as template class
Signed-off-by: Thomas Schmid <tom@lfence.de>
This commit is contained in:
parent
cf750201a2
commit
b3ce3e0169
@ -1,11 +1,18 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
struct dc_cancelation_state {
|
template<class T>
|
||||||
float x_n1;
|
struct DcCancelation {
|
||||||
float y_n1;
|
T x_n1;
|
||||||
float R;
|
T y_n1;
|
||||||
};
|
T R;
|
||||||
|
|
||||||
void dc_cancelation_init(struct dc_cancelation_state *state, float R);
|
DcCancelation(T R) : R(R) {};
|
||||||
void dc_cancelation_set_R(struct dc_cancelation_state *state, float R);
|
|
||||||
float dc_cancelation_update(struct dc_cancelation_state *state, float x);
|
T update(T x) {
|
||||||
|
T y = x-this->x_n1 + this->R * this->y_n1;
|
||||||
|
this->x_n1 = x;
|
||||||
|
this->y_n1 = y;
|
||||||
|
|
||||||
|
return y;
|
||||||
|
};
|
||||||
|
};
|
@ -1,18 +0,0 @@
|
|||||||
#include "dc_cancelation.h"
|
|
||||||
|
|
||||||
void dc_cancelation_init(struct dc_cancelation_state *state, float R){
|
|
||||||
state->R = R;
|
|
||||||
state->x_n1 = 0.0f;
|
|
||||||
state->y_n1 = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void dc_cancelation_set_R(struct dc_cancelation_state *state, float R) {
|
|
||||||
state->R = R;
|
|
||||||
}
|
|
||||||
|
|
||||||
float dc_cancelation_update(struct dc_cancelation_state *state, float x) {
|
|
||||||
float y = x-state->x_n1 + state->R * state->y_n1;
|
|
||||||
state->x_n1 = x;
|
|
||||||
state->y_n1 = y;
|
|
||||||
return y;
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
#include "zauberstab.h"
|
#include "zauberstab.h"
|
||||||
#include "dc_cancelation.h"
|
#include "dc_cancelation.h"
|
||||||
|
|
||||||
struct dc_cancelation_state dc_blocker;
|
DcCancelation<float> dc_blocker{0.95};
|
||||||
CRGB leds[NUM_LEDS];
|
CRGB leds[NUM_LEDS];
|
||||||
static int16_t mic_offset = 0;
|
static int16_t mic_offset = 0;
|
||||||
|
|
||||||
@ -12,12 +12,11 @@ static uint16_t read_mic() {
|
|||||||
int zauberstab_init() {
|
int zauberstab_init() {
|
||||||
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
|
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
|
||||||
//FastLED.setMaxPowerInVoltsAndMilliamps(5, 300);
|
//FastLED.setMaxPowerInVoltsAndMilliamps(5, 300);
|
||||||
dc_cancelation_init(&dc_blocker, 0.95);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
float get_sample() {
|
float get_sample() {
|
||||||
float sample = read_mic();
|
float sample = read_mic();
|
||||||
sample = dc_cancelation_update(&dc_blocker, sample);
|
sample = dc_blocker.update(sample);
|
||||||
return sample;
|
return sample;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user