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

Downsampling, or equalizing vector lengths in matlab

我遇到了一些基本问题,但似乎无法解决。我有两个非常大的数据。我有一个 48554 x 1 的矩阵 A 和一个 160272 x 1 的矩阵 B。我想要做的是 "downsample" 矩阵 B,使其与矩阵 A 的长度相同。此外,我想要一个几乎可以对任何大型 m x 1 和 n x 1 矩阵执行此操作的函数(因此它不仅适用于这个特定示例)。我试过像这样使用重采样函数:

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

但是我收到一条错误消息,指出过滤器长度过大。接下来我尝试使用 for 循环简单地从矩阵 B 中提取每个第 i 个元素并将其保存到一个新矩阵中,但这并不是很好,因为向量长度不能被整数整除。有没有人有其他(希望简单)的方法来完成这个?

您可以尝试使用 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.