now using backward Euler method in bw_one_pole
This commit is contained in:
parent
262d4f9a5d
commit
ee94fba57b
1
TODO
1
TODO
@ -6,7 +6,6 @@ code:
|
|||||||
* check all examples again
|
* check all examples again
|
||||||
* osc post filter (and one pole init, slew rate, etc.) val from input? set state instead?
|
* osc post filter (and one pole init, slew rate, etc.) val from input? set state instead?
|
||||||
* audio rate optional pulse width/slope inputs?
|
* audio rate optional pulse width/slope inputs?
|
||||||
* should rather use backward Euler in bw_onepole?
|
|
||||||
* one pole process const input? (return also if const out)
|
* one pole process const input? (return also if const out)
|
||||||
* empty functions etc. to keep consistency and forward compatibility?
|
* empty functions etc. to keep consistency and forward compatibility?
|
||||||
* float in [-1,1] for velocity, pitch bend, mod wheel
|
* float in [-1,1] for velocity, pitch bend, mod wheel
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
* <li>Added overladed C++ <code>process()</code> function taking
|
* <li>Added overladed C++ <code>process()</code> function taking
|
||||||
* C-style arrays as arguments.</li>
|
* C-style arrays as arguments.</li>
|
||||||
* <li>Removed usage of reserved identifiers.</li>
|
* <li>Removed usage of reserved identifiers.</li>
|
||||||
|
* <li>Now using backward Euler rather than impulse invariant
|
||||||
|
* method.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* </li>
|
* </li>
|
||||||
* <li>Version <strong>0.6.0</strong>:
|
* <li>Version <strong>0.6.0</strong>:
|
||||||
@ -364,7 +366,7 @@ struct bw_one_pole_coeffs {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Coefficients
|
// Coefficients
|
||||||
float Ttm2pi;
|
float fs_2pi;
|
||||||
|
|
||||||
float mA1u;
|
float mA1u;
|
||||||
float mA1d;
|
float mA1d;
|
||||||
@ -412,7 +414,7 @@ static inline void bw_one_pole_set_sample_rate(bw_one_pole_coeffs *BW_RESTRICT c
|
|||||||
BW_ASSERT_DEEP(bw_one_pole_coeffs_is_valid(coeffs));
|
BW_ASSERT_DEEP(bw_one_pole_coeffs_is_valid(coeffs));
|
||||||
BW_ASSERT_DEEP(coeffs->state >= bw_one_pole_coeffs_state_init);
|
BW_ASSERT_DEEP(coeffs->state >= bw_one_pole_coeffs_state_init);
|
||||||
|
|
||||||
coeffs->Ttm2pi = -6.283185307179586f / sample_rate;
|
coeffs->fs_2pi = 0.15915494309189535f * sample_rate;
|
||||||
|
|
||||||
#ifdef BW_DEBUG_DEEP
|
#ifdef BW_DEBUG_DEEP
|
||||||
coeffs->state = bw_one_pole_coeffs_state_set_sample_rate;
|
coeffs->state = bw_one_pole_coeffs_state_set_sample_rate;
|
||||||
@ -424,10 +426,10 @@ static inline void bw_one_pole_set_sample_rate(bw_one_pole_coeffs *BW_RESTRICT c
|
|||||||
static inline void bw_one_pole_do_update_coeffs_ctrl(bw_one_pole_coeffs *BW_RESTRICT coeffs) {
|
static inline void bw_one_pole_do_update_coeffs_ctrl(bw_one_pole_coeffs *BW_RESTRICT coeffs) {
|
||||||
if (coeffs->param_changed) {
|
if (coeffs->param_changed) {
|
||||||
if (coeffs->param_changed & BW_ONE_POLE_PARAM_CUTOFF_UP)
|
if (coeffs->param_changed & BW_ONE_POLE_PARAM_CUTOFF_UP)
|
||||||
coeffs->mA1u = coeffs->cutoff_up > 1.591549430918953e8f ? 0.f : bw_expf(coeffs->Ttm2pi * coeffs->cutoff_up);
|
coeffs->mA1u = coeffs->cutoff_up > 1.591549430918953e8f ? 0.f : coeffs->fs_2pi * bw_rcpf(coeffs->fs_2pi + coeffs->cutoff_up);
|
||||||
// tau < 1 ns is instantaneous for any practical purpose
|
// tau < 1 ns is instantaneous for any practical purpose
|
||||||
if (coeffs->param_changed & BW_ONE_POLE_PARAM_CUTOFF_DOWN)
|
if (coeffs->param_changed & BW_ONE_POLE_PARAM_CUTOFF_DOWN)
|
||||||
coeffs->mA1d = coeffs->cutoff_down > 1.591549430918953e8f ? 0.f : bw_expf(coeffs->Ttm2pi * coeffs->cutoff_down);
|
coeffs->mA1d = coeffs->cutoff_down > 1.591549430918953e8f ? 0.f : coeffs->fs_2pi * bw_rcpf(coeffs->fs_2pi + coeffs->cutoff_down);
|
||||||
// as before
|
// as before
|
||||||
if (coeffs->param_changed & BW_ONE_POLE_PARAM_STICKY_THRESH)
|
if (coeffs->param_changed & BW_ONE_POLE_PARAM_STICKY_THRESH)
|
||||||
coeffs->st2 = coeffs->sticky_thresh * coeffs->sticky_thresh;
|
coeffs->st2 = coeffs->sticky_thresh * coeffs->sticky_thresh;
|
||||||
|
Loading…
Reference in New Issue
Block a user