diff options
author | Timothy B.B Terriberry <tterribe@xiph.org> | 2008-09-19 10:32:42 +0400 |
---|---|---|
committer | Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> | 2008-09-19 15:38:24 +0400 |
commit | d910274f790ba586c40a625bb9120d13554c3443 (patch) | |
tree | 97b98b1c2b746fa1f5d9344bf7e5a6f3d621f115 /tests | |
parent | 7b0cb4ba0d2b5117d8ed4dbe0ab49c21090c8854 (diff) |
Change CWRS indexing to use Pyramid VQ's magnitude ordering.
This lets us encode and decode directly from the pulse vector without an
intermediate transformation.
This makes old streams undecodable.
Additionally, ncwrs_u32() has been sped up for large N by using the sliding
recurrence from Mohorko et al.
ncwrs_u64 could be sped up in a similar manner, but would require a larger
table of multiplicative inverses (or several 32x32->64 bit multiplies).
Note that U(N,M) is now everywhere 1/2 the value it used to be.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cwrs32-test.c | 29 | ||||
-rw-r--r-- | tests/cwrs64-test.c | 27 |
2 files changed, 19 insertions, 37 deletions
diff --git a/tests/cwrs32-test.c b/tests/cwrs32-test.c index b9ea1a8..6b193e3 100644 --- a/tests/cwrs32-test.c +++ b/tests/cwrs32-test.c @@ -21,33 +21,24 @@ int main(int _argc,char **_argv){ inc=nc/10000; if(inc<1)inc=1; for(i=0;i<nc;i+=inc){ - celt_uint32_t u[NMAX]; - int x[MMAX]; - int s[MMAX]; - int x2[MMAX]; - int s2[MMAX]; + celt_uint32_t u[NMAX>MMAX+2?NMAX:MMAX+2]; int y[NMAX]; + celt_uint32_t v; int k; memcpy(u,uu,n*sizeof(*u)); - cwrsi32(n,m,i,x,s,u); - /*printf("%6u of %u:",i,nc);*/ - /*for(k=0;k<m;k++){ - printf(" %c%i",k>0&&x[k]==x[k-1]?' ':s[k]?'-':'+',x[k]); - } + cwrsi32(n,m,i,nc,y,u); + /*printf("%6u of %u:",i,nc); + for(k=0;k<n;k++)printf(" %+3i",y[k]); printf(" ->");*/ - memcpy(u,uu,n*sizeof(*u)); - if(icwrs32(n,m,x,s,u)!=i){ + if(icwrs32(n,m,&v,y,u)!=i){ fprintf(stderr,"Combination-index mismatch.\n"); return 1; } - comb2pulse(n,m,y,x,s); - /*for(j=0;j<n;j++)printf(" %c%i",y[j]?y[j]<0?'-':'+':' ',abs(y[j])); - printf("\n");*/ - pulse2comb(n,m,x2,s2,y); - for(k=0;k<m;k++)if(x[k]!=x2[k]||s[k]!=s2[k]){ - fprintf(stderr,"Pulse-combination mismatch.\n"); - return 1; + if(v!=nc){ + fprintf(stderr,"Combination count mismatch.\n"); + return 2; } + /*printf(" %6u\n",i);*/ } /*printf("\n");*/ } diff --git a/tests/cwrs64-test.c b/tests/cwrs64-test.c index e476367..e699deb 100644 --- a/tests/cwrs64-test.c +++ b/tests/cwrs64-test.c @@ -24,33 +24,24 @@ int main(int _argc,char **_argv){ if(inc<1)inc=1; /*printf("%d/%d: %llu",n,m, nc);*/ for(i=0;i<nc;i+=inc){ - celt_uint64_t u[NMAX]; - int x[MMAX]; - int s[MMAX]; - int x2[MMAX]; - int s2[MMAX]; + celt_uint64_t u[NMAX>MMAX+2?NMAX:MMAX+2]; int y[NMAX]; + celt_uint64_t v; int k; memcpy(u,uu,n*sizeof(*u)); - cwrsi64(n,m,i,x,s,u); + cwrsi64(n,m,i,nc,y,u); /*printf("%llu of %llu:",i,nc); - for(k=0;k<m;k++){ - printf(" %c%i",k>0&&x[k]==x[k-1]?' ':s[k]?'-':'+',x[k]); - } + for(k=0;k<n;k++)printf(" %+3i",y[k]); printf(" ->");*/ - memcpy(u,uu,n*sizeof(*u)); - if(icwrs64(n,m,x,s,u)!=i){ + if(icwrs64(n,m,&v,y,u)!=i){ fprintf(stderr,"Combination-index mismatch.\n"); return 1; } - comb2pulse(n,m,y,x,s); - /*for(j=0;j<n;j++)printf(" %c%i",y[j]?y[j]<0?'-':'+':' ',abs(y[j])); - printf("\n");*/ - pulse2comb(n,m,x2,s2,y); - for(k=0;k<m;k++)if(x[k]!=x2[k]||s[k]!=s2[k]){ - fprintf(stderr,"Pulse-combination mismatch.\n"); - return 1; + if(v!=nc){ + fprintf(stderr,"Combination count mismatch.\n"); + return 2; } + /*printf(" %6llu\n",i);*/ } /*printf("\n");*/ } |