【元胞自动机】心房颤动/扑动模型研究(Matlab代码实现)

news2024/11/13 16:31:28

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

本文是一个元胞自动机模型,模拟由于不应期弥散机制引起的心房扑动/颤动。

(4)个细胞簇被快速刺激,导致周期性的激活波
在整个模型表面上传播。由于整个表面不应期的变化,波前在与仍然耐火的区域碰撞时被分解。快速刺激在80步后终止,但激活波前仍然在整个模型表面传播。作者通过寻找不应期短的相邻细胞来仔细选择刺激的细胞簇。我在这里不这样做;我在这里不这样做。相反,我只是不断改变用于分配 K 值的随机数生成器的初始状态,直到我获得自我维持的活动。

在包含模拟的图形窗口中,绘制了三种离散状态:激活或计划(蓝色)、
难熔性(浅蓝色)和静止/可兴奋(白色)。模拟的时间步长
编号显示在激活模式下方。要调制模拟的速度,请将输入参数更改为 pause 语句(在每个步骤中暂停的时间,以秒为单位)。

除了绘制整个表面上随时间变化的激活外,还生成了显示“伪电图”的第二个图。

📚2 运行结果

 

部分代码:

br=[1:31 1:31 zeros(1,34) 32*ones(1,34)];   % Row coordinates of border.
bc=[zeros(1,31) 33*ones(1,31) 0:33 0:33];   % Column coordinates of border.
px=0.5*(br-1)+bc; py=1+(br-1)*sqrt(3)/2;    % Convert coords to hexagonal for plotting.
fh=figure('position',[160 325 350 175],'color',[1 1 1]); % [160 325 630 330]
plot(px,py,'w.','markersize',16); hold on   % Plot the border.
axis image
axh=gca;
set(axh,'xcolor',[1 1 1],'ycolor',[1 1 1])
th=text(15,-2,'');

sr=[12 12 13 13]'; sc=[8 9 8 9]';       % Coordinates of units to stimulate.
si=sub2ind(size(s0),sr,sc);             % Indices of units in cluster to stimulate.
sched=[si ones(size(si))];                % Schedule the units to activate at step 1.
ph1=plot(-2,0,'b.','markersize',16);  % Create handles for active points.
ph2=plot(-2,0,'c.','markersize',16);  % Create handles for refractory points.
for step=1:600
   ia=sched(sched(:,2) == step,1);                % Indices into s0 to activate.
   ia2=sched(sched(:,2) > step,1);              % Additional indices into s0 to plot.
   [sy,sx]=ind2sub(size(s0),[ia;ia2]);          % Coordinates of activated units.
   px=0.5*(sy-1)+sx; py=1+(sy-1)*sqrt(3)/2;     % Convert coords to hexagonal for plotting.
   set(ph1,'xdata',px,'ydata',py);              % Update plot of active units.
   if step > 1
       [ry,rx]=ind2sub(size(s0),inz);               % Coordinates of refractory units.
       px=0.5*(ry-1)+rx; py=1+(ry-1)*sqrt(3)/2;     % Convert coords to hexagonal for plotting.
       set(ph2,'xdata',px,'ydata',py);              % Update plot of refractory units.
       drawnow
       pause(0.01)
       egram(step)=size(inz,1);                     % Build approx egram based on # of active units.
   end
   set(th,'string',num2str(step))                   % Update timer.
   
   s0=zeros(R,C); s0(ia)=1;                    % Update matrix of ones/zeros with activated units.
   sched(sched(:,2) == step,:)=[];          % Remove activated units from table.
   for j=1:size(ia,1)                       % Loop thru units acitvated at this step.
       atimes{ia(j)}=[atimes{ia(j)}; step]; % Append row of atimes with current step.
       if size(atimes{ia(j)},1) > 1         % Element has been activated at least twice.
           lastcycle=diff(atimes{ia(j)}(end-1:end)); %*dt;    % Previous interval (msec).
       else
           lastcycle=40;                    % Use default previous interval of 40 steps.
       end
       arp(ia(j))=round(k(ia(j))*sqrt(lastcycle));   % Set ref pd for units just active.
   end

   % Determine units to schedule for future activation.
   ins0=[];                                     % Indices of neighbors of active units.
   for jj=1:size(nhood,1)                        % Loop through nhood building column of neighbors.
      ins0=[ins0; find(matrixShift(s0,nhood(jj,1),nhood(jj,2)))];
   end
   if step < 80
       srp=arp(si);
       ins0=[ins0; si(srp<1)];
   end
   ins0=unique(ins0);                            % Exclude redundancies.
   ins0=setdiff(ins0,ia);                       % Exclude currently active elements.
   ins0=setdiff(ins0,sched(:,1));               % Exclude units already scheduled for activation.
   inz=find(arp > 0); ins0=setdiff(ins0,inz);   % Exclude units in state 1 (absolute refractory).
   ia2=intersect(ins0,find((arp == 0) | (arp == -1)));    % Units in state 2.
   sched=[sched;[ia2 step+4*ones(size(ia2))]];          % Schedule to activate in 4 steps.
   ia3=intersect(ins0,find((arp == -2) | (arp == -3)));    % Units in state 3.
   sched=[sched;[ia3 step+3*ones(size(ia3))]];          % Schedule to acivate in 3 steps.
   ia4=intersect(ins0,find((arp == -4) | (arp == -5)));    % Units in state 4.
   sched=[sched;[ia4 step+2*ones(size(ia4))]];          % Schedule to acivate in 2 steps.
   ia5=intersect(ins0,find(arp == -6));                    % Units in state 5 (completely recovered).
   sched=[sched;[ia5 step+ones(size(ia5))]];            % Schedule to acivate at next step.
   arp=max(-6,arp-1);                                   % Update refractory period.
end

figure; plot(egram);
title('Pseudo-Electrogram (see paper by Moe et al)')
xlabel('Time Steps')
ylabel('Number of Units Refractory')

% =================== Sub functions ===================
function out=matrixShift(m,r,c)

% MATRIXSHIFT Shift all elements of matrix m up by r rows and right
%   by c columns. Rows and/or columns of zeros are used to fill voids.

for k=1:abs(r)
   if r > 0, m=[m(2:end,:); zeros(1,size(m,2))];
   else m=[zeros(1,size(m,2)); m(1:end-1,:)];
   end
end

for k=1:abs(c)
   if c > 0, m=[zeros(size(m,1),1) m(:,1:end-1)];
   else m=[m(:,2:end) zeros(size(m,1),1)];
 

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]American Heart Journal 1964; 67(2):200-220. 

[2]Peter Hammer (2022). Model of atrial fibrillation/flutter. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(附源码)ssm学校疫情服务平台 毕业设计 291202

ssm学校疫情服务平台 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对学校疫情服务平台等问…

【数电实验】触发器及其应用

实验三 触发器及其应用 一 实验目的 1 了解触发器的触发方式&#xff08;上升沿触发、下降沿出发&#xff09;及其触发特点&#xff1b; 2 测试常用触发器的逻辑功能&#xff1b; 3 掌握用触发器设计同步时序逻辑电路的方法。 二 实验内容 1 测试双D触发器74HC74的逻辑功能…

手工编译konsole备忘

背景 系统自带的终端弱爆了&#xff0c;本来想编译深度终端的&#xff0c;但DTK风格的程序在非DDE桌面&#xff08;应该是dde_kwin这个窗管的问题&#xff09;巨难看&#xff0c;无意中添加了Konsole&#xff0c;发现已经有我需要使用的右键打开当前目录文件管理器的功能。 …

Go context.Context的学习

一、前言 Golang context是Golang应用开发常用的并发控制技术&#xff0c;它与WaitGroup最大的不同点是context对于派生goroutine有更强的控制力&#xff0c;它可以控制多级的goroutine。 context翻译成中文是”上下文”&#xff0c;即它可以控制一组呈树状结构的goroutine&a…

java计算机毕业设计ssm疫情期间校园车辆入校预约管理服务系统1171a(附源码、数据库)

java计算机毕业设计ssm疫情期间校园车辆入校预约管理服务系统1171a&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe…

没有二十年功力,写不出 Thread.sleep(0) 这一行“看似无用”的代码

这篇文章要从一个奇怪的注释说起&#xff0c;就是下面这张图&#xff1a; 我们可以不用管具体的代码逻辑&#xff0c;只是单单看这个 for 循环。 在循环里面&#xff0c;专门有个变量 j&#xff0c;来记录当前循环次数。 第一次循环以及往后每 1000 次循环之后&#xff0c;进…

ssm+vue基本微信小程序的校园二手商城系统 计算机毕业设计

在当今社会的高速发展过程中&#xff0c;产生的劳动力越来越大&#xff0c;提高人们的生活水平和质量&#xff0c;尤其计算机科技的进步&#xff0c;数据和信息以人兴化为本的目的&#xff0c;给人们提供优质的服务&#xff0c;其中网上购买二手商品尤其突出&#xff0c;使我们…

211大数据专业大四学生,放弃字节转正,选择老家大型国企,听听他怎么说?...

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接&#xff0c;进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群分享学习群一位大数据专业同学的秋招学习和求职经历&#xff0c;他是211大四学生&#xff0c;年初才开始学习&#xff0c;但还好赶…

181.基于Django的云文件存储使用方式——七牛云存储

1.文件云存储 1.1 概述 在Django项目中&#xff0c;用户上传的文件以及项目中使用的静态文件&#xff0c;默认读书存储本地&#xff0c;保存在服务器中&#xff0c;但是&#xff0c;其实我们也可以将他们保存在云存储中&#xff0c;譬如七牛云存储、阿里云存储、亚马逊云存储…

【网络安全】提防黑客来“敲门”

前言 互联网在给我们带来便捷高效的同时&#xff0c;也给一些不法分子提供了可乘之机。网络诈骗、窃取个人信息等花样层出不穷&#xff0c;骚扰电话、垃圾短信扰乱着我们的正常生活&#xff0c;使网络空间抹上一笔灰色。网络安全与每个人都息息相关&#xff0c;所以我们必须理…

Python测试进阶(三)

文章目录性能测试JMeter测试计划模拟并发结果分析分布式性能监控grafanaFluxPrometheus小结性能测试 为什么做性能测试&#xff1f;主要是解决这些问题 什么是性能测试 模拟多个用户的操作&#xff0c;看对服务器性能的影响 指标 TPS&#xff1a;transaction per secondRT&…

基于Kubeadm快速部署一个K8s集群

目录kubeadm概述安装要求准备环境安装kubelet、kubeadm、kubectl使用kubeadm引导集群下载各个机器需要的镜像初始化主节点安装网络组件常用shell命令测试kubernetes集群部署dashboardkubeadm概述 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通…

索引创建、删除的sql语句

目录 创建索引 使用ALTER TABLE 语句创建索引 使用CREATE TABLE 语句创建索引 删除索引 使用ALTER TABLE 语句删除索引 使用DROP INDEX 语句删除索引 创建索引 1、创建表的同时&#xff0c;指定给某个字段创建索引&#xff08;name&#xff09; create table cat(id …

SaaS 产品的文档策略

作者&#xff1a;Vaijayanti Nerkar 和 Priya Shetye&#xff0c;BMC Software 几年前&#xff0c;当 BMC Software 决定进军 SaaS 市场时&#xff0c;该公司开始投资开发基于云的产品。20多年来&#xff0c;BMC Software 产品都是典型的本地产品&#xff0c;因此&#xff0c;…

2022.12.11-YOLOv5使用NCNN将模型部署到Android端教程(1)部署自己的训练模型到Android实现静态图片检测

文章目录1. 前言2. 模型转换2.1. NCNN2.1.1. 简介2.1.2. ncnn2.1.3. ncnn-android-yolov52.2. 项目准备2.2.1. 安装Android studio2.2.2. 下载解压源码2.3. 安卓源码重新编译2.3.1. 构建工程2.3.2. 修改源码2.3.2.1. 修改CMakeLists.txt中的路径2.3.2.2. 重新重新ysnc project2…

【华为上机真题 2022】相对开音节

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

【无需注册账号】只需两步, Ai Studio上也可以玩[ChatGPT]了

☆ 只需两步&#xff0c; Ai Studio上也可以玩[ChatGPT]了 ☆ 无需账号即可体验喽~ 体验地址 只需两步&#xff0c; Ai Studio上也可以玩[ChatGPT]了 文章目录☆ 只需两步&#xff0c; Ai Studio上也可以玩[ChatGPT]了 ☆0 Fork后进入项目应用中心体验☆本页面下方体验☆注意…

5G无线技术基础自学系列 | 勘测准备

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 基站在详细的勘测之前需要做的准备包括…

CN_UDP协议

文章目录UDP协议UDP概述UDP的首部格式UDP数据报封装入IP数据报UDP校验伪首部真首部UDP数据报处理例UDP vs TCPUDP协议 User Datagram Protocol - Wikipedia 1Attributes2Ports3UDP datagram structure4Checksum computation 4.1IPv4 pseudo header4.2IPv6 pseudo header 5Reli…

百度安全查询,查询网址是否存在百度安全风险的方法

如果网站被百度安全识别为风险网站&#xff0c;或者是提示该页面可能存在虚假信息&#xff0c;该页面可能已被非法篡改&#xff0c;那么就不妙了。 怎样才能知道自己的网是否存在百度安全风险&#xff1f; 查询网站百度安全的方法: 第一步、打开SEO综合查询工具 第二步、添加…