在matlab中下采样或均衡矢量长度

时间:2015-04-13 01:08:54

标签: arrays matlab vector sampling resampling

我有一些基本问题但我似乎无法解决它。我有两个非常大的数据。我有一个48554 x 1的矩阵A和一个160272 x 1的矩阵B.我想做的是"下采样"矩阵B使其与矩阵A具有相同的长度。此外,我想要一个能够为几乎任何大的m x 1和n x 1矩阵执行此操作的函数(因此它比这个特定示例更有用)。我尝试使用resample函数:

resample(B,length(A),length(B))

但是我收到一个错误,表明过滤器长度太大。接下来,我尝试使用for循环简单地从矩阵B中提取每个第i个元素并将其保存到一个新的矩阵中,但由于矢量长度不能被整数整除,因此效果不佳。有没有人有其他(希望很简单)的方法来实现这个目标?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用interp1功能。我知道下采样本身并不是真正的插值。这是一个例子:

x1 = [0:0.1:pi];%vector length is 32
x2 = [0:0.01:pi];% vector length is 315

y1 = sin(x1);
y2 = sin(x2);

%down sample y2 to be same length as y1
y3 = interp1(x2,y2,x1);%y3 length is 32

figure(1)
plot(x2,y2);
hold on
plot(x1,y1,'k^');
plot(x1,y3,'rs');

% in general use this method to down-sample (or up-sample) any vector:
% resampled = interp1(current_grid,current_vector,desired_grid);
% where the desired_grid is a monotonically increasing vector of the desired length
% For example:

x5 = [0.0:0.001:1-0.001];
y5 = sin(x);
% If I want to down sample y5 to be 100 data points instead of 1000:
y6 = interp1([1:length(y5)],y5,1:1:100);

% y6 is now 100 data point long. Notice I didn't use any other data except for y6, the length of y6 and my desired length.