矢量化环移阵列

Vectorise circshift array

我有一个 for 循环,可以将信号移动一定数量并将其附加到数组。如何矢量化 circshift 部分,这样我就不需要使用 for 循环?

fs_rate=10
len_of_sig=1; %length of signal in seconds
t=linspace(0,len_of_sig,fs_rate*len_of_sig);

y=.5*sin(2*pi*1*t);
for aa=1:length(y)
  y_new(aa,:)=circshift(y,[1,aa+3]); %shifts signal and appends to array

end
plot(t,y_new)

PS: 我正在使用 Octave 4.2.2 Ubuntu 18.04 64 位

您可以在使用 circshift 作为基数偏移后使用 gallery 创建一个循环矩阵:

base_shift = 4;
fs_rate = 10;
len_of_sig = 1; # length of signal in seconds
t = linspace (0, len_of_sig, fs_rate*len_of_sig);
y = .5 * sin (2*pi*1*t);
y = gallery ("circul", circshift (y, [1 base_shift]));

或者如果你想知道它是如何实现的,看看它的源代码type gallery