对于串行的数据,有时我们需要转成多路并行的数据进行处理,抽取;或者是需要对数据进行隔点抽取,或对数据进行插值处理。此处以4倍抽取或插值为例,MATLAB代码实现。
使用下采样函数downsample
进行抽取。格式:y =downsample(x,step,phase)。其中x是要抽取的数据,step表示步进,phase表示相位(从0开始索引)。
y = 0:1:99;%y等于0到99,100个用于抽取的数据
step = 4;
y0 = downsample(y,step, 0);
y1 = downsample(y,step, 1);
y2 = downsample(y,step, 2);
y3 = downsample(y,step, 3);
y_parallel = vertcat(y0,y1,y2,y3);%放在一起看
使用类似y0 = y(1:step:length(y));
的格式进行隔位抽取。注意MATLAB中的数据索引是从1开始的,不是0。
y = 0:1:99;%y等于0到99,100个用于抽取的数据
step = 4;
y0 = y(1:step:length(y));%从第1个数据开始每个step抽取
y1 = y(2:step:length(y));%从第2个数据开始每个step抽取
y2 = y(3:step:length(y));%从第3个数据开始每个step抽取
y3 = y(4:step:length(y));%从第4个数据开始每个step抽取
y_parallel = vertcat(y0,y1,y2,y3);%放在一起看
for循环的笨办法咯。
y = 0:1:99;%y等于0到99,100个用于抽取的数据
step = 4;
for i = step-3:step:length(y)
y0((i+3)/step) = y(i);
end
for i = step-2:step:length(y)
y1((i+2)/step) = y(i);
end
for i = step-1:step:length(y)
y2((i+1)/step) = y(i);
end
for i = step-0:step:length(y)
y3((i+0)/step) = y(i);
end
y_parallel = vertcat(y0,y1,y2,y3);%放在一起看
使用下采样函数upsample
进行插值。格式:y =upsample(x,L,phase)。其中x是要插值的数据,L表示插值倍数,phase表示原数据放置的相位(从0开始索引)。
y = 1:1:100;%y等于1到100,100个用于插值的数据
L = 4;
y_up0 = upsample(y,L,0);
y_up1 = upsample(y,L,1);
y_up2 = upsample(y,L,2);
y_up3 = upsample(y,L,3);
y_up = vertcat(y_up0,y_up1,y_up2,y_up3);%放在一起看
y = 1:1:100;%y等于1到100,100个用于插值的数据
L = 4; %内插倍数
y_up = zeros(1, length(y)*L); %先构造全0序列
y_up(1 : L : length(y_up)) = y; %将源信号插入到原0序列中
当然也还是可以如之前的抽取用for循环的方法啦,但是没有以上方法简单,就不例举了。