ref: 92ce34cb691da3330ef466f33784ce49a30b3b0f
parent: 6ae311389e77dd9d979760170be967b4559d9d57
author: menno <menno>
date: Wed Feb 23 09:56:08 EST 2000
Quality update
--- a/psych.c
+++ b/psych.c
@@ -52,9 +52,9 @@
Source file:
-$Id: psych.c,v 1.46 2000/02/14 08:22:02 lenox Exp $
-$Id: psych.c,v 1.46 2000/02/14 08:22:02 lenox Exp $
-$Id: psych.c,v 1.46 2000/02/14 08:22:02 lenox Exp $
+$Id: psych.c,v 1.47 2000/02/23 14:56:08 menno Exp $
+$Id: psych.c,v 1.47 2000/02/23 14:56:08 menno Exp $
+$Id: psych.c,v 1.47 2000/02/23 14:56:08 menno Exp $
**********************************************************************/
@@ -640,67 +640,69 @@
/* windowing */
for(w = 0; w < BLOCK_LEN_LONG; w++){
- FFTarray[w].re = fft_tbl_long->hw[(w<<1)] * sample[ch][w<<1];
- FFTarray[w].im = fft_tbl_long->hw[(w<<1)+1] * sample[ch][(w<<1)+1];
+ FFTarray[w].re = fft_tbl_long->hw[(w<<1)] * sample[ch][w<<1];
+ FFTarray[w].im = fft_tbl_long->hw[(w<<1)+1] * sample[ch][(w<<1)+1];
}
- realft2048(data);
+ realft2048(data);
for(w = 0; w < BLOCK_LEN_LONG; w++){
- a = data[(w<<1)];
- b = data[(w<<1)+1];
+ a = data[(w<<1)];
+ b = data[(w<<1)+1];
psy_stvar_long->fft_r[w+psy_stvar_long->p_fft] = sqrt(a*a + b*b) * sqrt2048;
+ }
-// if (w < 420)
- if( a > 0.0 ){
- if( b >= 0.0 )
- psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a );
- else
- psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a )+ M_PI * 2.0;
- } else if( a < 0.0 ) {
- psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a ) + M_PI;
- } else {
- if( b > 0.0 )
- psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = M_PI * 0.5;
- else if( b < 0.0 )
- psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = M_PI * 1.5;
- else
- psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = 0.0;
- }
+ for(w = 0; w < 16; w++){
+ a = data[(w<<1)];
+ b = data[(w<<1)+1];
+ if( a > 0.0 ){
+ if( b >= 0.0 )
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a );
+ else
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a )+ M_PI * 2.0;
+ } else if( a < 0.0 ) {
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = atan2( b, a ) + M_PI;
+ } else {
+ if( b > 0.0 )
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = M_PI * 0.5;
+ else if( b < 0.0 )
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = M_PI * 1.5;
+ else
+ psy_stvar_long->fft_f[w+psy_stvar_long->p_fft] = 0.0;
+ }
+ }
- }
-
/* FFT for short */
for(l = 0; l < MAX_SHORT_WINDOWS; l++){
/* windowing */
for(w = 0; w < BLOCK_LEN_SHORT; w++){
- FFTarray[w].re = fft_tbl_short->hw[w<<1] * sample[ch][OFFSET_FOR_SHORT + (BLOCK_LEN_SHORT * l) + (w<<1)];
- FFTarray[w].im = fft_tbl_short->hw[(w<<1)+1] * sample[ch][OFFSET_FOR_SHORT + (BLOCK_LEN_SHORT * l) + (w<<1)+1];
+ FFTarray[w].re = fft_tbl_short->hw[w<<1] * sample[ch][OFFSET_FOR_SHORT + (BLOCK_LEN_SHORT * l) + (w<<1)];
+ FFTarray[w].im = fft_tbl_short->hw[(w<<1)+1] * sample[ch][OFFSET_FOR_SHORT + (BLOCK_LEN_SHORT * l) + (w<<1)+1];
}
- realft256(data);
+ realft256(data);
for(w = 0; w < BLOCK_LEN_SHORT; w++){
- a = data[(w<<1)];
- b = data[(w<<1)+1];
- psy_stvar_short->fft_r[l][w]= sqrt(a*a + b*b) * sqrt256;
+ a = data[(w<<1)];
+ b = data[(w<<1)+1];
+ psy_stvar_short->fft_r[l][w]= sqrt(a*a + b*b) * sqrt256;
- if( a > 0.0 ){
- if( b >= 0.0 )
- psy_stvar_short->fft_f[l][w] = atan2( b, a );
- else
- psy_stvar_short->fft_f[l][w] = atan2( b, a )+ M_PI * 2.0;
- } else if( a < 0.0 ) {
- psy_stvar_short->fft_f[l][w] = atan2( b, a ) + M_PI;
- } else {
- if( b > 0.0 )
- psy_stvar_short->fft_f[l][w] = M_PI * 0.5;
- else if( b < 0.0 )
- psy_stvar_short->fft_f[l][w] = M_PI * 1.5;
- else
- psy_stvar_short->fft_f[l][w] = 0.0;
- }
+ if( a > 0.0 ){
+ if( b >= 0.0 )
+ psy_stvar_short->fft_f[l][w] = atan2( b, a );
+ else
+ psy_stvar_short->fft_f[l][w] = atan2( b, a )+ M_PI * 2.0;
+ } else if( a < 0.0 ) {
+ psy_stvar_short->fft_f[l][w] = atan2( b, a ) + M_PI;
+ } else {
+ if( b > 0.0 )
+ psy_stvar_short->fft_f[l][w] = M_PI * 0.5;
+ else if( b < 0.0 )
+ psy_stvar_short->fft_f[l][w] = M_PI * 1.5;
+ else
+ psy_stvar_short->fft_f[l][w] = 0.0;
+ }
}
}
}
@@ -722,7 +724,7 @@
if( p2_l < 0 )
p2_l = BLOCK_LEN_LONG;
- for(w = 0; w < 420; w++){
+ for(w = 0; w < 16; w++){
psy_var_long->r_pred[w] = 2.0 * psy_stvar_long->fft_r[p1_l + w] - psy_stvar_long->fft_r[p2_l + w];
psy_var_long->f_pred[w] = 2.0 * psy_stvar_long->fft_f[p1_l + w] - psy_stvar_long->fft_f[p2_l + w];
}
@@ -761,26 +763,6 @@
int w,i;
double r,f,rp,fp;
- for(w = 0; w < 420; w++){
- r = psy_stvar_long->fft_r[psy_stvar_long->p_fft+w];
- f = psy_stvar_long->fft_f[psy_stvar_long->p_fft+w];
- rp = psy_var_long->r_pred[w];
- fp = psy_var_long->f_pred[w];
-
- if( fabs(r) + fabs(rp) != 0.0 )
-/* Replacing with something faster
- psy_var_long->c[w] = sqrt( psy_sqr(r*cos(f) - rp*cos(fp))
- +psy_sqr(r*sin(f) - rp*sin(fp)) )/ ( r + fabs(rp) );
-*/
- psy_var_long->c[w] = sqrt( r*r+rp*rp-2*r*rp*cos(f+fp) )/ ( r + fabs(rp) );
-
- else
- psy_var_long->c[w] = 0.0; /* tmp */
- }
- for(w = 420; w < BLOCK_LEN_LONG; w++){
- psy_var_long->c[w] = 0.4;
- }
-
/* added by T. Araki (1997.10.16) */
for(i = 0; i < MAX_SHORT_WINDOWS; i++){
for(w = 0; w < BLOCK_LEN_SHORT; w++){
@@ -799,12 +781,39 @@
psy_var_short->c[i][w] = 0.0; /* tmp */
}
}
-// for(i = 0; i < MAX_SHORT_WINDOWS; i++){
-// for(w = 60; w < BLOCK_LEN_SHORT; w++){
-// psy_var_short->c[i][w] = 0.4;
-// }
-// }
/* added by T. Araki (1997.10.16) end */
+
+ for(w = 0; w < 16; w++){
+ r = psy_stvar_long->fft_r[psy_stvar_long->p_fft+w];
+ f = psy_stvar_long->fft_f[psy_stvar_long->p_fft+w];
+ rp = psy_var_long->r_pred[w];
+ fp = psy_var_long->f_pred[w];
+
+ if( fabs(r) + fabs(rp) != 0.0 )
+/* Replacing with something faster
+ psy_var_long->c[w] = sqrt( psy_sqr(r*cos(f) - rp*cos(fp))
+ +psy_sqr(r*sin(f) - rp*sin(fp)) )/ ( r + fabs(rp) );
+*/
+ psy_var_long->c[w] = sqrt( r*r+rp*rp-2*r*rp*cos(f+fp) )/ ( r + fabs(rp) );
+
+ else
+ psy_var_long->c[w] = 0.0; /* tmp */
+ }
+ for(w = 16; w < 416; w+=8) {
+ double temp_c = 0.0;
+
+ for(i = 0; i < MAX_SHORT_WINDOWS; i++) {
+ temp_c += psy_var_short->c[i][w/8];
+ }
+ temp_c = temp_c/8.0;
+ for(i = 0; i < MAX_SHORT_WINDOWS; i++) {
+ psy_var_long->c[w+i] = temp_c;
+ }
+ }
+
+ for(w = 416; w < BLOCK_LEN_LONG; w++){
+ psy_var_long->c[w] = 0.4;
+ }
}
void psy_step5(PARTITION_TABLE_LONG *part_tbl_long,
@@ -1128,9 +1137,49 @@
int ch
)
{
- int b;
+#if 0
+ int b,i,shb;
double temp;
+ double mn, mx, estot[8];
+ psy_var_long->pe = 0.0;
+ for(b = 0; b < part_tbl_long->len; ++b){
+ temp = part_tbl_long->width[b]
+ * log((psy_stvar_long->nb[psy_stvar_long->p_nb + b] + 0.0000000001)
+ / (psy_var_long->e[b] + 0.0000000001));
+ temp = min(0,temp);
+
+ psy_var_long->pe -= temp;
+ }
+
+ for (i=0; i < MAX_SHORT_WINDOWS; i++) {
+ estot[i]=0;
+ for ( b = 0; b < BLOCK_LEN_SHORT; b++)
+ estot[i] += psy_var_short->e[i][b];
+ }
+
+ mn = mx = estot[0];
+ for (i=0; i < MAX_SHORT_WINDOWS; i++) {
+ mn = min(mn, estot[i]);
+ mx = max(mx, estot[i]);
+ }
+
+ shb = 0;
+
+ /* tuned for t1.wav. doesnt effect most other samples */
+ if (psy_var_long->pe > 4000) shb = 1;
+
+ /* big surge of energy - always use short blocks */
+ if ( mx > 45*mn) shb = 1;
+
+ /* medium surge, medium pe - use short blocks */
+ if ((mx > 15*mn) && (psy_var_long->pe > 1500)) shb = 1;
+ if (shb) psy_var_long->pe = 1;
+ else psy_var_long->pe = 0;
+#else
+ int b;
+ double temp;
+
psy_var_long->pe = 0.0;
for(b = 0; b < part_tbl_long->len; ++b){
temp = part_tbl_long->width[b]
@@ -1140,8 +1189,9 @@
psy_var_long->pe -= temp;
}
-// if(psy_var_long->pe > 1100)
+// if(psy_var_long->pe > 1800)
// printf("%f\t\n",psy_var_long->pe);
+#endif
}
void psy_step13(PSY_VARIABLE_LONG *psy_var_long,
@@ -1149,7 +1199,11 @@
int ch
)
{
- if(psy_var_long->pe > 1250) {
+#if 1
+ if(psy_var_long->pe > 1500) {
+#else
+ if(psy_var_long->pe == 1) {
+#endif
*block_type = ONLY_SHORT_WINDOW;
} else {
*block_type = ONLY_LONG_WINDOW;
--- a/tns.c
+++ b/tns.c
@@ -138,7 +138,7 @@
#if 1
if (use_tns)
/* Doesn't work well on short windows. */
-// if (blockType == ONLY_LONG_WINDOW)
+ if (blockType == ONLY_LONG_WINDOW)
/* Perform analysis and filtering for each window */
for (w=0;w<numberOfWindows;w++) {