On Oct 27, 2014 6:36 PM, "Jeff Long" <willco...@gmail.com> wrote:
>
> On 10/27/2014 04:40 PM, Andy Walls wrote:
>>
>> On Thu, 2014-07-31 at 12:01 -0400, discuss-gnuradio-requ...@gnu.org
>> wrote:
>>
>>> Message: 5
>>> Date: Wed, 30 Jul 2014 18:42:14 +0200
>>> From: Daniele Nicolodi <dani...@grinta.net>
>>> To: GNURadio <discuss-gnuradio@gnu.org>
>>> Subject: [Discuss-gnuradio] Filter in rational resampler
>>>
>>> Hello,
>>>
>>> I was studying the code of the rational resampler block in
>>> gnuradio/gr-filter/pythoin/rational_resampler.py and I have a doubt
>>> about the low pass filter generated by the design_filter() function.
>>>
>>> It seems that the generated filter does not take into account the
>>> decimation factor. Is that correct? I don't see how this may result in
>>> the correct anti-aliasing filter when it is applied by
>>> rational_resampler_base_xxx.
>>>
>>> Can someone point me to a relevant explanation?
>>>
>>> Thanks a lot. Cheers,
>>> Daniele
>>
>>
>> Daniele,
>>
>> I just had occasion to use the rational resampler for a 25 Ksps -> 16
>> Ksps resampling and low-pass filtering all in one step, with a LPF that
>> cut off frequencies higher than 3000 Hz.  I started by using this
>> expression for the taps, following the filter design in
>> gr-filter/python/rational_resampler.py:
>>
>>         filter.firdes.low_pass(16.0, 16000.0, 3250.0/16.0, 500.0/16.0,
filter.firdes.WIN_KAISER, 5.0)
>>
>> That filter only includes the interpolation factor, 16.0, and seemed to
>> do the wrong thing.  The FFT scope showed the rolloff started at around
>> ~4700 Hz, about 25/16 * 3000 Hz.
>>
>> This expression for the taps, which included the decimation factor of
>> 25.0, appeared to do the right thing:
>>
>>         filter.firdes.low_pass(16.0, 16000.0, 3250.0/25.0, 500.0/25.0,
filter.firdes.WIN_KAISER, 5.0)
>>
>>
>> Can someone else take a closer look at
>> gr-filter/python/rational_resampler.py and confirm it is doing the wrong
>> thing?
>>
>> Regards,
>> Andy
>
>
> It looks like the default filter is only valid where interp > decim, and
it's not really meant to have an arbitrary cutoff. As Daniele pointed out,
decim is not taken into account.
>
> I think that 'interpolation' in design_filter() should be replaced with
'max(interpolation,decimation). If taps are supplied by the caller, it
needs to understand how the taps will be used.
>
> Andy, to mimic design_filter, you'd need to do:
>
>   low_pass(16.0, 25000.0, 3250.0, 500.0, ...)
>
> Not that I know if that's right, but that's what design_filter() does.
>
Andy, ignore that last part. Your params are right and that filter actually
makes sense. The filter is applied after interp and before decim, which is
not obvious from the API.

- Jeff
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to