static void print_sparse_amp_error(struct AEXP *aexp, MODEL *model, float edB_thresh)
{
int m, index;
- float edB, enormdB, error, dWo, Am;
+ float edB, enormdB, error, dWo;
float sparse_pe[MAX_AMP];
edB = frame_energy(model, &enormdB);
static void sparse_vq_amp(struct AEXP *aexp, MODEL *model)
{
int m, index;
- float error, amp_dB, edB, enormdB;
+ float error, amp_dB, enormdB;
float sparse_pe_in[MAX_AMP];
float sparse_pe_out[MAX_AMP];
float weights[MAX_AMP];
- edB = frame_energy(model, &enormdB);
+ frame_energy(model, &enormdB);
aexp->mag[2] = enormdB;
float sparse_pe_out[MAX_AMP];
float smoothed[MAX_AMP], smoothed_out[MAX_AMP];
float weights[MAX_AMP];
- float edB, enormdB;
+ float enormdB;
- edB = frame_energy(model, &enormdB);
+ frame_energy(model, &enormdB);
for(m=0; m<MAX_AMP; m++) {
sparse_pe_in[m] = 0.0;
}
-static void skip_phases(struct PEXP *pexp, MODEL *model, int start, int end) {
- int i;
-
- for(i=start; i<=end; i+=2)
- model->phi[i] = model->phi[i-1] - model->phi[i-2];
-
-}
-
static void rand_phases(MODEL *model, int start, int end) {
int i;
}
-/*
- est delta (in Wo)
- see if this gives us a better (smaller variance) prediction error
-*/
-
-static void print_pred_error_sparse_wo_correction(struct PEXP *pexp,
- MODEL *model,
- int start, int end,
- float mag_thresh)
-{
- int i, index;
- float mag, pred, error[MAX_AMP], diff, c, s, delta, err;
- float sparse_pe[MAX_AMP];
-
- mag = 0.0;
- for(i=start; i<=end; i++)
- mag += model->A[i]*model->A[i];
- mag = 10*log10(mag/(end-start));
-
- if (mag > mag_thresh) {
- for(i=0; i<MAX_AMP; i++) {
- sparse_pe[i] = 0.0;
- }
-
- /* predict phase and sum differences between harmonics */
-
- for(i=start; i<=end; i++) {
- //model->phi[i] = pexp->phi_prev[i] + N*i*(model->Wo + pexp->Wo_prev)/2.0 + 0.01*N*i;
- pred = pexp->phi_prev[i] + N*i*(model->Wo + pexp->Wo_prev)/2.0;
- error[i] = pred - model->phi[i];
- }
-
- /* estimate delta Wo */
-
- c = s = 0.0;
- for(i=start+1; i<=end; i++) {
- diff = error[i] - error[i-1];
- c += log(model->A[i])*cos(diff);
- s += log(model->A[i])*sin(diff);
- }
- delta = atan2(s,c)/N;
- //printf("delta %f\n",delta);
- delta = 0;
- /* now predict phases using corrected Wo */
-
- for(i=start; i<=end; i++) {
- pred = pexp->phi_prev[i] + N*i*(model->Wo + pexp->Wo_prev)/2.0 - N*i*delta;
- err = pred - model->phi[i];
- err = atan2(sin(err),cos(err));
-
- index = MAX_AMP*i*model->Wo/PI;
- assert(index < MAX_AMP);
- sparse_pe[index] = err;
- }
-
- /* dump spare phase vector in polar format */
-
- for(i=0; i<MAX_AMP; i++)
- printf("%f ", sparse_pe[i]);
- printf("\n");
-
- }
-
-}
-
-
-static void print_pred_error_sparse_wo_correction1(struct PEXP *pexp,
- MODEL *model,
- int start, int end,
- float mag_thresh)
-{
- int i, index;
- float mag, pred, best_Wo, err;
- float sparse_pe[MAX_AMP];
-
- mag = 0.0;
- for(i=start; i<=end; i++)
- mag += model->A[i]*model->A[i];
- mag = 10*log10(mag/(end-start));
-
- if (mag > mag_thresh) {
-
- best_Wo = refine_Wo(pexp, model, start, end);
-
- /* now predict phases using corrected Wo */
-
- for(i=0; i<MAX_AMP; i++) {
- sparse_pe[i] = 0.0;
- }
-
- for(i=start; i<=end; i++) {
- pred = pexp->phi_prev[i] + N*i*best_Wo;
- err = pred - model->phi[i];
- err = atan2(sin(err),cos(err));
-
- index = MAX_AMP*i*model->Wo/PI;
- assert(index < MAX_AMP);
- sparse_pe[index] = err;
- }
-
- /* dump spare phase vector in polar format */
-
- for(i=0; i<MAX_AMP; i++)
- printf("%f ", sparse_pe[i]);
- printf("\n");
-
- }
-
-}
-
-
static void predict_phases1(struct PEXP *pexp, MODEL *model, int start, int end) {
int i;
float best_Wo;
void phase_experiment(struct PEXP *pexp, MODEL *model, char *arg) {
int m;
- float before[MAX_AMP], best_Wo;
+ float before[MAX_AMP];
assert(pexp != NULL);
memcpy(before, &model->phi[0], sizeof(float)*MAX_AMP);