如何在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
至少在信号处理中,您通常是在改变采样率后而不是采样计数