主要内容

本页采用了机器翻译。点击此处可查看英文原文。

将可追溯性信息与 Simulink 中的 MATLAB 代码行关联

MATLAB 编辑器中的可追溯性管理支持是基于 Simulink® 的需求管理接口的扩展,允许 MATLAB® 代码行和外部工件之间的关联。此功能不需要编辑 MATLAB 文件;所有可追溯性数据都单独存储。这类似于使用 Simulink 模型时 RMI 链接的“外部”存储。

此外,使用“外部存储”模式管理可追溯性信息,Simulink 和 Stateflow® 用户在将外部文档与 MATLAB Function 模块的内容关联时可以获得更细粒度的益处。

所包含的示例模型具有与 Simulink 模块和 MATLAB Function 模块的各个代码行相关的可追溯性数据。

打开示例模型

此示例演示了在对连接的神经细胞中的刺激脉冲进行建模时外部文档和 MATLAB 代码行之间的链接。

评估以下代码以打开工作目录中的 slvnvdemo_synaptic_transmission Simulink 模型,并设置预设项以允许本示例中的文件进行正确通信。

open_system("slvnvdemo_synaptic_transmission.slx");
rmipref(UnsecureHttpRequests=true);

有三个 Model 模块引用相同的脉冲神经细胞模型,可以在 slvnvdemo_neuron.slx 中看到。评估代码以打开模型。

open("slvnvdemo_neuron.slx");

神经细胞模型遵循“泄漏积分器”方程:

CmdVdt=Itotal-V-V0Rm

Cm,Rm-capacitance and resistance of cell membrane

Itotal-includes injected stimulation current and all ion channel currents

V0-resting cross-membrane potential, typically -70mV

为了仿真的目的,这被转换为:

VV0+0t1Cm(Itotal-V-V0Rm)dt

神经元之间的两个 MATLAB 函数计算突触后电流。当突触前去极化超过神经递质释放阈值时,我们将突触后电流增加一个给定幅度的脉冲:

II+Iamplitude

由此产生的总电流按下列公式指数衰减:

dIdt=-I*tτ

为模型短期突触抑制的影响,在前一个脉冲之后的一定时间范围内不允许出现下一个增量。该模型忽略了轴突传输的时间延迟。

仿真模型并查看结果

评估以下代码来仿真 slvnvdemo_synaptic_transmission 模型。

sim("slvnvdemo_synaptic_transmission");
### Searching for referenced models in model 'slvnvdemo_synaptic_transmission'.
### Total of 1 models to build.
### Starting serial model build.
### Successfully updated the model reference simulation target for: slvnvdemo_neuron

Build Summary

Model reference simulation targets:

Model             Build Reason                         Status                        Build Duration
===================================================================================================
slvnvdemo_neuron  Global variable Noise_seed changed.  Code generated and compiled.  0h 0m 22.396s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 24.369s

手动检查 Scope 模块的结果或评估以下代码。

open_system("slvnvdemo_synaptic_transmission/Scope");

这六个图分别是:

  1. 外部注入电流脉冲

  2. 注射刺激第一个神经元的细胞内电压尖峰

  3. 第二个神经元产生的突触后电流

  4. 突触刺激第二个神经元的活动

  5. 第三个神经元产生的突触后电流

  6. 突触刺激第三个神经元的活动

在施加刺激脉冲(图 1)时,观测上游神经元的规律性放电(图 2)。下游神经元中突触诱导电流(图 3)跳过了上游神经元的一些动作电位,这是由于短期神经递质耗竭造成的,在 Synaptic current Function 模块中这被建模为暂时关闭期。执行代码以导航到 Synaptic current 模块。

hilite_system("slvnvdemo_synaptic_transmission/Synaptic current","find");

有时,下游神经元会整合多个突触输入来产生尖峰(图 4)。第三个神经元整合来自第二个神经元的突触输入(图 5),并在稍后的时间发出尖峰(图 6)。使用默认参数值时,第三个神经元可能会通过 Noise current 模型中的 slvnvdemo_neuron 模块出现 1 次或多次脉冲,具体取决于模型中有意引入的随机噪声。导航到 Noise current 模块。

open_system("slvnvdemo_neuron");
hilite_system("slvnvdemo_neuron/Noise current","find");

所有三个神经元和两个突触都分配了相同的参数值。可追溯性链接用于申述参数值和实现的合理性。

在 Simulink 和独立 MATLAB 文件之间导航

slvnvdemo_synaptic_transmission model 运行外部脚本 synaptic_params.m 将所需的参数值加载到工作区中。如需打开脚本,请执行以下代码:edit("synaptic_params.m")

MATLAB 代码链接允许您从 Simulink 中的依赖模块跟踪,不仅可以跟踪到脚本文件,还可以跟踪到定义仿真中使用的值的特定行。

手动找到模型中的 Stimulation pulse 模块或评估以下代码。

hilite_system("slvnvdemo_synaptic_transmission/Stimulation pulse","find");

右键点击该模块并选择需求> 1。"I_inj = 2e-11; % 20 pA" 跟随链接并查看 MATLAB 代码文件中相关的突出显示区域,或评估以下内容:

edit("synaptic_params.m");
rmidemo_callback("view","slvnvdemo_synaptic_transmission/Stimulation pulse",1); 
% Follow the Requirements link

请注意,在 synaptic_params.m 脚本中,有一个不匹配的参数值。这可以通过可追溯性链接轻松检测到。突出显示 synaptic_params.m 脚本中的第 12 行,其内容为 V_syn_release = -2e-2; % -20 mV。右键点击选择,然后在上下文菜单中点击需求> 1. slvnvdemo_synaptic_transmission/突触释放阈值(恒定)。这将导航回 Simulink 模型并突出显示链接到 synaptic_params.m 中第 12 行的模块。

在 Simulink 中,点击 App 选项卡并打开需求管理器。点击需求选项卡中的突出显示链接,突出显示您刚刚创建的链接,或者评估以下代码。

rmi("highlightModel","slvnvdemo_synaptic_transmission");

为 MATLAB 代码行创建可追溯性链接

评估以下代码以确保启用了双向链接,以便您可以在一个步骤中创建双向可追溯性链接。

rmipref(BiDirectionalLinking=true);

模型左下角的 Synaptic time constant 模块尚未链接到 synaptic_params.m 中的相关行。在 Simulink 模型中,选择 Synaptic time constant 模块。如果找不到此模块,请评估以下代码,然后选择它。

hilite_system("slvnvdemo_synaptic_transmission/Synaptic time constant","find");

然后,在 MATLAB 编辑器中,选择 synaptic_params.m 脚本底部的变量名 Syn_decay_time。如果还没有,请执行以下代码来打开脚本:edit("synaptic_params")

右键点击选定的行,然后从上下文菜单中选择需求>链接到 Simulink 中的选择。通过从 MATLAB 导航到 Simulink 并返回 MATLAB 来测试新链接。

syn_decay_timeLink.png

为 MATLAB Function 模块内的代码行创建可追溯性链接

slvnvdemo_synaptic_transmission 模型有一个 MATLAB Function 模块,您将使用它来跟踪参数值源到 Synaptic strength 常量模块。在 Simulink 模型中,点击 Synaptic strength 常量模块或执行以下代码来定位该模块。要将其选为链接目标,请右键点击该模块,然后选择链接到 MW 工件 > 选作链接目标

hilite_system("slvnvdemo_synaptic_transmission/Synaptic strength","find");

不要链接 MATLAB Function 模块本身,而是打开该模块的 MATLAB 代码并链接特定的行。在 slvnvdemo_synaptic_transmission 模型中,导航到 Synaptic current 模块并点击它,或者执行以下代码。

open_system("slvnvdemo_synaptic_transmission/Synaptic current");

在 MATLAB Function 模块编辑器中,在 MATLAB Function 模块第 33 行找到 I_amplitude 的出现。选择该行并右键点击。从上下文菜单中选择需求 > 打开出向链接对话框。在“出向链接”对话框中,点击新建,然后将文档类型设置为 Simulink Diagram 并点击使用当前。点击应用以创建连接,然后点击确定

在 MATLAB 代码和 Microsoft Word 中的行之间创建可追溯性链接

到目前为止,我们只研究了 MATLAB 和 Simulink 之间的链接。打开属于被引用模型 slvnvdemo_neuronSodium current calculation subsystemIon current calculation MATLAB 模块,或执行以下代码。

open_system("slvnvdemo_neuron/Sodium channel current/Ion current calculation")

在 MATLAB Function 模块编辑器中点击鼠标右键,然后从上下文菜单中选择需求 > 启用需求突出显示,以查看哪些代码行具有需求链接。

enableCodeReqsHightlighting.png

右键点击突出显示的代码行,以指示其具有需求链接。从需求上下文菜单中,导航到菜单顶部的编号链接。关联的 Word 文档打开并显示关联的文本。您还可以打开 Word 文档,通过查找类似于 MATLAB 图标的对象来直观地识别链接。您可以通过 Ctrl+点击此链接对象导航到链接的代码。

wordLink.png

执行以下代码以打开 Word 文档:open("NeuralSpikeModeling.docx")

要创建与 Ion current calculation 中的 Potassium channel current subsystem 函数类似的链接,请打开 Word 文档并使用“查找”函数 (Ctrl+F) 查找短语 outward current of potassium ions。在 Word 文档中使用光标选择此短语。然后,打开上方的 Ion current calculation MATLAB 函数模块,或者运行以下代码。

open_system("slvnvdemo_neuron/Potassium channel current/Ion current calculation");

在 MATLAB Function 模块编辑器中,选择 outwardCurrent 子函数的实现(第 34-37 行)。右键点击选定的行,然后在上下文菜单中选择需求>链接到 Word 中的选择。最小化 Word 文档,然后从 MATLAB 代码底部新突出显示的行导航到 Word 中的相关描述。当正确的位置突出显示时,使用 MATLAB 图标导航回代码。

outwardCurrent.png

报告可追溯性链接

与 MATLAB Function 模块 的 MATLAB 代码行相关的可追溯性链接包含在为父 Simulink 模型生成的需求可追溯性报告中。在需求选项卡中,点击 slvnvdemo_neuron Simulink 模型中的共享 > 生成模型可追溯性报告。执行以下代码来打开模型。

open_system("slvnvdemo_neuron.slx");

generateReport.png

请注意,报告中存在 MATLAB Function 模块链接信息,包括链接的 MATLAB 代码行的引用。