/* EF[ubgϊvO@*/


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <complex.h>

#define complex complex<float>
#define WAVELET 128
#define COUNT 100
#define PI 3.141592

int MakeWavelet( complex *wavelet, int size );

main(int argc, char *argv[])
{
	float a;
	static complex wavelet[WAVELET];
	static complex data[2048];
	static complex result[129][2048];
	static float resulti[129][2048];
	FILE *fp;
	int i, j, k;
	static char buff[256];
	int datasize, size;

	fp = fopen( argv[1], "rt" );
	i = 0;
	while(1)					/* f[^̓ǂݍ */
	{
		if( fgets( buff, 256, fp ) == NULL )
			break;
		data[i] = complex( (float)atof( buff ), 0.0);
		i++;
	}
	fclose( fp );

	datasize = i;

	for( size = 9; size <= 128; size++ )	/* Wavelet̑傫Xɕω */
	{
		printf( "%d\n", size );
		MakeWavelet( wavelet, size );	/* Wavelet̍쐬@*/
		for( i = 0; i < datasize; i++ )
		{
			result[size][i] = complex( 0.0, 0.0 );
		}
		for( i = 0; i < datasize-size; i++ )
		{
			result[size][i] = 0.0;
			for( k = 0; k < size; k++ )		/*@waveletƂ̑ւvZ */
			{
				result[size][i] += wavelet[k]*data[i+k];
			}
		}
	}

//	fp = fopen( "result-b", "wb" );
	fp = fopen( "result-b", "wt" );
	for( size = 9; size <= 128; size++ )
	{
		for( i = 0; i < datasize; i++ )
		{
			resulti[size][i] = abs( result[size][i] );
		}

		for( i = 0; i < datasize-1; i++ )
		{
			fprintf( fp, "%f, ", resulti[size][i] );
		}
		fprintf( fp, "%f\n", resulti[size][datasize-1] );
		
//		fwrite( resulti[size], sizeof(float), datasize, fp );
	}
	fclose( fp );

}

MakeWavelet( complex *wavelet, int size )
{
	int i;

	for( i = 0; i < size; i++ )
	{
		wavelet[i] = complex( cos( 4.0*PI*(i-size/2)/(size-1) ), sin(4.0*PI*(i-size/2)/(size-1)));
	}
}