1D data interpolation (table lookup)
Since R2024a
collapse all in page
Syntax
vq = fixed.interp1(x,v,xq)
vq = fixed.interp1(v,xq)
vq = fixed.interp1(___,method)
vq = fixed.interp1(___,method,extrapval)
Description
example
vq = fixed.interp1(x,v,xq)
returns interpolated values of a 1D function at specific query points using linear interpolation. Vector x
contains the coordinates of the sample points and v
contains the corresponding function values at each sample point. The variable xq
contains the coordinates of the query points.
If you have multiple sets of data that are sampled at the same point coordinates, then you can pass v
as an array. Each column of array v
contains a different set of 1D sample values.
vq = fixed.interp1(v,xq)
returns interpolated values and assumes a default set of sample point coordinates. The default points are the sequence of numbers from 1
to n
, where n
depends on the shape of v
:
When v is a vector, the default points are
1:length(v)
.When v is an array, the default points are
1:size(v,1)
.
Use this syntax when you are not concerned about the absolute distances between points.
vq = fixed.interp1(___,method)
specifies an alternative interpolation method: "linear"
, "nearest"
, "previous"
, or "next"
. The default method is "linear"
.
vq = fixed.interp1(___,method,extrapval)
specifies extrapval
, a scalar value that is assigned to all queries that lie outside the domain of the sample points.
Examples
collapse all
Implement 1D FixedPoint Lookup Tables Using Interpolation
Open Live Script
This example shows how to implement a onedimensional fixedpoint lookup table using fixed.interp1
.
Run the example multiple times to see the approximation over different query points.
Create Lookup Table for Function
Define a function f(x)
to replace with a lookup table approximation.
clearvarsf = @(x) exp(x);
Define breakpoints x
for the lookup table. Use the following values, which were computed to estimate exp(x)
by the Lookup Table Optimizer and targeted 16bit fixedpoint types and oncurve table values.
x = [11, 6.80029296875, 5.49609375, 4.708984375, 4.1484375, 3.70849609375, ... 3.3466796875, 3.04150390625, 2.7763671875, 2.54150390625, 2.33251953125, ... 2.142578125, 1.96875, 1.8095703125, 1.66259765625, 1.525390625, 1.3974609375, ... 1.27685546875, 1.16357421875, 1.05712890625, 0.95556640625, 0.85791015625, ... 0.76611328125, 0.677734375, 0.5927734375, 0.51171875, 0.43359375, 0.35791015625, ... 0.28515625, 0.21533203125, 0.1484375, 0.08349609375, 0.0205078125, 0];
Generate oncurve table values v
corresponding to the breakpoints.
v = f(x);
Plot the table values and notice that the breakpoints x
are not linearly spaced.
plot(x,v,'o')
Query Lookup Table
Choose a random query point xq
in the range of x
.
xq = fixed.example.realUniformRandomArray(x(1),x(end),1);
Cast the inputs to 16bit fixedpoint.
x = fi(x);v = fi(v);xq = fi(xq);
The fixed.interp1
function computes vq
, the lookup table approximation of f(xq)
. That is, $${v}_{q}\approx f({x}_{q})$$.
vq = fixed.interp1(x,v,xq)
vq = 0.1307 DataTypeMode: Fixedpoint: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 14
Compare Lookup Approximation to Actual Function Value
Compare vq to the actual function evaluation f(xq)
.
vq_expected = f(double(xq))
vq_expected = 0.1303
err = double(vq)  vq_expected
err = 4.5947e04
Plot f(x)
.
clf;plot(x,v)xlabel('x')ylabel('v')hold on
Plot vq
, the lookup table approximation of f(xq)
, using a red stem plot.
stem(xq,vq,'Filled','red')legend('f(x)','vq = Fixedpoint lookuptable approximation of f(xq)','location','best')
Input Arguments
collapse all
x
— Sample points
vector
Sample points, specified as a row or column vector of real numbers. The values in x
must be strictly monotonically increasing. The length of x
must conform to one of the following requirements:
If
v
is a vector, thenlength(x)
must equallength(v)
.If
v
is an array, thenlength(x)
must equalsize(v,1)
.
The inputs x
, v
, and xq
must be the same data type: fi
, half
, single
, or double
. When using fi
data, you can use the shortened function name interp1
.
Example: fi(1:10,0,8,0)
Example: half(1:10)
Data Types: fi
 single
 double
v
— Sample values
vector  matrix  array
Sample values, specified as a vector, matrix, or array of real or complex numbers. If v
is a matrix or an array, then each column contains a separate set of 1D values.
If v
contains complex numbers, then fixed.interp1
interpolates the real and imaginary parts separately.
The inputs x
, v
, and xq
must be the same data type: fi
, half
, single
, or double
. When using fi
data, you can use the shortened function name interp1
.
Example: fi(rand(10,1),0,12,8)
Example: half(rand(10,1))
Data Types: fi
 single
 double
Complex Number Support: Yes
xq
— Query points
scalar  vector  matrix  array
Query points, specified as a scalar, vector, matrix, or array of real numbers.
The inputs x
, v
, and xq
must be the same data type: fi
, half
, single
, or double
. When using fi
data, you can use the shortened function name interp1
.
Example: fi(5,0,12,8)
Example: half(5)
Example: half(1:0.05:10)
Example: half((1:0.05:10)')
Example: half([0 1 2 7.5 10])
Data Types: fi
 single
 double
method
— Interpolation method
"linear"
(default)  "nearest"
 "next"
 "previous"
Interpolation method, specified as one of the options in this table.
Method  Description  Continuity  Comments 

 Linear interpolation. The interpolated value at a query point is based on linear interpolation of the values at neighboring grid points in each respective dimension. This method is the default interpolation method.  C^{0} 

 Nearest neighbor interpolation. The interpolated value at a query point is the value at the nearest sample grid point.  Discontinuous 

 Next neighbor interpolation. The interpolated value at a query point is the value at the next sample grid point.  Discontinuous 

 Previous neighbor interpolation. The interpolated value at a query point is the value at the previous sample grid point.  Discontinuous 

extrapval
— Function value outside the domain of x
scalar
Function value outside the domain of x
, specified as a real or complex scalar. fixed.interp1
returns this constant value for all points outside the domain of x
. If the scalar value is nonzero and outside the range of the sample values v
, then this value is set to the minimum or maximum value of v
, whichever is closer.
The data type of extrapval
must be the same as x
, v
, and xq
.
The default behavior with fi
input data is to return 0
for query points outside the domain. The default behavior with half
, single
, or double
input data is to return NaN
for query points outside the domain.
Example: fi(5,0,12,8)
Example: half(5)
Data Types: fi
 single
 double
Note
The default behavior of the interp1 function is to return NaN
when a query point is outside the domain. The fixed.interp1
function with fi
input data is not consistent with this behavior because fi
casts NaN
to 0
.
Output Arguments
collapse all
vq
— Interpolated values
scalar  vector  matrix  array
Interpolated values, returned as a scalar, vector, matrix, or array. The size of vq
depends on the shape of v
and xq
. The data type of vq
is the same as that of the sample values v
.
Shape of v  Shape of xq  Size of Vq  Example 

Vector  Vector  size(xq)  If size(v) = [1 100] and size(xq) = [1 500] , then size(vq) = [1 500] . 
Vector  Matrix or ND Array  size(xq)  If size(v) = [1 100] and size(xq) = [50 30] , then size(vq) = [50 30] . 
Matrix or ND Array  Vector  [length(xq) size(v,2),...,size(v,n)]  If size(v) = [100 3] and size(xq) = [1 500] , then size(vq) = [500 3] . 
Matrix or ND Array  Matrix or ND Array  [size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)]  If size(v) = [4 5 6] and size(xq) = [2 3 7] , then size(vq) = [2 3 7 5 6] . 
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
HDL Code Generation
Generate VHDL, Verilog and SystemVerilog code for FPGA and ASIC designs using HDL Coder™.
Version History
Introduced in R2024a
See Also
fixed.interp2  fixed.interp3  fixed.interpn  interp1
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 Deutsch
 English
 Français
 United Kingdom (English)
Contact your local office