0

次の 2D 配列があります。

float accumulator[MAX_CHANNELS][2*MAX_FRAME_LENGTH];

そして、次のように、すべてのチャネルのコードでメモリのブロックを移動し続けます。

for (int channel = 0; channel < nChannels; channel++) {
    memmove(accumulator[channel], accumulator[channel] + stepSize, fftFrameSize * 2 * sizeof(float));
}

ただし、これにより間違った結果が得られ、その理由がわかりません。memmove使用している通話の何が問題になっていますか?

または、代わりに次の 1D 配列 (チャネルごとに 1 つ) を使用してみましたが、正しい結果が得られました。

float accumulator1[2*MAX_FRAME_LENGTH];
float accumulator2[2*MAX_FRAME_LENGTH];

memmove(accumulator1, accumulator1 + stepSize, fftFrameSize * 2 * sizeof(float));
memmove(accumulator2, accumulator2 + stepSize, fftFrameSize * 2 * sizeof(float));
4

1 に答える 1