Clear Filters
Clear Filters

dsp.FIRRateConverter doesn't handle large ratios?

2 views (last 30 days)
I have some long data vectors that need to be resampled at a (precise) ratio of 576/625 (going from 8.3333 Msps to 7.68 Msps). The resample() function works fine with these values for short segments, but I run out of memory with large sets. If I absolutely have to I can deal with glitches between segments but I shouldn't need to. Anyway, when I used filterBuilder to build the equivalent dsp.FIRRateConverter, it appears the polyphase filter construction isn't done right and it defined a prototype filter of insufficient order such that it doesn't properly handle the large interpolate stage. So, the output signal is a hash, mostly zeros with occasional "spikes" where something gets through. I could try dsp.FarrowRateConverter which is apparently a polynomial interpolator, or should I be using dsp.SampleRateConverter?

Answers (1)

Raghav on 4 Aug 2023
Hi Martin,
If you are encountering memory issues when using the resample() function with large sets, there are alternative approaches you can consider to achieve the desired resampling ratio of 576/625 (from 8.3333 Msps to 7.68 Msps). Two of them being:
  1. dsp.FarrowRateConverter: This is a polynomial interpolator that can be used for resampling. It offers more flexibility than resample() and can handle non-integer resampling ratios. However, it might require more computational resources.
  2. dsp.SampleRateConverter: This is a more advanced resampling technique. It provides high-quality resampling with efficient memory usage. The “dsp.SampleRateConverter” object allows you to specify the resampling ratio precisely and provides various options for filter design and implementation.
To choose between “dsp.FarrowRateConverter” and “dsp.SampleRateConverter”, consider the following:
  • If you need a more flexible approach and can handle the computational requirements, try “dsp.FarrowRateConverter”.
  • If memory efficiency is crucial and you want high-quality resampling, consider using “dsp.SampleRateConverter”.
You can experiment with both approaches to determine which one suits your requirements best.
Hope it helps,
Best Regards,
Raghav Bansal
MathWorks Technical Support





Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!