[Numpy-discussion] help to speed up the python code

David Cournapeau david@ar.media.kyoto-u.ac...
Fri Oct 31 00:40:04 CDT 2008


frank wang wrote:
> Hi, Bob,
>  
> The problem is that I want to resample my data with another sampling
> rate. the two rates is very close. I use the formula:
>  
> s(t)=sum(a_k*sinc(t-kTs)).
>  
> the new sampling rate is Ts', so I have
> s(nTs')=sum(a_k*sinc(nTs'-kTs)). The sum index k is over the (-P, P),
> Centered at n. The n is start from zero. THe code is using two for
> loops and it is slow. The length of s(nTs) is very long, so it takes
> quite long time to do it.

Additionally, assuming you still want to do it yourself in python, the
above is a convolution, and both numpy and matlab have 'fast' (e.g.
implemented in C) implementation of this; see numpy.convolve. You can
have much faster speed than O(M * P) where M is the length of the
original signal using FFT, but if either the sinc 'filter' or your
signal is large, it is more difficult to do it without using large
amount of memory (you have to split the input signal, and even the
filter impulse response  if it is large, and use overlapp-kind of
techniques, see
http://ccrma.stanford.edu/~jos/sasp/Example_Overlap_Add_Convolution.html
for an example in matlab).

cheers,

David


More information about the Numpy-discussion mailing list