- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi.
It seems like indexing of the array pDlySrc begins with 1, not with 0.
Check the code below. It preforms FIRMR. Then changing pDlySrc[0] to 0 and performs FIRMR again. The results are equal.
IPP version: 2017.2.187 (20017 Update 2)
OS: Windows 8.1 Pro
Visual Studio 2013
CODE:
#include "stdafx.h"
#include <ipps.h>
#include <ipp.h>
int _tmain(int argc, _TCHAR* argv[])
{
ippInit();
Ipp32f pTaps[10] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1};
const int numIters = 6;
const int tapsLen = 10;
const int downFactor = 5;
const int srcSize = downFactor*(numIters - 1) + 1;
const int dstSize = numIters;
const int dlySize = tapsLen - 1;
int specSize, bufSize, i;
Ipp32f* pSrc = ippsMalloc_32f(srcSize);
Ipp32f* pDst = ippsMalloc_32f(dstSize);
Ipp32f* pDlySrc = ippsMalloc_32f(dlySize +1);
Ipp8u* pBuf;
IppsFIRSpec_32f *pSpec;
IppStatus status;
status = ippsFIRMRGetSize(tapsLen, 1, downFactor, ipp32f, &specSize, &bufSize);
if (ippStsNoErr != status) return -1;
pSpec = (IppsFIRSpec_32f*)ippsMalloc_8u(specSize);
pBuf = ippsMalloc_8u(bufSize);
status = ippsFIRMRInit_32f(pTaps, tapsLen, 1, 0, downFactor, 0, pSpec);
if (ippStsNoErr != status) return -1;
for (i = 0; i < dlySize+1; i++) pDlySrc = 10;
for (i = 0; i<srcSize; i++) pSrc = 1;
pSrc[srcSize - 1] = 100;
status = ippsFIRMR_32f(pSrc, pDst, numIters, pSpec, pDlySrc, NULL, pBuf);
if (ippStsNoErr != status) return -1;
printf("dlySrc[%d]\n", dlySize);
for (i = 0; i<dlySize; i++) printf("%6.2f ", pDlySrc);
printf("{%6.2f}", pDlySrc[dlySize]);
printf("\nsrc[%d]\n", srcSize);
for (i = 0; i<srcSize; i++) printf("%2.0f ", pSrc);
printf("\ntaps[%d]\n", tapsLen);
for (i = 0; i<tapsLen; i++) printf("%1.3f ", pTaps);
printf("\n\n\ndst[%d]\n", dstSize);
for (i = 0; i<dstSize; i++) printf("%2.2f ", pDst);
pDlySrc[0] = 0;
status = ippsFIRMR_32f(pSrc, pDst, numIters, pSpec, pDlySrc, NULL, pBuf);
if (ippStsNoErr != status) return -1;
printf("\n\n\n\ndlySrc[%d]\n", dlySize);
for (i = 0; i<dlySize; i++) printf("%6.2f ", pDlySrc);
printf("{%6.2f}", pDlySrc[dlySize]);
printf("\nsrc[%d]\n", srcSize);
for (i = 0; i<srcSize; i++) printf("%2.0f ", pSrc);
printf("\ntaps[%d]\n", tapsLen);
for (i = 0; i<tapsLen; i++) printf("%1.3f ", pTaps);
printf("\n\n\ndst[%d]\n", dstSize);
for (i = 0; i<dstSize; i++) printf("%2.2f ", pDst);
printf("\n\nIPP_VERSION: ");
printf(IPP_VERSION_STR);
printf("\n");
return 0;
}
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear developers.
There is still no feedback on this issue. Tell me maybe I should post this information somewhere else?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Aleksey.
Thanks for using IPP library.
FIRMR has very complex API. Actually to get correct result the +-1 element from delay line is used. It depends from combination up/down factors and phases. Therefore ippsFIRMR function always requests enough number (tapsLen + upFactor - 1) / upFactor elements in delay line. See IPP manual "If the delay line array pDlyLine is not NULL, its length is defined as (tapsLen + upFactor - 1) /
upFactor." In your case you provide (10+1-1/1)=10 elements and 0th is not used. So zeroing of 0th has no effect in your case.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hmm. Looks like that last documentation of ippsFIRMR is not correct enough. But the code example uses correct sizes of pDlySrc and pDlyDst
There is a lot of information how ippsFIRMR works in legacy pdf manual of IPP 7.1
https://software.intel.com/sites/default/files/m/d/4/1/d/8/ipps.pdf
I hope it will clarify API and behavior of ippsFIRMR.
We'll fix documentation in next IPP release.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Got it. Thank you, Andrey.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page