通过在中间元素之间包含零来上采样矢量

时间:2016-08-18 21:00:07

标签: arrays matlab for-loop octave

我正在尝试制作一个Upsampling代码,所以我想在一个向量中插入一个零向量,如下所示:

z=[0 0]%Zeros Vector
x=[1 2 3 4]%Vector to Upsample
y=[1 0 0 2 0 0 3 0 0 4 0 0]%Vector Upsampled

我有这段代码:

fs=20;
N=50;
T=1/fs;
n=0:1:N-1;
L=3;
M=2;
x = exp(-0.5*n*T).*sin(2*pi*n*T);
A=zeros(1,L);
disp(A);
for i = 1:M:length(x)
  x(:,i)=A;

 end
 disp(x);

但是我得到了这个错误:

A(I,J,...) = X: dimensions mismatch

我怎么能这样做?

5 个答案:

答案 0 :(得分:3)

忘记循环。使用以下解决方案:

out = zeros(1,length(x)*L);
out(:,1:L:end) = x

答案 1 :(得分:2)

以下是使用bsxfunreshape的解决方案:

y = reshape(bsxfun(@times,[1;z.'],x),1,[]);

我最初想到的是repelem,但认为这是太多的工作。但是,如果您只是想使用"零阶近似值" - 这只是你的功能。

答案 2 :(得分:1)

您可以使用repmatreshape将上采样向量作为:

y = reshape([x' repmat(z,size(x,2),1)]',1,[])

y =

    1   0   0   2   0   0   3   0   0   4   0   0

请记住,zx是行向量,如果它们是列向量,您可能需要稍微使用该语句。

答案 3 :(得分:1)

使用kronecker tensor product的简短替代方案:

y = [1; z(:)]*x; y = y(:).'       %// x(:).' for independent vector orientations

另一个快速的选择:

y = reshape( [1; z(:)]*x, 1, [])  %// x(:).' for independent vector orientations

基本上相当于:

{{1}}

答案 4 :(得分:0)

使用upsample

fs=20;
N=50;
T=1/fs;
n=0:1:N-1;
L=3;
x = exp(-0.5*n*T).*sin(2*pi*n*T);

x = upsample(x, L)