gausswin source code
I want to create gaussian window program in C/C++. I have checked at Matlab and they give gausswin function to create gaussian window. I have checked gausswin Matlab source code and convert that code to C/C++.
The coefficients of a Gaussian window are computed from the following equation:
where –(N – 1)/2 ≤ n ≤ (N – 1)/2 and α is inversely proportional to the standard deviation, σ, of a Gaussian random variable. The exact correspondence with the standard deviation of a Gaussian probability density function is σ = (N – 1)/(2α).
Below is gaussian window code converted from Matlab to C/C++:
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
float *gausswin(int L, float a)
{
// GAUSSWIN Gaussian window.
// GAUSSWIN(N) returns an N-point Gaussian window.
//
// GAUSSWIN(N, ALPHA) returns the ALPHA-valued N-point Gaussian
// window. ALPHA is defined as the reciprocal of the standard
// deviation and is a measure of the width of its Fourier Transform.
// As ALPHA increases, the width of the window will decrease. If omitted,
// ALPHA is 2.5.
//
// Reference:
// [1] fredric j. harris [sic], On the Use of Windows for Harmonic
// Analysis with the Discrete Fourier Transform, Proceedings of
// the IEEE, Vol. 66, No. 1, January 1978
// Author(s): P. Costa
// Copyright 1988-2005 The MathWorks, Inc.
// $Revision: 1.14.4.4 $ $Date: 2007/12/14 15:04:55 $
// Compute window according to [1]
int i, N;
float *G;
float n;
N = L-1;
G = (float*) calloc(L,sizeof(float));
n = -N/2.0;
for (i=0; i<L; i++)
{
G[i] = expf(-(1.0/2.0) * powf((a*n / (N/2.0)),2.0) );
n = n+1.0;
}
return(G);
}
int main(int argc, char **argv)
{
int i;
int L;
float a;
if(argc!=3)
{
fprintf(stderr, "gausswin L a \n");
fprintf(stderr, "L (integer) = npoint data \n");
fprintf(stderr, "a (float) = inversely proportional to the standard deviation of a Gaussian random variable \n");
return(1);
}
//get input parameter
sscanf(argv[1], "%i", &L);
sscanf(argv[2], "%f", &a);
//process gaussian window
float *G = gausswin(L, a);
//print output
fprintf(stderr, "Gaussian Window Data (L=%i a=%f) : \n", L, a);
for(i=0; i<L; i++)
{
fprintf(stderr, "%f \n", G[i]);
}
free(G);
return(0);
}
Compile this gausswin.c (gaussian window source code) using command :
gcc gausswin.c -lm -o gausswin
Show gaussian window program manual using command :
toto@ubuntu:~/Documents$ ./gausswin gausswin L a L (integer) = npoint data a (float) = inversely proportional to the standard deviation of a Gaussian random variable
Sample command how to run gaussian window program
toto@ubuntu:~/Documents$ ./gausswin 10 0.2 Gaussian Window Data (L=10 a=0.200000) : 0.980199 0.987974 0.993846 0.997780 0.999753 0.999753 0.997780 0.993846 0.987974 0.980199
I have compare the result from my gaussian window program and show same result compared with gausswin Matlab.