Change sampling rate by rational factor


y = resample(x,p,q)
y = resample(x,p,q,n)
y = resample(x,p,q,n,beta)
y = resample(x,p,q,b)
[y,b] = resample(x,p,q)


y = resample(x,p,q) resamples the sequence in vector x at p/q times the original sampling rate, using a polyphase filter implementation. p and q must be positive integers. The length of y is equal to ceil(length(x)*p/q). If x is a matrix, resample works down the columns of x.

resample applies an anti-aliasing (lowpass) FIR filter to x during the resampling process. It designs the filter using firls with a Kaiser window.

y = resample(x,p,q,n) uses n terms on either side of the current sample, x(k), to perform the resampling. The length of the FIR filter resample uses is proportional to n; larger values of n provide better accuracy at the expense of more computation time. The default for n is 10. If you let n = 0, resample performs a nearest-neighbor interpolation

y(k) = x(round((k-1)*q/p)+1)

where y(k) = 0 if the index to x is greater than length(x).

y = resample(x,p,q,n,beta) uses beta as the design parameter for the Kaiser window that resample employs in designing the lowpass filter. The default for beta is 5.

y = resample(x,p,q,b) filters x using the vector of filter coefficients b.

[y,b] = resample(x,p,q) returns the vector b, which contains the coefficients of the filter applied to x during the resampling process.


expand all

Resample a Linear Sequence

Resample a simple linear sequence at 3/2 the original rate of 10 Hz. Plot the original and resampled signals on the same figure.

fs = 10;
t1 = 0:1/fs:1;
x = t1;
y = resample(x,3,2);
t2 = (0:(length(y)-1))*2/(3*fs);

xlabel('Time (s)')
legend('Original','Resampled', ...

Notice that the last few points of the output, y, are inaccurate. In its filtering process, resample assumes that the input sequence, x, is zero before and after the samples it is given. Thus, large deviations from zero at the endpoints of x can cause inaccuracies in y at its endpoints. The following two plots illustrate this side effect of resample.

x = [1:10 9:-1:1];
y = resample(x,3,2);

plot(1:19,x,'*',(0:28)*2/3 + 1,y,'o')
title('Edge Effects Not Noticeable')
legend('Original','Resampled', ...

x = [10:-1:1 2:10];
y = resample(x,3,2);

plot(1:19,x,'*',(0:28)*2/3 + 1,y,'o')
title('Edge Effects Very Noticeable')
legend('Original','Resampled', ...

More About

expand all


resample performs an FIR design using firls, followed by rate changing implemented with upfirdn.

Was this topic helpful?