Main Content

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

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

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

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

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

打开示例模型

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

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

open('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'.
### Found 1 model references to update.
### Starting serial model reference simulation build.
### Successfully updated the model reference simulation target for: slvnvdemo_neuron

Build Summary

Simulation targets built:

Model             Action                        Rebuild Reason                               
=============================================================================================
slvnvdemo_neuron  Code generated and compiled.  slvnvdemo_neuron_msf.mexa64 does not exist.  

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

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

open_system('slvnvdemo_synaptic_transmission/Scope');

这六个图分别是:

  1. 外部注入电流脉冲

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

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

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

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

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

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

rmidemo_callback('locate','slvnvdemo_synaptic_transmission/Synaptic current');

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

rmidemo_callback('locate','slvnvdemo_neuron/Noise current');

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

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

slvnvdemo_synaptic_transmission model 运行外部脚本 synaptic_params.m 将所需的参数值加载到工作区中。如果需要,通过评估以下代码来打开脚本:open('synaptic_params.m').

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

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

rmidemo_callback('locate','slvnvdemo_synaptic_transmission/Stimulation pulse');

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

open('synaptic_params.m'); % 如果需要,打开突触参数脚本

rmidemo_callback('view','slvnvdemo_synaptic_transmission/Stimulation pulse',1); % 按照需求链接

请注意,在 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模块。如果找不到此模块,请评估以下代码,然后选择它。

rmidemo_callback('locate','slvnvdemo_synaptic_transmission/Synaptic time constant');

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

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

syn_decay_timeLink.png

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

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

rmidemo_callback('locate','slvnvdemo_synaptic_transmission/Synaptic strength');

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

rmidemo_callback('emlshow','slvnvdemo_synaptic_transmission/Synaptic current');

在 MATLAB Function 模块编辑器中,在 MATLAB Function 模块模块第 33 行找到 I_amplitude 的出现。用光标突出显示该行以选择它,然后右键点击它。从上下文菜单中选择需求,然后选择链接到 Simulink 中的选择

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

到目前为止,我们只研究了 MATLAB 和 Simulink 之间的链接。打开属于引用的slvnvdemo_neuron模型的Sodium current calculation subsystemIon current calculation MATLAB Function 模块,或者执行以下代码:rmidemo_callback('emlshow','slvnvdemo_neuron/Sodium channel current/Ion current calculation')

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

enableCodeReqsHightlighting.png

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

wordLink.png

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

要创建与 Potassium channel current subsystem 中的 Ion current calculation 函数类似的链接,请打开 Word 文档并使用“查找”函数 (Ctrl+F) 查找短语“钾离子外流”。在 Word 文档中使用光标选择此短语。然后,从上面打开Ion current calculation MATLAB Function 模块,或者执行以下代码:rmidemo_callback('emlshow','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('slvnvdemo_neuron.slx');

generateReport.png

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