unexpected shift after downsampling using decimate
显示 更早的评论
n = 1000;
t = 1:n;
x = rand(1,n) - 0.5;
x = sin(2*pi/100*t);
y = decimate(x,4);
figure('color','w');
ha = axes('nextplot','add','box','on');
plot(ha,t,x,'k','marker','.');
plot(ha,t(1:4:end),y,'r','marker','o'); addkeycb;
There is a shift of 3 points.

采纳的回答
更多回答(1 个)
Jonathan Kohler
2017-6-27
编辑:Jonathan Kohler
2017-6-28
This apparent time shift is due to MATLAB's choice of initial index for the down-sampled data, and only indirectly related to the choice of filter.
As per the documentation ( https://www.mathworks.com/help/signal/ref/decimate.html , under 'Algorithms'), the first point of the original data and downsampled data are chosen to match for FIR filters, and the last point are chosen to match for IIR filters. The reason for this choice eludes me, but maybe the provided reference explains it.
Because of the difference in handling FIR filters, there is in no shift, as pointed out by Star Strider. However, to fix this for IIR filters, you need only change your choice of time values corresponding to the downsampled data. Instead of choosing
t(1:r:end)
You should choose
nBeg = mod(n-1,r)+1;
t(nBeg:r:end)
where r=4 is the decimation factor applied.
1 个评论
类别
在 帮助中心 和 File Exchange 中查找有关 Multirate Signal Processing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!