-
Notifications
You must be signed in to change notification settings - Fork 1
/
SigPyProc.c
86 lines (77 loc) · 1.83 KB
/
SigPyProc.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdio.h>
#include <stdlib.h>
#include <fftw3.h>
#include <time.h>
#include <math.h>
#include <Python.h>
/*----------------------------------------------------------------------------*/
FILE* cfile(PyObject* file){
FILE* cfile = PyFile_AsFile(file);
return(cfile);
}
void runningMean(float* inbuffer,
float* outbuffer,
int nsamps,
int window)
{
int ii;
double sum = 0;
for (ii=0;ii<nsamps;ii++){
sum += inbuffer[ii];
if (ii<window)
outbuffer[ii] = inbuffer[ii] - (float) sum/(ii+1);
else {
outbuffer[ii] = inbuffer[ii] - (float) sum/(window+1);
sum -= inbuffer[ii-window];
}
}
}
void downsampleTim(float* inbuffer,
float* outbuffer,
int factor,
int newLen)
{
int ii,jj;
for(ii=0;ii<newLen;ii++){
for(jj=0;jj<factor;jj++)
outbuffer[ii]+=inbuffer[(ii*factor)+jj];
outbuffer[ii]/=(float) factor;
}
}
void foldTim(float* buffer,
double* result,
int* counts,
double tsamp,
double period,
int nsamps,
int nbins,
int nsubs)
{
int ii,phasebin,subbint,factor;
factor = (int) nsamps/nsubs;
for(ii=0;ii<nsamps;ii++){
phasebin = ((int)((ii*tsamp*nbins/period)+0.5))%nbins;
subbint = (int) ii/factor;
result[(subbint*nbins)+phasebin]+=buffer[ii];
counts[(subbint*nbins)+phasebin]++;
}
}
void ifft(float* buffer,
float* result,
int size)
{
fftwf_plan plan;
plan = fftwf_plan_dft_c2r_1d(size, (fftwf_complex*) buffer,
result,FFTW_ESTIMATE|FFTW_PRESERVE_INPUT);
fftwf_execute(plan);
fftwf_destroy_plan(plan);
}
void rfft(float* buffer,
float* result,
int size)
{
fftwf_plan plan;
plan = fftwf_plan_dft_r2c_1d(size, buffer, (fftwf_complex*) result,FFTW_ESTIMATE);
fftwf_execute(plan);
fftwf_destroy_plan(plan);
}