fixed a few warnings, no real change
[opus.git] / tests / rotation-test.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include "celt_types.h"
8 #include "bands.h"
9 #include <math.h>
10 #define MAX_SIZE 100
11
12 int ret=0;
13 void test_rotation(int N, int K)
14 {
15    int i;
16    double err = 0, ener = 0, snr, snr0;
17    celt_word16_t x0[MAX_SIZE];
18    celt_word16_t x1[MAX_SIZE];
19    int nb_rotations = (N+4*K)/(8*K);
20    for (i=0;i<N;i++)
21       x1[i] = x0[i] = rand()%32767-16384;
22    exp_rotation(x1, N, 1, 1, nb_rotations);
23    for (i=0;i<N;i++)
24    {
25       err += (x0[i]-(double)x1[i])*(x0[i]-(double)x1[i]);
26       ener += x0[i]*(double)x0[i];
27    }
28    snr0 = 20*log10(ener/err);
29    err = ener = 0;
30    exp_rotation(x1, N, -1, 1, nb_rotations);
31    for (i=0;i<N;i++)
32    {
33       err += (x0[i]-(double)x1[i])*(x0[i]-(double)x1[i]);
34       ener += x0[i]*(double)x0[i];
35    }
36    snr = 20*log10(ener/err);
37    printf ("SNR for size %d (%d pulses) is %f (was %f without inverse)\n", N, K, snr, snr0);
38    if (snr < 60 || snr0 > 20)
39       ret = 1;
40 }
41
42 int main(void)
43 {
44    test_rotation(15, 3);
45    test_rotation(23, 5);
46    test_rotation(50, 3);
47    test_rotation(80, 1);
48    return ret;
49 }