向量变矩阵高效语句:buffer

         把一个向量X分成长度为N的帧,帧之间重叠P个样点;帧化信号加窗后逐帧进行FFT。这几乎是语音信号处理的“必须流程”。以前都需要编循环实现。近日发现一个MATLAB函数,一句话就能实现,惊叹不已。这里推荐buffer语句。细致说明可用帮助命令调出研究。这里介绍几种典型情况。

1,把一个向量自动分帧变为矩阵,帧之间无重叠:  X1= buffer(X, N);  不丢弃一个样点,自动在向量后面补0把所有样点都用上;

2,把一个向量自动分帧,帧之间有重叠:X2=buffer(X,N,P); 执行时,先给X前面增加P个0,然后开始一帧一帧分帧,前后帧之间重叠P个样点,后面如前补0,不丢弃样点

3,把一个向量自动分帧,帧之间有重叠,但是第一帧要从X的第一个样点开始,不能在前面补0:X3=buffer(X,N,P,'nodelay'); 这是一种常见情况,能一句话取代一个循环。

        设X=1 :23;N=8;P=3;执行上面三条命令后的结果分别是:

X1: 

        1     9    17
        2    10    18
        3    11    19
        4    12    20
        5    13    21
        6    14    22
        7    15    23
        8    16     0

X2:   

         0     3     8    13    18
         0     4     9    14    19
         0     5    10    15    20
         1     6    11    16    21
         2     7    12    17    22
         3     8    13    18    23
         4     9    14    19    0
         5    10   15    20    0

X3:    

          1     6    11    16
          2     7    12    17
          3     8    13    18
          4     9    14    19
          5    10    15    20
          6    11    16    21
          7    12    17    22
          8    13    18    23

       有了buffer,再加上bsxfun,代码可以大大简化,执行速度明显提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值