【发布时间】:2020-07-04 06:26:13
【问题描述】:
有一个包含 10,000 条记录计数的时间压力谱。
以 10e-5 到 1HZ 的随机频率记录时间戳压力。
一开始我试图找到:
- 局部峰谷,波动高于某个阈值(例如 0.6 个单位)。
- 只是一种极其简单的方法,可以滤除一些噪音并记录压力的显着变化。
我在网上搜索,常见的方法是去噪并找到局部最大值和最小值。
另一方面,我以以下方式(在 Javascript 中)实现的遗留代码。
function filtSpectrum(res, minor){
var filted = []; //array of filted minor cycles
var lookformax = 1; // 1 for look for max, 0 for look for min
var currentstress;
var mx_index = 0;
var mn_index = 0;
for (var i=0; i < arrayLength; i++){
currentstress = res[i].psi;
if(currentstress > res[mx_index].psi){
mx_index = i;
}
if (currentstress < res[mn_index].psi){
mn_index = i;
}
if(lookformax === 1){
if(currentstress < res[mx_index].psi - minor){
filted.push(res[mx_index]);
mn_index = i;
lookformax =0;
}
}else if (currentstress > res[mn_index].psi + minor){
filted.push(res[mn_index]);
mx_index = i;
lookformax = 1;
}
}
return filted;
}
现在频谱由峰-谷类型的点表示。
但是如果图片中间有一些区域是平坦。过度简化忽略了平坦区域,并歪曲了峰谷的斜率/(或频率)。
是否有一些简单的算法可以将原始信号转换为 peak-flat-valley 类型的表示?
我对 DSP 比较陌生。提前感谢您的任何建议和反馈。
【问题讨论】:
-
你能在这张图中画出你想要的吗?
-
@appleapple 谢谢,问题中添加了所需的图表。
-
您需要更详细地定义 flat 的含义,例如,为什么开头部分不被视为 flat (或者为什么会这样偏离实际值)?为什么开始部分和您现在拥有的部分没有组合为单个flat?公寓允许一些坡度吗?
-
想一想当你想要匹配对数曲线时会发生什么也可能会有所帮助?罪恶曲线?方波?
-
@appleapple 谢谢。开始部分将以同样的方式处理。抱歉,我只标记了中间区域以供说明。理想情况下,公寓应该是平坦的,没有坡度。只有峰值和谷点(以及可能的平坦点)是必需的信息。点之间的线仅用于说明目的。对不起,我在图表中用直线连接了点,使它看起来像曲线拟合。
标签: javascript c++ algorithm signal-processing data-processing