Skip to content

Instantly share code, notes, and snippets.

@veggiesaurus
Created July 1, 2015 11:28
Show Gist options
  • Save veggiesaurus/c95bd91cfd0348d2d3cd to your computer and use it in GitHub Desktop.
Save veggiesaurus/c95bd91cfd0348d2d3cd to your computer and use it in GitHub Desktop.
dCFD code (QtDAQ)
bool cfdSample(float* inputData, float inputBaseline, int inputNumSamples, float inputF, int inputL, int inputD, float inputOffset, float inputScale, float*& outputData)
{
float F=inputF;
int L=inputL;
int D=inputD;
int N=inputNumSamples;
//start from k-(L+D)=0 => k=L+D
int k=L+D;
if (k>inputNumSamples)
return false;
//zero the first part of the output
for (int i=0;i<inputNumSamples;i++)
outputData[i]=inputOffset;
float baselineFix=inputBaseline*(1.0-F);
for (k=L+D;k<inputNumSamples;k++)
{
for (int i=1;i<=L;i++)
{
outputData[k]+=(F*(inputData[k-i])-(inputData[k-i-D])+baselineFix)*inputScale;
}
}
return true;
}
bool cfdSampleOptimized(float* inputData, float inputBaseline, int inputNumSamples, float inputF, int inputL, int inputD, float inputOffset, float inputScale, float*& outputData)
{
float F=inputF;
int L=inputL;
int D=inputD;
int N=inputNumSamples;
//start from k-(L+D)=0 => k=L+D
int k=L+D;
if (k>inputNumSamples)
return false;
//zero the first part of the output
for (int i=0;i<=L+D;i++)
outputData[i]=inputOffset;
float baselineFix=inputBaseline*(1.0-F);
for (int i=1;i<=L;i++)
{
outputData[k]+=(F*(inputData[k-i])-(inputData[k-i-D])+baselineFix)*inputScale;
}
float* i_n = &(inputData[L + D]);
float* i_nl = &(inputData[D]);
float* i_nd = &(inputData[L]);
float* i_nld = inputData;
float* o_n = &(outputData[L + D]);
for (int n=L+D;n<inputNumSamples-1;n++)
{
outputData[n+1]=outputData[n]+(F*(inputData[n]-inputData[n-L])-inputData[n-D]+inputData[n-L-D])*inputScale;
}
return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment