自己的一点点小想法——使用MATLAB实现类似环形缓冲器的读取

最近复现一篇论文,文章中要求缓冲当前时刻及前 N − 1 N-1 N1个测量、以及对应的滤波方差矩阵,就想到了环形缓冲器,不知我理解是否准确,我创建了一个长度为 N N N的缓冲区,然后使用一个索引数字对应该缓冲区的开头,然而众所周知,MATLAB中所有数值数据都是用矩阵保存,这让我想要适配更多维的矩阵,从而产生了下面的尝试,发现非常好用!主要的方法是使用eval函数将:,的维数减一次拼接转换为命令,从而实现任意维度的 N N N个测量只要输入,就可以输出其对应的正确顺序的值。

function bufferValue = readBuffer(buffer, bufferStart)
    % buffer的最后一个维度为索引
    colonStr = ':,';
    colonNum = ndims(buffer) - 1;
    colonJoinStr = repmat(colonStr,[1,colonNum]);
    bufferLastDimSize = size(buffer,ndims(buffer));
    bufferValue = zeros(size(buffer));
    for index = bufferStart:bufferStart+bufferLastDimSize-1
        indexTmp = index - (floor((index - 1) / bufferLastDimSize) * bufferLastDimSize);
        indexReal = index - bufferStart + 1;
        eval(strcat('bufferValue(',colonJoinStr,num2str(indexReal),')','=','buffer(',colonJoinStr,num2str(indexTmp),');'))
    end
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小涛29

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值