43#include "array_smoother.h"
44#include "EST_cutils.h"
48#define MODULE "array_smoother"
53void mk_window_coeffs (
int length,
float win_coeff[]);
60 int C1,
C2 = 0,
C3 = 0,
C4 = 0, c1, c2, c3, c4;
65 float xdel[2 * MAX_LEN - 2],
ydel[2 * MAX_LEN - 2];
82 mid1 =
ms->first_median / 2;
84 if (
ms->apply_hanning)
86 C2 =
ms->window_length - 1;
87 delay =
ms->first_median +
ms->window_length - 2;
89 if (
ms->smooth_double) {
90 mid2 =
ms->second_median / 2;
91 C3 =
ms->second_median - 1;
92 if (!
ms->apply_hanning) {
97 C4 =
ms->window_length - 1;
98 delx =
ms->first_median +
ms->window_length - 1;
99 dely =
ms->second_median +
ms->window_length - 1;
108 if (!
ms->extrapolate) {
110 for (i = 0; i <
delay / 2; i++)
129 if (
ms->smooth_double) {
130 for (i =
delx - 1; i > 0; i--)
142 if (
ms->apply_hanning)
151 if (
ms->smooth_double)
160 for (i =
dely - 1; i > 0; i--)
170 if (
ms->apply_hanning) {
191 if (!
ms->extrapolate)
192 for (i = 0; i <
delay / 2; i++)
203 for (i =
lmed - 1; i > 0; i--)
216 for (i = 0; i <
lmed; i++)
220 for (i = 0; i <
j; i++)
232#define TWO_PI 6.28318530717958647698
234void mk_window_coeffs (
int length,
float win_coeff[])
239 for (i = 0; i < length; i++) {
240 x = TWO_PI * (i + 1.0) / (length + 1.0);
250 float valout = 0.0, weight[MAX_LEN];
252 for (i =
par->window_length - 1; i > 0; i--)
261 for (i = 0; i <
par->window_length; i++)
265 for (i = 0; i <
par->window_length; i++)
268 mk_window_coeffs (
par->window_length - k, weight);
269 for (i = 0,
j = 0; i <
par->window_length; i++)
280void initialise_parameters (
struct Ms_Op *
p_par)
282 p_par->smooth_double = 0;
283 p_par->apply_hanning = 0;
284 p_par->extrapolate = 0;
285 p_par->window_length = DEFAULT_WLEN;
286 p_par->first_median = DEFAULT_MED_1;
287 p_par->second_median = DEFAULT_MED_2;
293 ms->smooth_double = FALSE;
294 ms->apply_hanning = TRUE;
295 ms->extrapolate = TRUE;
296 ms->first_median = 11;
297 ms->second_median = 1;
298 ms->window_length = 7;