gpt4 book ai didi

code-generation - Simulink 中的循环缓冲区

转载 作者:行者123 更新时间:2023-12-02 08:40:14 25 4
gpt4 key购买 nike

我想在纯 Simulink 模型(没有更多的工具箱,没有 S-Function)中实现一个非常大的(10^6 个元素 - 固定大小)循环缓冲区。

在某些时候我需要阅读一些元素(任何地方,不仅仅是开始或结束)。

我不能使用以下解决方案:

  1. “队列 block ”或“缓冲区 block ”(我没有可用的信号处理工具箱)
  2. “离散延迟”(我需要一个 hugh 缓冲区并且不会将 10^6 延迟放入模型中)
  3. “模拟事件”(我需要从此模型生成代码)

我还没有尝试过“S-Function”,我正在寻找替代解决方案。

您还知道什么进一步的方法?

最佳答案

可以使用 MATLAB Fcn block 创建一个简单的循环缓冲区:

function y = CircularBuffer(u, N)
%#codegen
% Function to implement a simple N element circular buffer

% Define the internal buffer variable as persistent so
% so that it will maintain its values from one time step
% to the next.
persistent buffer writeIdx

% Initialize the buffer the first time through
if isempty(buffer)
% Initialize the buffer
buffer = zeros(N,1);
writeIdx = 1;
else
buffer(writeIdx) = u;
if (writeIdx == N)
writeIdx = 1;
else
writeIdx = writeIdx+1;
end
end

% Output the buffer
y = buffer;

这完全支持代码生成(并且不执行 memcpy)。

如果需要,您可以轻松更改缓冲区的数据类型,但如果您希望输入和输出信号具有不同的采样率(与信号处理模块集中的缓冲区一样),则需要恢复为使用 S-Function。

关于code-generation - Simulink 中的循环缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com