- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello.
Please forgive my English.
I am using ippsIIR_32f for filtering audio stream, and have a trouble with this function. When I pass the non-zero samplesto pSrc, the function works well. but when I pass zero samples, the processing becomes delayed.
Why? and How can I avoid this undesirable phenomenon?
Please forgive my English.
I am using ippsIIR_32f for filtering audio stream, and have a trouble with this function. When I pass the non-zero samplesto pSrc, the function works well. but when I pass zero samples, the processing becomes delayed.
Why? and How can I avoid this undesirable phenomenon?
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
HI,
Do you have any code that can show this problem? That will be helpful.
Thanks,
Chao
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you for your reply, and please excuse me for being late to answer.
I'llgive a samplecode follow:
---
int iir(void)
{
int ret = 1;
int const input_length = 48000 * 24;
int const filter_length = FILTER_COEFFICIENTS_LENGTH;
Ipp32f *input = NULL;
Ipp32f *filter = NULL;
Ipp32f *output = NULL;
//
// zero-padding to input sequence except for the first sample
//
input = ippsMalloc_32f(input_length);
if (input==0) { goto error; }
for (size_t i=1; i input = 0;
}
input[0] = 1;
//
// set filter coefficients
//
filter = ippsMalloc_32f(filter_length);
if (filter==0) { goto error; }
for (size_t i=0; i filter = FilterCoefficients;
}
output = ippsMalloc_32f(input_length);
if (output==0) { goto error; }
{
IppsIIRState_32f *ctx;
DWORD start;
DWORD end;
DWORD elapsed;
IppStatus status;
status = ippsIIRInitAlloc_32f(&ctx, filter, (int)(filter_length/2-1), 0);
if (status != ippStsNoErr) {
printf("IIRInitAlloc failure.n");
goto error;
}
//
// start measuring
//
start = GetTickCount();
status = ippsIIR_32f(input, output, (int)input_length, ctx);
//
// stop measuring
//
end = GetTickCount();
elapsed = (end-start);
printf("input : time(ms)=%ld status=%dn"
, elapsed, status);
ippsIIRFree_32f(ctx);
}
ret = 0;
error:
if (input) { ippsFree(input); }
if (filter) { ippsFree(filter); }
if (output) { ippsFree(output); }
return ret;
}
---
Thank you.
I'llgive a samplecode follow:
---
int iir(void)
{
int ret = 1;
int const input_length = 48000 * 24;
int const filter_length = FILTER_COEFFICIENTS_LENGTH;
Ipp32f *input = NULL;
Ipp32f *filter = NULL;
Ipp32f *output = NULL;
//
// zero-padding to input sequence except for the first sample
//
input = ippsMalloc_32f(input_length);
if (input==0) { goto error; }
for (size_t i=1; i
}
input[0] = 1;
//
// set filter coefficients
//
filter = ippsMalloc_32f(filter_length);
if (filter==0) { goto error; }
for (size_t i=0; i
}
output = ippsMalloc_32f(input_length);
if (output==0) { goto error; }
{
IppsIIRState_32f *ctx;
DWORD start;
DWORD end;
DWORD elapsed;
IppStatus status;
status = ippsIIRInitAlloc_32f(&ctx, filter, (int)(filter_length/2-1), 0);
if (status != ippStsNoErr) {
printf("IIRInitAlloc failure.n");
goto error;
}
//
// start measuring
//
start = GetTickCount();
status = ippsIIR_32f(input, output, (int)input_length, ctx);
//
// stop measuring
//
end = GetTickCount();
elapsed = (end-start);
printf("input : time(ms)=%ld status=%dn"
, elapsed, status);
ippsIIRFree_32f(ctx);
}
ret = 0;
error:
if (input) { ippsFree(input); }
if (filter) { ippsFree(filter); }
if (output) { ippsFree(output); }
return ret;
}
---
Thank you.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page