[FFmpeg-soc] [PATCH] AMR-WB Decoder
Marcelo Galvão Póvoa
marspeoplester at gmail.com
Fri Sep 3 23:50:28 CEST 2010
On 3 September 2010 05:19, Vitor Sessak <vitor1001 at gmail.com> wrote:
> On 08/30/2010 02:31 PM, Vitor Sessak wrote:
>>
>> On 08/27/2010 11:13 PM, Marcelo Galvão Póvoa wrote:
>>>
>>> On 26 August 2010 18:55, Vitor Sessak<vitor1001 at gmail.com> wrote:
>>>>
>>>> Marcelo Galvão Póvoa wrote:
>
>
> [...]
>
>>>>> +/**
>>>>> + * Apply to synthesis a 2nd order high-pass filter
>>>>> + *
>>>>> + * @param[out] out Buffer for filtered output
>>>>> + * @param[in] hpf_coef Filter coefficients as used below
>>>>> + * @param[in,out] mem State from last filtering (updated)
>>>>> + * @param[in] in Input speech data
>>>>> + *
>>>>> + * @remark It is safe to pass the same array in in and out parameters
>>>>> + */
>>>>> +static void high_pass_filter(float *out, const float hpf_coef[2][3],
>>>>> + float mem[4], const float *in)
>>>>> +{
>>>>> + int i;
>>>>> + float *x = mem - 1, *y = mem + 2; // previous inputs and outputs
>>>>> +
>>>>> + for (i = 0; i< AMRWB_SFR_SIZE; i++) {
>>>>> + float x0 = in[i];
>>>>> +
>>>>> + out[i] = hpf_coef[0][0] * x0 + hpf_coef[1][0] * y[0] +
>>>>> + hpf_coef[0][1] * x[1] + hpf_coef[1][1] * y[1] +
>>>>> + hpf_coef[0][2] * x[2];
>>>>> +
>>>>> + y[1] = y[0];
>>>>> + y[0] = out[i];
>>>>> +
>>>>> + x[2] = x[1];
>>>>> + x[1] = x0;
>>>>> + }
>>>>> +}
>>>>
>>>> acelp_filter.c:ff_acelp_apply_order_2_transfer_function()
>>>>
>>> Are you sure? I can't see them as equivalent, could you explain?
>>
>> I'll give a better look at it soon...
>
> Try the attached patch, it practically does not change the output:
>
> deus-23k85.awbstddev: 0.08 PSNR:118.01 MAXDIFF: 1 bytes: 1054720/
> 1054720
> seed-12k65.awbstddev: 0.06 PSNR:119.94 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-14k25.awbstddev: 0.06 PSNR:119.59 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-15k85.awbstddev: 0.06 PSNR:119.92 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-18k25.awbstddev: 0.07 PSNR:119.32 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-19k85.awbstddev: 0.07 PSNR:119.20 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-23k05.awbstddev: 0.07 PSNR:119.35 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-23k85.awbstddev: 0.07 PSNR:119.42 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-6k60.awbstddev: 0.06 PSNR:119.61 MAXDIFF: 1 bytes: 327680/
> 327680
> seed-8k85.awbstddev: 0.07 PSNR:119.19 MAXDIFF: 1 bytes: 327680/
> 327680
>
I've tried testing with two other samples I encoded and the results were:
all_man.awb stddev: 0.24 PSNR:108.64 MAXDIFF: 1 bytes: 473600/ 473600
conference-23k85.awb stddev: 0.20 PSNR:109.95 MAXDIFF: 1 bytes:
157440/ 157440
I think I should apply this patch then?
I noticed that when I run the comparison for deus-23k85.awb the stddev
is 0.16, not 0.08 like yours. Maybe it's because I am on OS X or I did
something wrong?
Also, whether with this patch or not I guess my output to the first
sample above (attached) is not good compared to the reference decoder.
The are some sharp peaks that can be seen with Audacity, one of them
also with clipping. The stddev I've got seems ugly:
stddev: 884.86 PSNR: 37.39 MAXDIFF:23298 bytes: 473600/ 473600
Inverting one of the waves and playing them simultaneously I can hear
some intermittent artifacts, so I guess there is still something wrong
with the decoder.
--
Marcelo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: all_men.awb
Type: application/octet-stream
Size: 48653 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/attachments/20100903/4e0e69fe/attachment.obj>
More information about the FFmpeg-soc
mailing list