我正在尝试制作一个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
我怎么能这样做?
答案 0 :(得分:3)
忘记循环。使用以下解决方案:
out = zeros(1,length(x)*L);
out(:,1:L:end) = x
答案 1 :(得分:2)
以下是使用bsxfun
和reshape
的解决方案:
y = reshape(bsxfun(@times,[1;z.'],x),1,[]);
我最初想到的是repelem
,但认为这是太多的工作。但是,如果您只是想使用"零阶近似值" - 这只是你的功能。
答案 2 :(得分:1)
您可以使用repmat
和reshape
将上采样向量作为:
y = reshape([x' repmat(z,size(x,2),1)]',1,[])
y =
1 0 0 2 0 0 3 0 0 4 0 0
请记住,z
和x
是行向量,如果它们是列向量,您可能需要稍微使用该语句。
答案 3 :(得分:1)
使用kron
ecker 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)