Browse Source

Changed the FFT tests to use the peak values instead

master
Weird Constructor 7 months ago
parent
commit
f7bfdb7c1f
  1. 8
      Cargo.toml
  2. 18
      tests/common/mod.rs
  3. 191
      tests/node_fvafilt.rs

8
Cargo.toml

@ -22,8 +22,8 @@ lazy_static = "1.4.0"
hound = "3.4.0"
synfx-dsp-jit = { version = "0.6.1", optional = true }
#synfx-dsp-jit = { git = "https://github.com/WeirdConstructor/synfx-dsp-jit.git", optional = true }
synfx-dsp = { version = "0.5.5" }
#synfx-dsp = { git = "https://github.com/WeirdConstructor/synfx-dsp.git" }
#synfx-dsp = { version = "0.5.5" }
synfx-dsp = { git = "https://github.com/WeirdConstructor/synfx-dsp.git" }
[dev-dependencies]
num-complex = "0.2"
@ -37,5 +37,5 @@ path = "src/lib.rs"
name = "hexodsp"
crate-type = ["lib"]
#[patch.'https://github.com/WeirdConstructor/synfx-dsp.git']
#synfx-dsp = { path = "../synfx-dsp" }
[patch.'https://github.com/WeirdConstructor/synfx-dsp.git']
synfx-dsp = { path = "../synfx-dsp" }

18
tests/common/mod.rs

@ -887,7 +887,7 @@ pub fn run_and_get_fft4096_now(
}
#[allow(unused)]
pub fn fftr4096_now_long(
pub fn fftr4096_now_peaks(
node_exec: &mut hexodsp::nodes::NodeExecutor,
div: u32,
thres: u32,
@ -897,19 +897,18 @@ pub fn fftr4096_now_long(
let (mut out_l, _out_r) = run_no_input(node_exec, run_len_s);
let mut avg_fft = fftr_thres_at_ms(&mut out_l[..], FFT::F4096, 0.0);
for _ in 0..4 {
for _ in 0..6 {
let (mut out_l, _out_r) = run_no_input(node_exec, run_len_s);
let res = fftr_thres_at_ms(&mut out_l[..], FFT::F4096, 0.0);
for (i, (_freq, amp)) in res.iter().enumerate() {
avg_fft[i].1 += amp;
avg_fft[i].1 = avg_fft[i].1.max(*amp);
}
}
let div = div as f32;
let mut out = vec![];
for (freq, amp) in avg_fft.iter() {
let amp = *amp as f32 / 5.0;
let amp = ((amp / div).round() * div) as u32;
let amp = ((*amp as f32 / div).round() * div) as u32;
if amp >= thres {
out.push((*freq, amp));
}
@ -919,7 +918,7 @@ pub fn fftr4096_now_long(
}
#[allow(unused)]
pub fn fftr512_now_long(
pub fn fftr512_now_peaks(
node_exec: &mut hexodsp::nodes::NodeExecutor,
div: u32,
thres: u32,
@ -929,19 +928,18 @@ pub fn fftr512_now_long(
let (mut out_l, _out_r) = run_no_input(node_exec, run_len_s);
let mut avg_fft = fftr_thres_at_ms(&mut out_l[..], FFT::F512, 0.0);
for _ in 0..4 {
for _ in 0..6 {
let (mut out_l, _out_r) = run_no_input(node_exec, run_len_s);
let res = fftr_thres_at_ms(&mut out_l[..], FFT::F512, 0.0);
for (i, (_freq, amp)) in res.iter().enumerate() {
avg_fft[i].1 += amp;
avg_fft[i].1 = avg_fft[i].1.max(*amp);
}
}
let div = div as f32;
let mut out = vec![];
for (freq, amp) in avg_fft.iter() {
let amp = *amp as f32 / 5.0;
let amp = ((amp / div).round() * div) as u32;
let amp = ((*amp as f32 / div).round() * div) as u32;
if amp >= thres {
out.push((*freq, amp));
}

191
tests/node_fvafilt.rs

@ -31,68 +31,75 @@ fn check_node_fvafilt_ladder_400hz() {
pset_s(&mut matrix, va, "lslope", 0);
pset_d(&mut matrix, va, "freq", 400.0);
pset_d(&mut matrix, va, "res", 0.0);
pset_d(&mut matrix, NodeId::Out(0), "vol", 4.0);
pset_d(&mut matrix, NodeId::Out(0), "vol", 3.0);
pset_d_wait(&mut matrix, &mut node_exec, va, "drive", 1.0);
// 6dB slope
let out = fftr512_now_long(&mut node_exec, 3, 4);
let out = fftr512_now_peaks(&mut node_exec, 3, 4);
assert_vis_fft!(
out,
[
(0, 21),
(86, 15),
(172, 15),
(258, 21),
(345, 21),
(431, 12),
(517, 9),
(603, 9),
(689, 15),
(775, 6),
(861, 9),
(947, 9),
(1120, 6),
(1206, 6),
(0, 27),
(86, 21),
(172, 21),
(258, 18),
(345, 24),
(431, 18),
(517, 12),
(603, 12),
(689, 18),
(775, 12),
(861, 12),
(947, 12),
(1034, 9),
(1120, 15),
(1206, 12),
(1292, 6),
(1378, 6),
(1464, 6),
(1637, 6)
(1550, 6),
(1637, 6),
(1723, 6),
(3101, 6)
]
);
// 24dB slope
pset_s(&mut matrix, va, "lslope", 3);
let out = fftr512_now_long(&mut node_exec, 3, 2);
let out = fftr512_now_peaks(&mut node_exec, 3, 2);
assert_vis_fft!(
out,
[(0, 15), (86, 18), (172, 15), (258, 9), (345, 6), (431, 3), (517, 3), (603, 3)]
[(0, 24), (86, 24), (172, 21), (258, 9), (345, 12), (431, 6), (517, 3), (603, 3)]
);
// 24dB with resonance = 0.5
pset_d_wait(&mut matrix, &mut node_exec, va, "res", 0.5);
let out = fftr512_now_long(&mut node_exec, 3, 6);
let out = fftr512_now_peaks(&mut node_exec, 3, 6);
assert_vis_fft!(
out,
[(0, 21), (86, 24), (172, 39), (258, 33), (345, 15), (431, 6), (517, 6), (603, 6)]
[(0, 60), (86, 42), (172, 39), (258, 42), (345, 45), (431, 24), (517, 12), (603, 9)]
);
// 24dB with resonance = 1.0
pset_d_wait(&mut matrix, &mut node_exec, va, "res", 1.0);
let out = fftr512_now_long(&mut node_exec, 3, 6);
let out = fftr512_now_peaks(&mut node_exec, 3, 6);
assert_vis_fft!(
out,
[
(0, 39),
(86, 30),
(172, 21),
(258, 99),
(345, 354),
(431, 375),
(517, 120),
(603, 12),
(0, 48),
(86, 36),
(172, 36),
(258, 90),
(345, 303),
(431, 336),
(517, 102),
(603, 18),
(689, 15),
(775, 9)
(775, 6),
(861, 6),
(947, 6)
]
);
}
@ -107,11 +114,97 @@ fn check_node_fvafilt_ladder_1000hz() {
pset_s(&mut matrix, va, "lslope", 0);
pset_d(&mut matrix, va, "freq", 1000.0);
pset_d(&mut matrix, va, "res", 0.0);
pset_d(&mut matrix, NodeId::Out(0), "vol", 4.0);
pset_d(&mut matrix, NodeId::Out(0), "vol", 2.0);
pset_d_wait(&mut matrix, &mut node_exec, va, "drive", 1.0);
// 6dB slope
let out = fftr512_now_long(&mut node_exec, 3, 4);
let out = fftr512_now_peaks(&mut node_exec, 3, 4);
assert_vis_fft!(
out,
[
(0, 18),
(86, 18),
(172, 18),
(258, 15),
(345, 21),
(431, 15),
(517, 12),
(603, 12),
(689, 18),
(775, 15),
(861, 12),
(947, 15),
(1034, 12),
(1120, 18),
(1206, 15),
(1292, 9),
(1378, 9),
(1464, 12),
(1550, 9),
(1637, 9),
(1723, 9),
(1895, 6),
(2067, 6),
(2153, 6),
(2239, 6),
(2326, 6),
(2412, 6),
(2498, 6),
(2584, 6),
(2756, 6),
(2929, 6),
(3015, 6),
(3101, 9),
(3359, 6),
(3445, 6),
(3790, 6),
(3876, 6),
(3962, 6),
(4307, 6)
]
);
// 24dB slope
pset_s(&mut matrix, va, "lslope", 3);
let out = fftr512_now_peaks(&mut node_exec, 3, 4);
assert_vis_fft!(
out,
[(0, 24), (86, 21), (172, 21), (258, 15), (345, 21), (431, 12), (517, 9), (603, 9), (689, 6), (775, 6), (861, 9), (947, 6)]
);
// 24dB with resonance = 0.5
pset_d_wait(&mut matrix, &mut node_exec, va, "res", 0.5);
let out = fftr512_now_peaks(&mut node_exec, 3, 9);
assert_vis_fft!(
out,
[(0, 39), (86, 27), (172, 24), (258, 24), (345, 42), (431, 27), (517, 36), (603, 33), (689, 27), (775, 24), (861, 21), (947, 15), (1034, 9), (1120, 12)]
);
// 24dB with resonance = 1.0
pset_d_wait(&mut matrix, &mut node_exec, va, "res", 1.0);
let out = fftr512_now_peaks(&mut node_exec, 3, 9);
assert_vis_fft!(
out,
[(0, 33), (86, 24), (172, 18), (258, 24), (345, 21), (431, 24), (517, 24), (603, 36), (689, 42), (775, 51), (861, 135), (947, 201), (1034, 219), (1120, 75), (1206, 39), (1292, 18), (1378, 15), (1464, 12), (1550, 9), (1637, 12), (1723, 12), (1809, 9)]
);
}
#[test]
fn check_node_fvafilt_svf_1000hz() {
let (mut matrix, mut node_exec) = setup_fvafilt_matrix();
let va = NodeId::FVaFilt(0);
pset_s(&mut matrix, va, "ftype", 1);
pset_d(&mut matrix, va, "freq", 1000.0);
pset_d(&mut matrix, va, "res", 0.0);
pset_d(&mut matrix, NodeId::Out(0), "vol", 4.0);
pset_d_wait(&mut matrix, &mut node_exec, va, "drive", 1.0);
// resonance 0.0
let out = fftr512_now_peaks(&mut node_exec, 3, 4);
assert_vis_fft!(
out,
@ -165,33 +258,9 @@ fn check_node_fvafilt_ladder_1000hz() {
]
);
// 24dB slope
pset_s(&mut matrix, va, "lslope", 3);
let out = fftr512_now_long(&mut node_exec, 3, 4);
assert_vis_fft!(
out,
[
(0, 24),
(86, 24),
(172, 21),
(258, 21),
(345, 15),
(431, 12),
(517, 12),
(603, 12),
(689, 9),
(775, 6),
(861, 6),
(947, 6),
(1120, 6),
(1206, 6),
]
);
// 24dB with resonance = 0.5
// with resonance = 0.5
pset_d_wait(&mut matrix, &mut node_exec, va, "res", 0.5);
let out = fftr512_now_long(&mut node_exec, 3, 9);
let out = fftr512_now_peaks(&mut node_exec, 3, 9);
assert_vis_fft!(
out,
[
@ -213,9 +282,9 @@ fn check_node_fvafilt_ladder_1000hz() {
]
);
// 24dB with resonance = 1.0
// with resonance = 1.0
pset_d_wait(&mut matrix, &mut node_exec, va, "res", 1.0);
let out = fftr512_now_long(&mut node_exec, 3, 9);
let out = fftr512_now_peaks(&mut node_exec, 3, 9);
assert_vis_fft!(
out,
[

Loading…
Cancel
Save