MATLAB: Adding zeroes to Row Vector using a script

row vectorscriptzeros

I wanted to create a script, which would insert "m" amount of zeroes just after every "M-th" element of a given vector, x, to create a new vector. Ie: x = [1 2 3 4 5 6] for instance.
The input would use y = zero_insertion(x,M,m)
Code so far: function y = zero_insertion(x,M,m) a = zeros(1,m) w = x(1:M) y = [w a]
and that will get me a row vector with that has up to the M-th element and the number of "m" zeroes afterwards. However, I just can't figure out how to make a loop to do that for every "M-th" element, and I also can't retrieve the rest of my original vector.
x = [1 2 3 4 5 6] for instance.
Example: If input was y = zero_insertion([1 2 3 4 5 6],1,1) then result would be [1 0 2 0 3 0 4 0 5 0 6 0]
How would I do this? Thanks for your assistance

Best Answer

It would be simple if you guaranteed that numel(x)/M is always an integer, but without that guarantee:
function y = zero_insertion(x,M,m)
modxm = mod(numel(x),M);
padding = logical(modxm)*M-modxm;
newx = reshape([x NaN(1,padding)],M,[]);
y1 = [newx ; zeros(m, size(newx,2))];
y2 = reshape(y1,1,[]);
y = y2(1:(numel(y2)-logical(padding)*(padding+m)));
Or if you want to keep the zeros even if numel(x)/M isn't an integer, the last line is:
y = y2(~isnan(y2));