对于大学作业,我必须插入一些我之前从波形中采样的点。只要我用interp1
函数插值它就可以工作。
我的老师希望我们使用sinc
函数对其进行插值,因此我使用Google搜索并且数学文档说我应该这样做:
rng default
t = 1:10;
x = randn(size(t))';
ts = linspace(-5,15,600);
[Ts,T] = ndgrid(ts,t);
y = sinc(Ts - T)*x;
plot(t,x,'o',ts,y)
xlabel Time, ylabel Signal
legend('Sampled','Interpolated','Location','SouthWest')
legend boxoff
它有效,但由于我必须插入缩小域中的点,我修改了代码以尝试插入范围从0
到1
的点:
rng shuffle
t = 0:0.1:1;
x = randn(size(t))';
ts = linspace(-1,2,600);
[Ts,T] = ndgrid(ts,t);
y = sinc(Ts - T)*x;
plot(t,x,'o',ts,y)
xlabel Time, ylabel Signal
legend('Sampled','Interpolated','Location','SouthWest')
legend boxoff
它只是没有正常工作,我从上面得到了这个:
你能告诉我我做错了什么,或者sinc
只适用于"大"域?
答案 0 :(得分:4)
您还应该在时间方向上缩放sinc函数以适合您的数据:
dt = 0.1;
y = sinc((Ts - T)/dt)*x;
<强>解释强>
因为要在数据点之间进行插值,所以应确保其他数据点的插值函数(f
)在当前数据点为零:
f(k*dt) = 0 for all integers k != 0
众所周知
sinc(k) = 0 for all integers k != 0
因此,插值函数应为
f(t) = sinc(t/dt);