我有一些信号。它们的长度都相同(N = 1024
)。我必须将每个细分为Ns = 7
个L = 256
个细分,因此会有50%重叠。 S = randi(10,[4 N]);
可以被认为是4个信号。我正在考虑在一个向量中保存断点(手动计算它们!)并使用两个循环在单元格中保存新的4 * Ns = 28
信号,但它不是一个好的解决方案。那么有更快的方式,如reshape
?
答案 0 :(得分:3)
这可能是一种方法 -
%// Parameters
N = 1024
L = 256
num_seg = 2*(N/L)-1
%// Indices for the first signal with each column representing one segment.
%// Thus, there must be 7 columns, representing those 7 segments in a signal.
signal1_idx = bsxfun(@plus,[1:L]',[0:num_seg-1]*L/2); %//'
%// Indices for the all the signals in a 3D array with each 3D slice
%// representing one signal
allsignals_idx = bsxfun(@plus,signal1_idx,permute([0:size(S,1)-1]*N,[1 3 2]))
%// Index into the input array to create a 3D array output
St = S' %//'
out = St(allsignals_idx)
如何解释输出out
:
out
切片中的每列都是来自一个信号的一个段。out
的每个3D切片都适用于每个信号。 N = 16
&的示例运行L = 4
:
>> S
S =
6 10 9 2 3 1 8 8 4 5 7 10 5 8 10 9
8 9 5 4 4 4 7 2 9 4 3 7 4 7 4 9
5 4 5 10 7 10 7 9 2 7 2 8 9 9 1 4
7 3 2 1 1 10 3 1 8 3 4 10 4 4 4 10
>> out
out(:,:,1) =
6 9 3 8 4 7 5
10 2 1 8 5 10 8
9 3 8 4 7 5 10
2 1 8 5 10 8 9
out(:,:,2) =
8 5 4 7 9 3 4
9 4 4 2 4 7 7
5 4 7 9 3 4 4
4 4 2 4 7 7 9
out(:,:,3) =
5 5 7 7 2 2 9
4 10 10 9 7 8 9
5 7 7 2 2 9 1
10 10 9 7 8 9 4
out(:,:,4) =
7 2 1 3 8 4 4
3 1 10 1 3 10 4
2 1 3 8 4 4 4
1 10 1 3 10 4 10