#data-science #signal #spectrum #data-points #prominence

find_peaks

在1D数据中查找满足条件的峰值

6个版本

0.1.5 2022年5月18日
0.1.4 2022年5月2日
0.1.3 2022年3月6日
0.1.2 2020年10月8日
0.1.1 2020年9月24日

#510 in 数学

Download history 30/week @ 2024-03-13 21/week @ 2024-03-20 45/week @ 2024-03-27 80/week @ 2024-04-03 37/week @ 2024-04-10 46/week @ 2024-04-17 124/week @ 2024-04-24 125/week @ 2024-05-01 36/week @ 2024-05-08 61/week @ 2024-05-15 30/week @ 2024-05-22 75/week @ 2024-05-29 139/week @ 2024-06-05 162/week @ 2024-06-12 91/week @ 2024-06-19 72/week @ 2024-06-26

每月下载量 495
用于 mathbox

MIT 许可证

53KB
547

描述

在数据的1D切片中查找局部最大值的筛选子集。

这里实现的功能可能与使用MATLAB的findpeaks或Python的scipy.signal.find_peaks的任何人熟悉。

该软件包中最有用的一项功能可能是通过突出度过滤峰值。此参数允许您获取在噪声数据中看起来像峰值的局部最大值子集。

可以设置的筛选条件包括

  • 突出度
  • 高度
  • 相邻数据点之间差异的绝对值
  • 峰值可能拥有的平台点数
  • 峰值之间的距离

所有参数都可以通过最小和最大界限指定。

数据切片的元素不需要是特定类型,只要它们实现了几个特性(用于克隆、减法和比较)。

示例

examples/spectrum.rs复制。

use find_peaks::PeakFinder;

use std::fs::File;
use std::io::prelude::*;

fn read_file(path: &str) -> std::io::Result<String> {
    let mut file = File::open(path)?;
    let mut contents = String::new();
    file.read_to_string(&mut contents)?;
    Ok(contents)
}

fn main() -> () {
    let data: Vec<f64> = read_file("data/spectrum.dat").expect("File not read!").as_str()
        .split_whitespace()
        .map(|x| x.parse::<f64>().unwrap())
        .collect();
    
    let mut fp = PeakFinder::new(&data);
    fp.with_min_prominence(200.);
    fp.with_min_height(0.);

    let peaks = fp.find_peaks();
    for p in peaks {
        println!("{} {}", p.middle_position(), p.height.unwrap());
    }
}

可视化结果

无运行时依赖