我尝试使用以下 Matlab 代码执行 sinc 插值(一维):
Fs=8;
T=1/Fs;
t=0:T:(1-T);
f=1;
x=sin(2*pi*f*t);
up_factor=2;
%% Deduce sinc from Fourier domain
xp=[zeros(1,5) x zeros(1,5)];
Xp=fft(xp);
door1D=abs(xp>0);
sinc1D=fftshift(abs(fft(door1D)));
%plot(door1D);hold on;plot(fftshift(abs(sinc1D)))
%% Interp with sinc in spatial domain
x_up=upsample(x,2);
%plot(x,'b*');hold on;plot(x_up,'r*');
x_up_interp=conv2(x_up,sinc1D,'same');
figure;
plot(x_up_interp./up_factor);
hold on;
plot(x);
hold on;
plot(x_up,'r+');
它似乎有效(除了我猜的吉布斯现象引起的涟漪?)。但是,我以“演绎”的方式解决了这个问题,我并不完全理解 sinc 的参数(周期/频率)。该方法是从门函数的 fft 中提取 sinc。然后使用该 sinc,就好像我事先计算过它一样,并将上采样(尚未内插)的 1D 信号与它进行卷积。
有人可以帮助我更好地理解它吗?我将如何构建这个 sinc ?例如来自 Matlab 的 sinc() 函数。为了让它发挥作用,我与 sinc cf 的 abs 进行了卷积。conv2(x_up,sinc1D,'same');
,但这似乎很奇怪......有人可以解释/开发/纠正这个吗?
REM.:也可能是严重缩放,但这是另一个细节