MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

# How to resample a signal by a fraction

Asked by Saed on 17 May 2013

Hello,

I have the time-domain received signal v(t) and I want to re-sample it at as v(t/(1+a)), where a is not an integer and it is in the order of ~10^-3. How can I do that in MATLAB, since the resample function requires that both P and Q be integer?

Thanks

## Products

No products are associated with this question.

Answer by Matt Kindig on 19 May 2013
Edited by Matt Kindig on 19 May 2013

You could use interpolation instead. Something like this:

```vnew = interp1( t, v, t/(1+a), 'linear');
```

You could use other interpolation approaches ('spline','cubic', etc.) as well, as appropriate.

## 1 Comment

Saed on 20 May 2013

This seems to work just fine.

Thanks

Answer by David on 17 May 2013

I suggest you reciprocate your a variable and round it to the nearest integer. You then just need to make sure you get the arguments the correct way in the resample function.

y = resample(x,p,q) resamples the sequence in vector x at p/q times the original sampling rate

David on 17 May 2013

Apologies, I missed your 1+a bit. In that case you need to change both P and Q in the resample function by multiplying up until you get the accuracy you need.

Example: Suppose I want to re-sample by 1/(1+a) where a was 1e-3.

1+1e-3 = 1.0010 so I might want to scale up by factor of 1000 and use values of 1000 and 1001 for P and Q.

Saed on 19 May 2013

What do you mean by scale up by 1000? Like

```if true
resample(x,1000*(1+a),1001);
end
?
```
David on 20 May 2013

I mean having P and Q values of 1 and 1.0010 is the same as having P and Q values of 1000 and 1001.

Answer by Malcolm Lidierth on 19 May 2013

Is this any help?

% SincResample returns the data convolved with a set of time-shifted windowed sinc functions, one for each of the samples [1..size(x,1)] in the input signal.

http://www.mathworks.co.uk/matlabcentral/fileexchange/12268-sinc-resample