diff options
Diffstat (limited to 'gst-libs/gst/resample/test.c')
-rw-r--r-- | gst-libs/gst/resample/test.c | 375 |
1 files changed, 0 insertions, 375 deletions
diff --git a/gst-libs/gst/resample/test.c b/gst-libs/gst/resample/test.c deleted file mode 100644 index d6785aef..00000000 --- a/gst-libs/gst/resample/test.c +++ /dev/null @@ -1,375 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> -#include <math.h> -#include <sys/time.h> - -#include <resample.h> - -#define AMP 16000 -#define I_RATE 48000 -#define O_RATE 44100 -/*#define O_RATE 24000 */ - -/*#define test_func(x) 1 */ -/*#define test_func(x) sin(2*M_PI*(x)*10) */ -/*#define test_func(x) sin(2*M_PI*(x)*(x)*1000) */ -#define test_func(x) sin(2*M_PI*(x)*(x)*12000) - -short i_buf[I_RATE * 2 * 2]; -short o_buf[O_RATE * 2 * 2]; - -static int i_offset; -static int o_offset; - -FILE *out; - -void test_res1 (void); -void test_res2 (void); -void test_res3 (void); -void test_res4 (void); -void test_res5 (void); -void test_res6 (void); -void test_res7 (void); - -int -main (int argc, char *argv[]) -{ - out = fopen ("out", "w"); - - test_res7 (); - - return 0; -} - -void * -get_buffer (void *priv, unsigned int size) -{ - void *ret; - - ret = ((void *) o_buf) + o_offset; - o_offset += size; - return ret; -} - -struct timeval start_time; -void -start_timer (void) -{ - gettimeofday (&start_time, NULL); - /*printf("start %ld.%06ld\n",start_time.tv_sec,start_time.tv_usec); */ -} - -void -end_timer (void) -{ - struct timeval end_time; - double diff; - - gettimeofday (&end_time, NULL); - /*printf("end %ld.%06ld\n",end_time.tv_sec,end_time.tv_usec); */ - diff = (end_time.tv_sec - start_time.tv_sec) + - 1e-6 * (end_time.tv_usec - start_time.tv_usec); - - printf ("time %g\n", diff); - -} - -void -test_res1 (void) -{ - resample_t *r; - int i; - double sum10k, sum22k; - double f; - int n10k, n22k; - double x; - - for (i = 0; i < I_RATE; i++) { - i_buf[i * 2 + 0] = rint (AMP * test_func ((double) i / I_RATE)); - /*i_buf[i*2+1] = rint(AMP * test_func((double)i/I_RATE)); */ - i_buf[i * 2 + 1] = (i < 1000) ? AMP : 0; - } - - r = malloc (sizeof (resample_t)); - memset (r, 0, sizeof (resample_t)); - - r->i_rate = I_RATE; - r->o_rate = O_RATE; - /*r->method = RESAMPLE_SINC_SLOW; */ - r->method = RESAMPLE_SINC; - r->channels = 2; - /*r->verbose = 1; */ - r->filter_length = 64; - r->get_buffer = get_buffer; - - resample_init (r); - - start_timer (); -#define blocked -#ifdef blocked - for (i = 0; i + 256 < I_RATE; i += 256) { - resample_scale (r, i_buf + i * 2, 256 * 2 * 2); - } - if (I_RATE - i) { - resample_scale (r, i_buf + i * 2, (I_RATE - i) * 2 * 2); - } -#else - resample_scale (r, i_buf, I_RATE * 2 * 2); -#endif - end_timer (); - - for (i = 0; i < O_RATE; i++) { - f = AMP * test_func ((double) i / O_RATE); - /*f = rint(AMP*test_func((double)i/O_RATE)); */ - fprintf (out, "%d %d %d %g %g\n", i, - o_buf[2 * i + 0], o_buf[2 * i + 1], f, o_buf[2 * i + 0] - f); - } - - sum10k = 0; - sum22k = 0; - n10k = 0; - n22k = 0; - for (i = 0; i < O_RATE; i++) { - f = AMP * test_func ((double) i / O_RATE); - /*f = rint(AMP*test_func((double)i/O_RATE)); */ - x = o_buf[2 * i + 0] - f; - if (((0.5 * i) / O_RATE * I_RATE) < 10000) { - sum10k += x * x; - n10k++; - } - if (((0.5 * i) / O_RATE * I_RATE) < 22050) { - sum22k += x * x; - n22k++; - } - } - printf ("average error 10k=%g 22k=%g\n", - sqrt (sum10k / n10k), sqrt (sum22k / n22k)); -} - - -void -test_res2 (void) -{ - functable_t *t; - int i; - double x; - double f1, f2; - - t = malloc (sizeof (*t)); - memset (t, 0, sizeof (*t)); - - t->start = -50.0; - t->offset = 1; - t->len = 100; - - t->func_x = functable_sinc; - t->func_dx = functable_dsinc; - - functable_init (t); - - for (i = 0; i < 1000; i++) { - x = -50.0 + 0.1 * i; - f1 = functable_sinc (NULL, x); - f2 = functable_eval (t, x); - fprintf (out, "%d %g %g %g\n", i, f1, f2, f1 - f2); - } -} - -void -test_res3 (void) -{ - functable_t *t; - int i; - double x; - double f1, f2; - int n = 1; - - t = malloc (sizeof (*t)); - memset (t, 0, sizeof (*t)); - - t->start = -50.0; - t->offset = 1.0 / n; - t->len = 100 * n; - - t->func_x = functable_sinc; - t->func_dx = functable_dsinc; - - t->func2_x = functable_window_std; - t->func2_dx = functable_window_dstd; - - t->scale = 1.0; - t->scale2 = 1.0 / (M_PI * 16); - - functable_init (t); - - for (i = 0; i < 1000 * n; i++) { - x = -50.0 + 0.1 / n * i; - f1 = functable_sinc (NULL, t->scale * x) * - functable_window_std (NULL, t->scale2 * x); - f2 = functable_eval (t, x); - fprintf (out, "%d %g %g %g\n", i, f1, f2, f2 - f1); - } -} - -double -sinc_poly (double x) -{ -#define INV3FAC 1.66666666666666666e-1 -#define INV5FAC 8.33333333333333333e-3 -#define INV7FAC 1.984126984e-4 -#define INV9FAC 2.755731922e-6 -#define INV11FAC 2.505210839e-8 - double x2 = x * x; - - return 1 - x2 * INV3FAC + x2 * x2 * INV5FAC - x2 * x2 * x2 * INV7FAC; - /*+ x2 * x2 * x2 * x2 * INV9FAC */ - /*- x2 * x2 * x2 * x2 * x2 * INV11FAC; */ -} - -void -test_res4 (void) -{ - int i; - double x, f1, f2; - - for (i = 1; i < 100; i++) { - x = 0.01 * i; - f1 = 1 - sin (x) / x; - f2 = 1 - sinc_poly (x); - - fprintf (out, "%g %.20g %.20g %.20g\n", x, f1, f2, f2 - f1); - } -} - - -void -test_res5 (void) -{ - int i; - double sum; - - start_timer (); - sum = 0; - for (i = 0; i < I_RATE; i++) { - sum += i_buf[i * 2]; - } - end_timer (); - i_buf[0] = sum; -} - - -void -short_to_double (double *d, short *x) -{ - *d = *x; -} - -void -short_to_float (float *f, short *x) -{ - *f = *x; -} - -void -float_to_double (double *f, float *x) -{ - *f = *x; -} - -void -double_to_short (short *f, double *x) -{ - *f = *x; -} - -double res6_tmp[1000]; - -void -test_res6 (void) -{ - int i; - - for (i = 0; i < I_RATE; i++) { - i_buf[i] = rint (AMP * test_func ((double) i / I_RATE)); - } - - conv_double_short_ref (res6_tmp, i_buf, 1000); - for (i = 0; i < 1000; i++) { - res6_tmp[i] *= 3.0; - } - conv_short_double_ppcasm (o_buf, res6_tmp, 1000); - - for (i = 0; i < 1000; i++) { - fprintf (out, "%d %d %g %d\n", i, i_buf[i], res6_tmp[i], o_buf[i]); - } -} - -void -test_res7 (void) -{ - resample_t *r; - int i; - double sum10k, sum22k; - double f; - int n10k, n22k; - double x; - - for (i = 0; i < I_RATE; i++) { - i_buf[i] = rint (AMP * test_func ((double) i / I_RATE)); - } - - r = malloc (sizeof (resample_t)); - memset (r, 0, sizeof (resample_t)); - - r->i_rate = I_RATE; - r->o_rate = O_RATE; - /*r->method = RESAMPLE_SINC_SLOW; */ - r->method = RESAMPLE_SINC; - r->channels = 1; - /*r->verbose = 1; */ - r->filter_length = 64; - r->get_buffer = get_buffer; - - resample_init (r); - - start_timer (); -#define blocked -#ifdef blocked - for (i = 0; i + 256 < I_RATE; i += 256) { - resample_scale (r, i_buf + i, 256 * 2); - } - if (I_RATE - i) { - resample_scale (r, i_buf + i, (I_RATE - i) * 2); - } -#else - resample_scale (r, i_buf, I_RATE * 2); -#endif - end_timer (); - - for (i = 0; i < O_RATE; i++) { - f = AMP * test_func ((double) i / O_RATE); - /*f = rint(AMP*test_func((double)i/O_RATE)); */ - fprintf (out, "%d %d %d %g %g\n", i, o_buf[i], 0, f, o_buf[i] - f); - } - - sum10k = 0; - sum22k = 0; - n10k = 0; - n22k = 0; - for (i = 0; i < O_RATE; i++) { - f = AMP * test_func ((double) i / O_RATE); - /*f = rint(AMP*test_func((double)i/O_RATE)); */ - x = o_buf[i] - f; - if (((0.5 * i) / O_RATE * I_RATE) < 10000) { - sum10k += x * x; - n10k++; - } - if (((0.5 * i) / O_RATE * I_RATE) < 22050) { - sum22k += x * x; - n22k++; - } - } - printf ("average error 10k=%g 22k=%g\n", - sqrt (sum10k / n10k), sqrt (sum22k / n22k)); -} |