/*--------------------------------------------------------------------------------
フーリエ・トランスフォーム・サロゲート法
Fourier transform (FT) surrogate method
FT_surrogate.h
*--------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
// 生成するサロゲートデータの数, number of surrogate data to be generated
#define SURROGATE_DATA_NUM 5
// 乱数の種, seed for random number
#define MT_SEED 1118
typedef struct
{
double real; // 実部, real part
double imag; // 虚部, imaginary part
} complex;
/*-----------------------------------------------------------------------*/
extern complex *readdata( int *num );
extern void fourier( int num, complex *x, complex *F );
extern void inv_fourier( int num, complex *x, complex *F );
extern int random_shuffle( int num, complex *org_data, complex *RS );
/*-----------------------------------------------------------------------*/
/* period parameters */
#define N 624
#define M 397
#define MATRIX_A 0x9908b0dfUL /* constant vector a */
#define UPPER_MASK 0x80000000UL /* most significant w-r bits */
#define LOWER_MASK 0x7fffffffUL /* least significant r bits */
/*-----------------------------------------------------------------------*/
extern double uniform_random_numbers( void );
extern double exponential( void );
extern double normal( void );
/*-----------------------------------------------------------------------*/
extern void init_genrand(unsigned long s);
extern void init_by_array(unsigned long init_key[], int key_length);
extern unsigned long genrand_int32(void);
extern long genrand_int31(void);
extern double genrand_real1(void);
extern double genrand_real2(void);
extern double genrand_real3(void);
extern double genrand_res53(void);
/*-----------------------------------------------------------------------*/