Matlab中如何生成10000采样信号的所有1000采样点子集
如何获取所有连续重叠的采样点子集?
你遇到的问题是因为buffer(sig, 1000)默认采用无重叠的窗口分割——它的默认步长等于窗口大小(1000),所以每次直接跳到下一个不重叠的窗口,10000个点刚好分成10组。但如果要获取所有可能的连续子集,其实需要的是步长为1的滑动窗口,这样每一组和前一组重叠999个点,总共会有10000 - 1000 + 1 = 9001组。
解决方案(以MATLAB为例)
直接调整buffer函数的重叠参数即可。buffer的完整语法是buffer(x, n, p),其中:
n是窗口大小(这里是1000)p是相邻窗口的重叠点数
要实现步长为1,重叠点数就是1000 - 1 = 999,所以代码改成:
new_sam = buffer(sig, 1000, 999);
运行后得到的new_sam是一个1000×9001的矩阵,每一列对应一个连续的1000采样点子集:第一列是sig(1:1000),第二列是sig(2:1001),……最后一列是sig(9001:10000),完全覆盖了所有可能的连续组合。
补充:如果是Python环境
如果你用Python处理,可以用numpy的滑动窗口工具来实现同样效果:
import numpy as np # 先把列向量转成一维数组 sig_flat = sig.flatten() # 生成滑动窗口,再转置成类似MATLAB的列格式 new_sam = np.lib.stride_tricks.sliding_window_view(sig_flat, window_shape=1000).T
内容的提问来源于stack exchange,提问作者Htet
相关产品推荐
相关产品推荐

