0
$\begingroup$

I would like to know what are possible/typical efficient implementations (preferably in fixed-point DSP) of synchronous sample rate conversion between 32KHz and 44.1KHz (audio applications). Also, I'd appreciate if you can possibly share DSP utilization (MIPS, code and data memory).

Thanks!

Notes: Just wanted to make my question a bit more clear:

  • By "synchronous" I meant 32K and 44.1K sampling frequencies are on the same clock domain.
  • I don't think straight forward poly-phase implementation is a good idea here. It is very efficient for conversion between e.g. 32K and 48K, but upsampling and downsampling factors are somewhat large for 44.1K and 32K
  • I had an idea to do the sample rate conversion at two steps: first, convert 32K samples to 44K (upsample by 11 followed by downsample by 8, also suggested by Hilmar in the answers section here). Then do 44K to 44.1K conversion using some kind of fractional sample rate conversion (Farrow, all-pass filters, fractional phase interpolator, etc.). I used 7th order Farrow structure but I'm not quite satisfied with distortion and harmonic levels.
  • My application is real-time
$\endgroup$
  • 2
    $\begingroup$ With synchronous, do you mean "online"? In other words, a black box that accepts a signal in one sample rate and outputs the same signal at a lower sample rate, possibly on a sample by sample basis (?). $\endgroup$ – A_A Apr 10 '18 at 7:36
  • $\begingroup$ So, on what kind of hardware at you planning to do that? "Efficient" usage of resources of course depends on the kind of resources you have. And: how does the signal enter and leave? What are latency constraints? I think your question could be much, much better if you explain what you are about to build overall! $\endgroup$ – Marcus Müller Apr 10 '18 at 11:06
  • $\begingroup$ @A_A Synchronous means that the conversation ratio is constant. Asynchronous means it's time variant. The latter needs to be used to synchronize between two different clock domains. $\endgroup$ – Hilmar Apr 10 '18 at 13:46
  • $\begingroup$ @Hilmar thank you for the note, I definitely learned something for it :). So, essentially, we are talking about a system that is still working at 44.1 kHz but it carries a signal that is downsampled at 32 kHz? So, basically filtered and the samples dilated? (Any links on the topic?) $\endgroup$ – A_A Apr 11 '18 at 8:49
  • $\begingroup$ @A_A: try this analog.com/media/en/technical-documentation/technical-articles/… or just ask a separate question $\endgroup$ – Hilmar Apr 12 '18 at 13:20
2
$\begingroup$

The standard way of doing this is a poly phase filter. Unfortunately it's not straight forward and the devil is in the details.

  1. You need to determine cutoff frequency, number of phases, length of filter, and (to a lesser extent) shape of filter
  2. These are typically derived from your specific requirements: what's your allowable bandpass ripple, stop band attenuation, residual aliasing, sine wave modulation, up to what frequency, etc.
  3. How exact does your final sample rate need to be? If you can tolerate a quarter percent of frequency error you can approximate the ratio as 8/11. If it needs to be better than that, you may just as well go with an asynchronous converter
  4. MIPS and memory footprint depend very much different factors. Number of channels to convert, $C$, filter length , $N$, and number of phases $P$. Storage requirements are roughly $(P+C) \cdot N$. MIPS for synchronous are $C \cdot N$ multiply/adds plus some overhead for phase indexing. Asynchronous will be more, maybe $(C+2) \cdot N$, depending on how exactly phase interpolation is done.
  5. It works well with fixed point
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.