Changeset 20936 for trunk/Ohana/src/opihi/cmd.data/vsmooth.c
- Timestamp:
- Dec 7, 2008, 3:31:01 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/vsmooth.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/vsmooth.c
r7917 r20936 3 3 int vsmooth (int argc, char **argv) { 4 4 5 int i, n, N, Nx, Ns, Ngauss; 6 float *vi, *vo, *gauss, *gaussnorm; 7 float g, s, sigma, Nsigma; 5 int i, n, N, Nx, Ns, Ngauss, isFloat; 6 opihi_flt *vf, *vo, *gauss, *gaussnorm; 7 opihi_int *vi; 8 float g, s, sigma, Nsigma, value; 8 9 Vector *in; 9 10 … … 23 24 sigma = atof (argv[2]); 24 25 Nx = in[0].Nelements; 25 vi = in[0].elements;26 26 27 27 /* build a 1D gaussian */ 28 28 Ns = (int) (Nsigma*sigma + 0.5); 29 29 Ngauss = 2*Ns + 1; 30 ALLOCATE (gaussnorm, float, Ngauss);30 ALLOCATE (gaussnorm, opihi_flt, Ngauss); 31 31 gauss = &gaussnorm[Ns]; 32 32 for (i = -Ns; i < Ns + 1; i++) { … … 34 34 } 35 35 36 ALLOCATE (vo, float, Nx); 36 ALLOCATE (vo, opihi_flt, Nx); 37 38 isFloat = (in[0].type == OPIHI_FLT); 39 vf = in[0].elements.Flt; 40 vi = in[0].elements.Int; 37 41 38 42 for (i = 0; i < Nx; i++) { … … 41 45 if (i+n < 0) continue; 42 46 if (i+n >= Nx) continue; 43 s += gauss[n]*vi[i+n]; 47 value = isFloat ? vf[i+n] : vi[i+n]; 48 s += gauss[n]*value; 44 49 g += gauss[n]; 45 50 } … … 47 52 } 48 53 49 free (in[0].elements);50 54 free (gaussnorm); 51 55 52 in[0].elements = vo; 56 if (isFloat) { 57 free (in[0].elements.Flt); 58 } else { 59 free (in[0].elements.Int); 60 } 61 62 // smoothing an int vector results in a float vector 63 in[0].type = OPIHI_FLT; 64 in[0].elements.Flt = vo; 53 65 return (TRUE); 54 66 }
Note:
See TracChangeset
for help on using the changeset viewer.
