首页 > 技术文章 > matlab_interp1

-wawcc 2020-04-17 23:26 原文

今天通过几个实例对matlab中的interp1插值函数进行了深入的理解,下面通过几组数据进行说明。
插值法:插值法又称“内插法”,是利用函数f (x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。
虽然插值法的定义是这么说的,在通过matlab处理数据时发现,其实插值的还有一个目的,为了处理数据而进行插值,换句话说就是为了能够处理数据或者更好的处理数据,也可能是为了更好的分析数据。
 
应用 interp1 插值函数进行插值(原谅以前的认知,觉得插值肯定是插进去了,最后的值肯定变多了,事实表明不是这样的)。这是 interp1函数的用法。
1 vq = interp1(x,v,xq)
2 vq = interp1(x,v,xq,method)
3 vq = interp1(x,v,xq,method,extrapolation)
4 vq = interp1(v,xq)
5 vq = interp1(v,xq,method)
6 vq = interp1(v,xq,method,extrapolation)
7 pp = interp1(x,v,method,'pp')

今天要记录的是通过插值使得仿真数据符合实验数据的要求

可以看出PP是 1×4096 ,但是需要得到的是1×720,这时候通过interp1进行插值就可以实现这样的功能。代码如下

 1 Pbegin=58;       %%%%%%%%%%%% 测量开始点,缩比模型中58mm
 2 ddxx=2;          %%%%%%%%%%%% 测量点间隔,缩比模型中2mm
 3 Pn=720;
 4 Pwz=Pbegin:ddxx:(Pbegin+ddxx*(Pn-1));
 5 PP=abs(PP);
 6 PPP=interp1(r,PP,Pwz);                        %%%直接插值
 7 PPP3=conj(PPP);  %%%%%%%%%conj计算复数x的共轭值
 8 PP1=abs(PP);
 9 PPP1=interp1(r,PP1,Pwz);
10 PPP1=-20*log10(PPP1);
11 save('PPP3.mat','PPP3')  

从第一行代码到第4行代码,它的主要工作是构建以58为起点,间隔为2,最后形成Pwz矩阵,一共720个点的数据(或者说坐标)。初始数据PP为1×4096的一个矩阵,通过interpl函数使得PP形成了一个按照Pwz格式的一组新的矩阵PPP3(1×720)。最后通过插值的方式使得仿真的数据符合实验数据的格式(形式),以便于进行下一步的处理。

推荐阅读