Improving performance of for loop when decimating a buffer

后端 未结 3 1622
无人共我
无人共我 2021-01-28 07:13

I am collecting 16384 double values from a hardware device using a signal processing library. The 16384 values I receive are the output of a low pass filter. I want to down sa

3条回答
  •  面向向阳花
    2021-01-28 07:27

    You are actually getting everything and then drop the unnecessary ones. How about dropping those without copying at first step. I mean rather than using Array.Copy just copy the needed ones like;

    int j = bufferCount * 16384;
    for (int i = 0; i < 16384; i += 10)
    {
        realbuffer[j++] = rawData[i];
    }
    

    By doing so you will not need to run the loop inside if statement.

    If you cannot change the overall structure of you code due to any condition, you can increase the loop performance by a technique that is used in sorting algorithms . Define your array with the size 163840 + 1. Assign some value to the last position of your array such as -1 which will not be inside the received data. And change the loop as follows which decreases the number of comparison in the execution of the loop;

    for (int i = 0; i < rawData[i+=10 ] !=-1; ) 
    {
        realbuffer[j] = rawData[i];
        j++;
    }
    

    Hope it helps.

提交回复
热议问题