随笔 - MATLAB 练习:频谱分析之寻找峰值

findpeaks 用法一例

题目

给出 13 个 DNA 频谱的数据,分割出这些频谱的特征

数据 SpecData.mat 包含如下变量

  • Spcetra: 13 行 328 列矩阵,每一行代表一个 DNA 频谱
  • xAxis: 328 维向量,表示采集数据的波长位置

主要命令用法简介

findpeaks

用途

寻找峰值

本例中涉及的用法

  • [pks,locs] = findpeaks(data): 对给定数据,寻找峰值
    • pks: 所有满足条件的峰值
    • loc: 其对应的 x 坐标
  • findpeaks(data, name, value): 更改指定属性
    • MinPeakProminence: 最小峰 Prominence, 大致可以理解为最小峰面积,具体参见 Prominence
    • MinPeakDistance: 最小峰间距

代码与结果

SpecData.mat

Show code

main.mview raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
% Find peaks on given data

% @Author: Tifa
% @LastEditTime: 2021-04-12 19:56:47

load SpecData

for i = 1:13
now_y = Spectra(i, :);
[pks, loc] = findpeaks(now_y, 'MinPeakProminence', 190, 'MinPeakDistance', 5);
subplot(3, 5, i)
hold on

% Plot given data
plot(xAxis, now_y)
title(sprintf('Fig. %d', i))

% Plot peak points
plot(xAxis(loc), pks, 'ro')

% Plot range for all peaks
for x = pks
line([(x - 25) (x - 25)], [0 15000], 'Color', 'g')
line([(x + 25) (x + 25)], [0 15000], 'Color', 'g')
end

axis([200 1800 min(now_y) - 500 max(now_y) + 500])
hold off
end

主要参考资料