Edge distortion when resampling a signal

I have the follwing cosine signal that is sampled at rate fs = 32 Hz.
f = 30;
fs = 32;
dt = 1/fs;
t = -0.5:dt:0.5;
c = cos(2.*pi.*f.*t);
figure
plot (t,c)
I want to upsample it as follows:
figure
ty = linspace(-0.5,0.5,270)
y = resample(c,1003,123);
plot(ty,y)
But as you can see there is distrotion at the edge. Is there any way to avoid that?

 Accepted Answer

From the documentation:
When filtering, resample assumes that the input sequence, x, is zero before and after the samples it is given. Large deviations from zero at the endpoints of x can result in unexpected values for y.’ (In: Resample Linear Sequence)
Minimize it by increasing the filter order and using a Kaiser window.
For example:
y = resample(c,1003,123, 16, 192);
Experiment with these and other additional arguments to see the result.

4 Comments

Thanks. I have tried this but the artifacts seem to persist
It is likely impossible to get rid of them for the reason the documentation states. There does not appear to be any way to elimiinate it, although subtracting 0.5 from it providing the initial zero value, then adding the 0.5 back seems to minimise it considerably:
figure
ty = linspace(-0.5,0.5,270)
y = resample(c-0.5,1003,123,16,192);
plot(ty,y+0.5)

Sign in to comment.

More Answers (0)

Tags

Asked:

on 18 Jan 2020

Commented:

on 19 Jan 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!