- 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