forked from Mirrors/freeswitch
94 lines
1.9 KiB
C
94 lines
1.9 KiB
C
/*
|
|
genphdata.c
|
|
|
|
Generates test phase data for vqtrainph testing.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <math.h>
|
|
#include <ctype.h>
|
|
#include <assert.h>
|
|
#include "../src/defines.h"
|
|
|
|
typedef struct {
|
|
float real;
|
|
float imag;
|
|
} COMP;
|
|
|
|
#define NVEC 100000
|
|
#define D 2
|
|
#define E 8
|
|
|
|
int main(void) {
|
|
FILE *f=fopen("testph.flt", "wb");
|
|
int i, m, L, index;
|
|
float angle, noisey_angle, pitch, Wo;
|
|
COMP c;
|
|
COMP sparse_pe[MAX_AMP];
|
|
|
|
#ifdef TEST1
|
|
for(i=0; i<D*E; i++) {
|
|
c.real = cos(i*TWO_PI/(M*D));
|
|
c.imag = sin(i*TWO_PI/(M*D));
|
|
fwrite(&c, sizeof(COMP), 1, f);
|
|
}
|
|
#endif
|
|
|
|
#ifdef TEST2
|
|
/*
|
|
Bunch of random phases, should get std dev per element of
|
|
pi/(sqrt(3)*pow(2,b/D)), or 0.321 for (b=5, D=2):
|
|
|
|
./vqtrainph testph.flt 2 32 test.txt
|
|
*/
|
|
|
|
for(i=0; i<NVEC; i++) {
|
|
angle = PI*(1.0 - 2.0*rand()/RAND_MAX);
|
|
c.real = cos(angle);
|
|
c.imag = sin(angle);
|
|
fwrite(&c, sizeof(COMP), 1, f);
|
|
}
|
|
#endif
|
|
|
|
#define TEST3
|
|
#ifdef TEST3
|
|
/*
|
|
Data for testing training in sparse phases. No correlation, so
|
|
should be same performance as TEST2. Attempting to train a
|
|
MAX_AMP/4 = 20 (first 1 kHz) phase quantiser.
|
|
|
|
*/
|
|
|
|
angle = 0;
|
|
for(i=0; i<NVEC; i++) {
|
|
pitch = P_MIN + (P_MAX-P_MIN)*((float)rand()/RAND_MAX);
|
|
//pitch = 40;
|
|
Wo = TWO_PI/pitch;
|
|
L = floor(PI/Wo);
|
|
//printf("pitch %f Wo %f L %d\n", pitch, Wo, L);
|
|
|
|
for(m=0; m<MAX_AMP; m++) {
|
|
sparse_pe[m].real = 0.0;
|
|
sparse_pe[m].imag = 0.0;
|
|
}
|
|
|
|
angle += PI/8;
|
|
for(m=1; m<=L; m++) {
|
|
noisey_angle = angle + (PI/16)*(1.0 - 2.0*rand()/RAND_MAX);
|
|
//angle = (PI/16)*(1.0 - 2.0*rand()/RAND_MAX);
|
|
index = MAX_AMP*m*Wo/PI;
|
|
assert(index < MAX_AMP);
|
|
sparse_pe[index].real = cos(noisey_angle);
|
|
sparse_pe[index].imag = sin(noisey_angle);
|
|
}
|
|
|
|
fwrite(&sparse_pe, sizeof(COMP), MAX_AMP/4, f);
|
|
}
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
}
|