在一个向量中计算“聚合”峰值的数量?

4次浏览(最近30天)
我有一些数据在matlab的向量中叫做 电压 从声音传感器采集。当阴谋针对 时间 向量包含这些值被记录的每一个时刻,我得到了下图:
正如你所看到的,数据是“尖峰”的,但有一些“尖峰” 明显的比周围更大更引人注目的 这里我能数出10个。传感器记录了附近蜂鸣器的声音——当蜂鸣器静音时,电压保持在(大约)中间水平(2.5V),但当蜂鸣器嗡嗡作响时,电压跳到了5V,然后又跳到了0V,然后又跳回来,导致这些声音 较大的峰值 .这意味着蜂鸣器响了10次。
我想数一下这些较大的尖刺的数量这样我就能知道蜂鸣器响了多少次。
  1. 我的第一个想法是设置一些任意的阈值,比如5V,然后做一个线性搜索电压矢量来检查有多少样本达到5V,但有许多样本在同一峰值内达到5V,所以这将是多计的。
  2. 我也试着用findpeaks函数,不幸的是,它也计算局部最大值,即使在2.5V左右的噪声区域,蜂鸣器应该是静音的,也会返回许多误报。
有什么好办法吗?我正在努力思考用什么数学方法来分析这个问题。我已附上 .mat 包含 电压 而且 时间 向量。任何帮助都是感激的。谢谢!

接受的答案

明星黾
明星黾 2022年7月23日
我不确定你想要什么结果。
在这里, findpeaks 发现 21 不同的峰值(及其位置)
LD =负载(“buzzerData.mat”);
time = LD.time;
电压= LD.voltage;
[pks,locs] = findpeaks(电压,“MinPeakProminence”, 4.5);
MDL = mean(diff(locs));
数字
情节(时间、电压)
持有
情节(时间(loc),“^ r”
持有
包含(“时间”
ylabel (“电压”
ylim ([1 - 6])
数字
直方图(diff (loc), 50)
柱状图 是可选的,并简单地看看有什么不同 “loc” 值是聚类的。
“时间” 矢量具有不规则的采样间隔,因此不可能对这些数据进行任何类型的信号处理,因为它们目前存在。一种处理方法是使用 重新取样 功能,然而这导致奇怪 “电压” 值。然而,如果你想使用它,一种方法是:
Fs = 1/mean(diff(time));
[volagers,timers] = resample(电压,时间,Fs);
近似采样频率(由各参数的差值的平均值计算而得) “时间” 向量)大约是 83.9925 Hz(假设 “时间” 单位为秒)。
这在 R2022a ,并应产生可靠的结果 R2018a
2的评论

登录评论。

更多答案(1)

骑自行车的人
骑自行车的人 2022年7月23日
我是绝对肯定的 我是这方面的专家,但我认为可能会有帮助的是把你的信号通过一个 低通滤波器 .(你需要信号处理工具箱。)
1评论
Shovnik保罗
Shovnik保罗 2022年7月24日
谢谢你的回复。我实际上也想过做一些这样的事情,以平滑尖峰区域-我从控制系统工具箱中使用了1/(1 + T*s)形式的一阶滤波器,通过改变T -它没有多大帮助,但我也不是信号处理的专家-我一定会尝试您提供的链接中的功能。谢谢。

登录评论。

s manbetx 845


释放

R2018a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!

翻译的