Reply by stilghar October 25, 20052005-10-25
>Hi, > >I've to resample a signal from 16.3676 MHz to 4.096 MHz. If I'm not
wrong
>I should interpolate by 10240 and then decimate by 40919. But, these are >huge numbers! Is there any other way of doing it? > >By the way, due to performance requirements I couldn't acces the whole >signal at a time, so I have to do the resampling process by blocks. > >Thank you. > > > >This message was sent using the Comp.DSP web interface on >www.DSPRelated.com >
Hi, I've been thinking in all the possibilities you have gave me and I think that the best option is just decimate by 4. I haven't thought in the possibility of using an aproximation but it seems to be enough for my application and it's the simplest and fastest way of doing it. Anyway, thanks to everybody. This message was sent using the Comp.DSP web interface on www.DSPRelated.com
Reply by Nigel Redmon October 25, 20052005-10-25
Don't get totally locked into the thought that you must resample in 
integer ratios, despite all the DSP books showing that approach. 
Resampling is interpolation, and nothing says that you have to only 
calculate, via interpolation, at periods of 1/n.

So why do we (well, the books, etc.) choose integer ratios? Well, if you 
pick an *arbitrary* ratio, it makes a fixed windowed-sinc (or whatever) 
table impractical. It also makes it difficult to suggest that the user 
do things insert a fractional number of zeros before filtering. For the 
latter, we never really insert the zero anyway (we use polyphase 
techniques, etc.). For the former, you can either caluate the factors as 
needed (usually a bad idea, speed-wise), or just make a reasonably-sized 
table and interpolate between the points to get any ratio you want. 
Linear interpolation works fine because a well-oversampled windowed-sinc 
function is pretty smooth from point to point.

Google for Julius Smith's bandlimited interpolation webpage.


In <Qq6dnbznoLs3RcHeRVn-2w@giganews.com> stilghar wrote:
> Hi, > > I've to resample a signal from 16.3676 MHz to 4.096 MHz. If I'm not > wrong I should interpolate by 10240 and then decimate by 40919. But, > these are huge numbers! Is there any other way of doing it? > > By the way, due to performance requirements I couldn't acces the whole > signal at a time, so I have to do the resampling process by blocks. > > Thank you.
Reply by Tim Wescott October 24, 20052005-10-24
stilghar wrote:
> Hi, > > I've to resample a signal from 16.3676 MHz to 4.096 MHz. If I'm not wrong > I should interpolate by 10240 and then decimate by 40919. But, these are > huge numbers! Is there any other way of doing it? > > By the way, due to performance requirements I couldn't acces the whole > signal at a time, so I have to do the resampling process by blocks. > > Thank you. > > > > This message was sent using the Comp.DSP web interface on > www.DSPRelated.com
Search for the term "polyphase filtering" -- the upsampling and resampling can be implied rather than actual (don't ask what I mean -- just find a good page on the term). -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
Reply by Bevan Weiss October 24, 20052005-10-24
stilghar wrote:
> Hi, > > I've to resample a signal from 16.3676 MHz to 4.096 MHz. If I'm not wrong > I should interpolate by 10240 and then decimate by 40919. But, these are > huge numbers! Is there any other way of doing it? > > By the way, due to performance requirements I couldn't acces the whole > signal at a time, so I have to do the resampling process by blocks. > > Thank you. > > > > This message was sent using the Comp.DSP web interface on > www.DSPRelated.com
What kind of frequency error is acceptable? The less acceptable error the more memory you'll need for the up-conversion process. Probably the 250/999 ratio that Jerry Wolf gave would be best for high accuracy. Though if you can tolerate much lower accuracy, you could simply decimate by 4. That would get you within 0.2% I'm guessing you'll be using some kind of polyphase filter, to reduce the timing requirements. Not having the whole signal shouldn't matter at all, you'll be performing the up conversion on a sample-by-sample basis anyway, with filtering as appropriate to interpolate the waveform.
Reply by Jerry Wolf October 24, 20052005-10-24
Pardon my fat-fingered mistyping.  250/999 gives an even better error
of 2.4e-007.
cheers,
  jerry

Reply by Jerry Wolf October 24, 20052005-10-24
stilghar wrote:
> I've to resample a signal from 16.3676 MHz to 4.096 MHz. If I'm not wrong > I should interpolate by 10240 and then decimate by 40919. But, these are > huge numbers! Is there any other way of doing it?
Depends on how much tolerance you have for the output sample rate. 256/1023 is a bit simpler, with an error of 6.1e-006. But I'll bet you were hoping for another kind of answer. cheers, jerry
Reply by stilghar October 24, 20052005-10-24
Hi,

I've to resample a signal from 16.3676 MHz to 4.096 MHz. If I'm not wrong
I should interpolate by 10240 and then decimate by 40919. But, these are
huge numbers! Is there any other way of doing it?

By the way, due to performance requirements I couldn't acces the whole
signal  at a time, so I have to do the resampling process by blocks.

Thank you.


		
This message was sent using the Comp.DSP web interface on
www.DSPRelated.com