# 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α).

```#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:
//       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 
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, "%i", &L);
sscanf(argv, "%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.