gpt4 book ai didi

java - 如何模拟 ECG(心电图)

转载 作者:搜寻专家 更新时间:2023-11-01 02:45:28 30 4
gpt4 key购买 nike

我正在从事某种涉及模拟 ECG(心电图)的项目。我通过在间隔之间生成一些随机数并将该数据发送到另一个程序来分析和绘制它来做到这一点。但是,问题是 java 代码在区间 [a,b] 之间生成的随机数有很大的差异,这意味着下一个生成的随机值与前一个数有很大不同。我想要的是随机数流略有变化,以便图形看起来平滑。此时,生成的图形非常尖锐,但我希望它像真实的 ECG 图形一样平滑和变化。

请帮我做到这一点。

Here is what I have got so far

这是代码

//setup ECG graph
StdDraw.setXscale(0.0, 100.0);
StdDraw.setYscale(0.0,200.0);
StdDraw.setPenColor(StdDraw.BLUE);
StdDraw.setPenRadius(0.0009);
//generate random points between interval of range
int t = 0;

int prevVal = 0;
int nextVal;
while(true){

nextVal = range.getRandomValue();
System.out.println(nextVal);

StdDraw.point(prevVal, nextVal);
StdDraw.line(t-1, prevVal, t, nextVal);

StdDraw.show(100);

prevVal = nextVal;
t = (t+1) % 100;
if(t == 0){
StdDraw.clear();

}
}

谢谢

最佳答案

为什么不尝试使用 sin(t) 函数调制随机信号:

long n = 0; 

double randomWeight = 0.5;

while(true) {

nextVal = range.getRandomValue();

double temp = AMPLITUDE*(randomWeight*((double)nextVal)+(1.0-randomWeight)*Math.sin(2.0*Math.PI*((double)n)*WIDTH_FACTOR));


nextVal = (long)temp;

n++;

System.out.println(nextVal);

StdDraw.point(prevVal, nextVal);
StdDraw.line(t-1, prevVal, t, nextVal);

StdDraw.show(100);

prevVal = nextVal;
t = (t+1) % 100;
if(t == 0){
StdDraw.clear();

}

想法是生成正弦波函数并向其添加一些随机噪声。您可能希望将此噪声添加到方波中。我不太了解心电图的样子,但我想它一定是由心跳决定的。

编辑:

我刚刚检查了这些信号的样子: enter image description here

在我看来,一个更准确的模型将由一个被周期性尖峰中断的相对平坦的随机信号给出:

long n = 0; 

while(true) {

nextVal = range.getRandomValue();
if(n % SPIKE_PERIOD == 0) nextVal = SPIKE_APLITUDE*nextVal;

n++;


System.out.println(nextVal);

StdDraw.point(prevVal, nextVal);
StdDraw.line(t-1, prevVal, t, nextVal);

StdDraw.show(100);

prevVal = nextVal;
t = (t+1) % 100;
if(t == 0){
StdDraw.clear();

}

关于java - 如何模拟 ECG(心电图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167879/

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