Lines Matching defs:na
231 struct noise_analyzer *na, float *src,
240 if (length < 2 * na->nsamples)
244 for (i = 0, tmp = 0.0, shift = -1; i < na->nsamples; i++) {
262 for (i = 0; i < na->nsamples; i++)
263 na->source[i] = a * src[i + shift + 1] + b * src[i + shift];
268 for (i = 0, tmp = 0.0; i < na->nsamples; i++)
269 tmp += na->source[i] * na->source[i];
270 rms = sqrtf(tmp / na->nsamples);
272 gain = na->rms_tgt / rms;
274 for (i = 0; i < na->nsamples; i++)
275 na->source[i] *= gain;
279 for (i = 0, tmp = 0.0, residual = 0.0; i < na->nsamples; i++) {
280 tmp = fabsf(na->target[i] - na->source[i]);
284 tmp = na->rms_tgt / sqrtf(residual / na->nsamples);
285 na->snr_db = 20.0 * log10f(tmp);
293 struct noise_analyzer na;
307 na.source = (float *)malloc(sizeof(float) * nsamples);
308 if (!na.source) {
313 na.target = (float *)malloc(sizeof(float) * nsamples);
314 if (!na.target) {
320 err = generate_sine_wave_raw_mono(bat, na.target, freq, nsamples);
324 na.nsamples = nsamples;
328 tmp += na.target[i] * na.target[i];
329 na.rms_tgt = sqrtf(tmp / nsamples);
335 na.snr_db = SNR_DB_INVALID;
337 err = calculate_noise_one_period(bat, &na, src + offset,
342 if (na.snr_db > bat->snr_thd_db) {
344 sum_snr_pc += 100.0 / powf(10.0, na.snr_db / 20.0);
367 free(na.target);
369 free(na.source);