从几何意义上将,拟合是给定了空间中的一些点,找到一个已知形式未知参数的连续曲面来最大限度地逼近这些点;而插值是找到一个(或几个分片光滑的)连续曲面来穿过这些点。

1、拟合

下面以非线性曲线拟合函数为例进行讲解:
matlab中有个lsqcurvefit函数,其运用格式为
A= lsqcurvefit( func,[a1,a2,a3........],X,Y)
其中func是进行拟合的函数的模型,[]里面是模型函数里面的估计值,X,Y分别是进行拟合的自变量和因变量,返回的A是拟合出来的模型参数的值即[a1,a2,a3........]的拟合值。
例子如下:
将数据点拟合成一个正弦曲线,运行结果如下:



拟合得到的结果与估计值有很大的关系,估计值越接近真实值,拟合曲线越精确,因此需要在拟合前采取一切手段对参数进行估计。
代码如下:

clc,clear
load dk.txt
dk=reshape (dk',1,[]);
N=length(dk);
b=1525e-9:5e-15:1530e-9;
k=2*pi./b;
func_sin = @(a,t) a(1)*sin(a(4)*t+a(2))+a(3);
A= lsqcurvefit( func_sin,[0.025 0 0.035 16],k(1:N),dk(1:N))
figure(1)
plot(k(1:1000), dk(1:1000), 'r*')
hold on
plot(k(1:1000), func_sin(A,k(1:1000)))



2、插值

本文介绍一种插值重采样的例子,非等时间间隔采样得到的信号进行FFT变换会出现频谱展宽的现象,需要用插值的办法对数据进行等间隔重采样,这样就可以消除频谱展宽的现象,这样就会产生频率分辨率下降的情况。

原始信号为:y=cos(2*pi*5*t)+0.8*cos(2*pi*10*t),首先对它进行非等间隔采样然后进行傅里叶变换,得到结果如图1:






从结果可以看出,由于非等间隔采样导致频率分辨率下降,无法从频谱图上准确得到信号的频率成分。将信号进行等间隔的插值重采样,然后再进行FFT变换,得到的结果如下图:




从上图可以明显看到频率分辨率得到了很大的改善。



源代码如下:



dt=0.01;%采样间隔
fs=1/dt;
N=512;%采样点数
 t=0:dt:(512-1)*dt;%等间隔时间
 n=0:1:(N-1);
f=fs*n/N;
m=length(t);
tt=t+dt*10*rand(1,m);%非等间隔变化的时间
 y=cos(2*pi*5*tt)+0.8*cos(2*pi*10*tt);
yy=fft(y); Ayy=abs(yy);
Ayyy=Ayy*2/N;
figure(1)
 plot(f(1:N/2),Ayyy(1:N/2))
w=interp1(tt,y,t,'spline');%三次样条插值重采样
 yw=abs(fft(w));
Ayw=yw*2/N;
figure(2)
plot(f(1:N/2),Ayw(1:N/2))