jamie@264
|
1
|
jamie@264
|
2 #include "xttest_util.hpp"
|
jamie@264
|
3
|
jamie@264
|
4 #include "xtract/xtract_scalar.h"
|
jamie@264
|
5
|
jamie@264
|
6 #include "catch.hpp"
|
jamie@264
|
7
|
jamie@264
|
8
|
jamie@264
|
9 SCENARIO( "F0 is correctly detected for a clean sine wave", "[xtract_f0]" )
|
jamie@264
|
10 {
|
jamie@264
|
11 GIVEN( "a 1024 sample block with a sample rate of 44100" )
|
jamie@264
|
12 {
|
jamie@264
|
13 uint32_t blocksize = 1024;
|
jamie@264
|
14 double samplerate = 44100;
|
jamie@264
|
15 double result = 0.0;
|
jamie@264
|
16 double table[blocksize];
|
jamie@264
|
17
|
jamie@264
|
18 WHEN( "the frequency is 344.53125 Hz" ) // This will give a period of exactly 128 samples: 8 cycles in the block
|
jamie@264
|
19 {
|
jamie@264
|
20 double frequency = 344.53125;
|
jamie@264
|
21 double min = frequency * 0.995;
|
jamie@264
|
22 double max = frequency * 1.005;
|
jamie@264
|
23
|
jamie@264
|
24 WHEN( "the amplitude is 1.0" )
|
jamie@264
|
25 {
|
jamie@264
|
26 double amplitude = 1.0;
|
jamie@264
|
27
|
jamie@264
|
28 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
|
jamie@264
|
29 xtract_f0(table, blocksize, &samplerate, &result);
|
jamie@264
|
30 CAPTURE( result );
|
jamie@264
|
31
|
jamie@264
|
32 THEN( "the detected F0 is in the range 344.53125 ± 0.5%" )
|
jamie@264
|
33 {
|
jamie@264
|
34 REQUIRE(result < max);
|
jamie@264
|
35 REQUIRE(result > min);
|
jamie@264
|
36 }
|
jamie@264
|
37 }
|
jamie@264
|
38 WHEN( "the amplitude is 0.1" )
|
jamie@264
|
39 {
|
jamie@264
|
40 double amplitude = 0.1;
|
jamie@264
|
41
|
jamie@264
|
42 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
|
jamie@264
|
43 xtract_f0(table, blocksize, &samplerate, &result);
|
jamie@264
|
44 CAPTURE( result );
|
jamie@264
|
45
|
jamie@264
|
46 THEN( "the detected F0 is in the range 344.53125 ± 0.5%" )
|
jamie@264
|
47 {
|
jamie@264
|
48 REQUIRE(result < max);
|
jamie@264
|
49 REQUIRE(result > min);
|
jamie@264
|
50 }
|
jamie@264
|
51 }
|
jamie@264
|
52 }
|
jamie@264
|
53 }
|
jamie@264
|
54 }
|