Возможно ошибка в ippsFFTFwd_RToCCS_32f_I
Итак, для начала код:
int FFTOrder = 16;
int SampleCount = 1 << FFTOrde
r;
int BufferSize = SampleCount+3;
Ipp32f* TestBuffer = new Ipp32f[BufferSize];
TestBuffer[BufferSize-3] = 30;
TestBuffer[BufferSize-2] = 20;
TestBuffer[BufferSize-1] = 10;
IppStatus ipps;
Ipp32f Phase = 0;
ipps = ippsT
one_Direct_32f(TestBuffer, SampleCount, 1, 0.125, &Phase, ippAlgHintAccurate);
assert(ipps == ippStsNoErr);
as
sert(TestBuffer[BufferSize-3] == 30);
assert(TestBuffer[BufferSize-2] == 20);
assert(TestBuffer[BufferSize-1] == 10)
;
IppsFFTSpec_R_32f* FFTR16Spec;
ipps = ippsFFTInitAlloc_R_32f(&FFTR16Spec, 16, IPP_FFT_DIV_FWD_BY_N, ippAlg
HintAccurate);
assert(ipps == ippStsNoErr);
ipps = ippsFFTFwd_RToCCS_32f_I(TestBuffer, FFTR16Spec, NULL);
assert
(ipps == ippStsNoErr);
assert(TestBuffer[BufferSize-3] == 30);
assert(TestBuffer[BufferSize-2] == 20);
assert(Te
stBuffer[BufferSize-1] == 10);
ippsFFTFree_R_32f(FFTR16Spec);
if(TestBuffer[BufferSize-3] != 30)
printf("Erro
r!n");
else
printf("OKn");
delete[] TestBuffer;
Здесь происходит следующее. Выделяется область памят
и для БПФ (FFT) 16 степени, причем я намеренно выделил на 3 отсчета больше памяти, чем надо. Далее генерируется 655
36 отсчетов сигнала, и 3 дополнительных отсчета, которые должны сохраниться после БПФ. После выполнения ippsFFTFwd_
RToCCS_32f_I мои дописанные в конец буфера 3 отсчета изменяются. Я такого поведения не ожидал. К тому же, если выде
лить память ровно под 65536 отсчетов, то будет изменена невыделенная память, что является грубой ошибкой. А может о
шибка у меня, что подскажите :-? P.S. исходник для visual c++ приложил
|