在一个向量中计算“聚合”峰值的数量?
4次浏览(最近30天)
显示旧的注释
我有一些数据在matlab的向量中叫做
电压
从声音传感器采集。当阴谋针对
时间
向量包含这些值被记录的每一个时刻,我得到了下图:
正如你所看到的,数据是“尖峰”的,但有一些“尖峰”
明显的比周围更大更引人注目的
这里我能数出10个。传感器记录了附近蜂鸣器的声音——当蜂鸣器静音时,电压保持在(大约)中间水平(2.5V),但当蜂鸣器嗡嗡作响时,电压跳到了5V,然后又跳到了0V,然后又跳回来,导致这些声音
较大的峰值
.这意味着蜂鸣器响了10次。
我想数一下这些较大的尖刺的数量这样我就能知道蜂鸣器响了多少次。
- 我的第一个想法是设置一些任意的阈值,比如5V,然后做一个线性搜索的电压矢量来检查有多少样本达到5V,但有许多样本在同一峰值内达到5V,所以这将是多计的。
- 我也试着用findpeaks函数,不幸的是,它也计算局部最大值,即使在2.5V左右的噪声区域,蜂鸣器应该是静音的,也会返回许多误报。
有什么好办法吗?我正在努力思考用什么数学方法来分析这个问题。我已附上
.mat
包含
电压
而且
时间
向量。任何帮助都是感激的。谢谢!
0评论
接受的答案
明星黾
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)
的
“时间”
矢量具有不规则的采样间隔,因此不可能对这些数据进行任何类型的信号处理,因为它们目前存在。一种处理方法是使用
重新取样
功能,然而这导致奇怪
“电压”
值。然而,如果你想使用它,一种方法是:
Fs = 1/mean(diff(time));
[volagers,timers] = resample(电压,时间,Fs);
近似采样频率(由各参数的差值的平均值计算而得)
“时间”
向量)大约是
83.9925
Hz(假设
“时间”
单位为秒)。
这在
R2022a
,并应产生可靠的结果
R2018a
.
.