如何在MATLAB中使用插值将向量的大小加倍?

如何在MATLAB中使用插值将向量的大小加倍?,matlab,matrix,interpolation,sampling,Matlab,Matrix,Interpolation,Sampling,基本上,如果我有以下矩阵: [1, 2, 3 ,4, 10] 我需要在插值时分解它,如下所示: [1,1.5,2,2.5,3,3.5,4,7,10] 基本上,通过填充两个周围值的平均值来增强它 假设我需要对n执行此操作,而不是像这里那样只添加1个值。您需要使用interp1和线性插值方法: >> v = [1 2 3 4 10]; >> newNum = 13; % new number of elements in the "buffed" vector >&g

基本上,如果我有以下矩阵:

[1, 2, 3 ,4, 10]
我需要在插值时分解它,如下所示:

[1,1.5,2,2.5,3,3.5,4,7,10]

基本上,通过填充两个周围值的平均值来增强它


假设我需要对n执行此操作,而不是像这里那样只添加1个值。

您需要使用
interp1
线性插值方法:

>> v = [1 2 3 4 10];
>> newNum = 13; % new number of elements in the "buffed" vector
>> iv = interp1( linspace(0,1,numel(v)), v, linspace(0,1,newNum) )
iv =
1.0000    1.3333    1.6667    2.0000    2.3333    2.6667    3.0000    3.3333    3.6667    4.0000    6.0000    8.0000   10.0000

interp1
的输入并不总是像它们看起来那么简单--如果您试图在不发生相移的情况下将采样率增加到一定量,而不仅仅是在固定端点时增加元素数量。您正在请求后一个条件,因此解决方案已经发布,但我认为还值得展示如何控制采样率

以Shai关于增加元素数量而不考虑采样率变化的完美有效答案为例,在这种情况下:

v = [1 2 3 4 10]; % 1x5
newNum = 10; % double the number
X =  linspace(0,1,numel(v));
Xi = linspace(0,1,newNum);
iv = interp1(X, v, Xi, 'linear')
这意味着我们要将元素数量从5增加到10——元素数量增加一倍——同时固定端点。将
v
的初始采样率定义为1,那么
iv
的采样率是多少

>> iv = interp1( linspace(0,1,numel(v)), v, linspace(0,1,newNum) )
iv =
  Columns 1 through 8
    1.0000    1.4444    1.8889    2.3333    2.7778    3.2222    3.6667    4.6667
  Columns 9 through 10
    7.3333   10.0000
>> fs_v = X(2) - X(1) % even spacing
fs_v =
    0.2500
>> fs_vi = Xi(2) - Xi(1)
fs_vi =
    0.1111
>> fs_v / fs_vi 
ans =
    2.2500
超过两倍。是的,当你仔细想想,这是显而易见的,但是考虑一下这是否是你想要的。您确实将端点固定在
iv(1)=1
iv(end)=10
,但您没有指定采样率的变化

现在假设你想要两倍的采样率。你不能在1和10处固定端点。要指定可获得正确采样率更改的
Xi

scale = numel(v)/newNum; % i.e. 0.5
X = 1:numel(v);
Xi = (1:newNum)*scale + 0.5 * (1 - scale); % centered
末端将不会固定,但采样率将加倍:

>> iv = interp1(X, v, Xi, 'linear', 'extrap')
iv =
  Columns 1 through 8
    0.7500    1.2500    1.7500    2.2500    2.7500    3.2500    3.7500    5.5000
  Columns 9 through 10
    8.5000   11.5000
>> (X(2) - X(1)) / (Xi(2) - Xi(1))
ans =
    2
至少在信号处理中,您通常是在改变采样率后而不是采样计数