admin Site Admin

Joined: 28 Jun 2005 Posts: 66
|
Posted: Fri Jan 30, 2009 3:09 pm Post subject: Internal frame size different from NU-Tech frame size |
|
|
Q:
How can I work with internal frame size different from NU-Tech frame size?
A:
WORK_BUFFESIZE is internal frame size.
The entire structure has a latency of WORK_BUFFESIZE samples.
C code:
| Code: |
double InputBuffer[WORK_BUFFESIZE];
double OutputBuffer[WORK_BUFFESIZE];
// vectors for OLS example
double WorkBuffer[2*WORK_BUFFESIZE];
double InputBufferOld[WORK_BUFFESIZE];
....
int __stdcall PlugIn::LEPlugin_Process(PinType **Input,PinType **Output,LPVOID ExtraInfo)
{
int nSample;
while(index_i < Input[0]->DataLen)
{
nSample = min( WORK_BUFFESIZE - index_j, Input[0]->DataLen-index_i );
memcpy( &InputBuffer[index_j], &((double*)Input[0]->DataBuffer)[index_i], nSample*sizeof(double) );
memcpy( &((double*)Output[0]->DataBuffer)[index_i], &OutputBuffer[index_j], nSample*sizeof(double) );
index_i += nSample;
index_j += nSample;
if(index_j == WORK_BUFFESIZE)
{
index_j = 0;
....
// EXAMPLE with 50% OVERLAP-and-SAVE STRUCTURE and FREQUENCY FILTERING
memcpy( WorkBuffer, InputBufferOld, WORK_BUFFESIZE*sizeof(double));
memcpy( &WorkBuffer[WORK_BUFFESIZE], InputBuffer, WORK_BUFFESIZE*sizeof(double));
memcpy( InputBufferOld, InputBuffer, WORK_BUFFESIZE*sizeof(double));
// FFT
....
// FREQUENCY FILTERING
....
// IFFT
....
memcpy( OutputBuffer, &WorkBuffer[WORK_BUFFESIZE], WORK_BUFFESIZE*sizeof(double));
}
}
index_i=0;
return COMPLETED;
}
void __stdcall PlugIn::LEPlugin_Init()
{
....
index_j = 0;
index_i = 0;
...
}
|
_________________ The NU-Tech Team |
|