我有一个矩形脉冲:
w = 20; pln = 10;
v =[zeros(1, pln), ones(1, w),zeros(1, pln)];
figure(); plot(v,'-o');
通过执行fft
并将fftshift
脉冲中心归零得到其频域表示:
yf = fftshift(fft(v));
xf = [-0.5000 -0.4750 -0.4500 -0.4250 -0.4000 -0.3750 -0.3500 -0.3250...
-0.3000 -0.2750 -0.2500 -0.2250 -0.2000 -0.1750 -0.1500 -0.1250...
-0.1000 -0.0750 -0.0500 -0.0250 0 0.0250 0.0500 0.0750...
0.1000 0.1250 0.1500 0.1750 0.2000 0.2250 0.2500 0.2750...
0.3000 0.3250 0.3500 0.3750 0.4000 0.4250 0.4500 0.4750];
yf = yf.*exp(-2j*pi*xf*(pln+w/2)); % this shifts the time domain signal to zero
yf
接近 sinc 函数 - 矩形函数的傅立叶变换 - 但不完全相同,它有虚部,而 sinc 是纯实数:
yf_sinc = w*sinc(w*xf);
为什么差异以及为什么ifft
从 sinc 函数中提取的样本不会产生精确的矩形脉冲,但会在边缘附近产生波纹,而ifft(fft(v))
会精确地再现原始矩形脉冲:
% has ripples around the edges
figure(); plot(fftshift(ifft(fftshift(yf_sinc))));
% reproduces the exact rectangular pulse
figure(); plot(fftshift(ifft(fftshift(yf))));
这里yf
,如果我们假设它是直接从底层函数采样的,也就是说它是由fft
矩形脉冲产生的(无论如何它只是一些数字),它会是什么函数?是否可以通过在频域中采样一个函数(不需要是 sinc 函数)并获取ifft
将产生一个精确的矩形脉冲?