利用峰值位置识别FFT中的基频和非谐波
38次浏览(过去30天)
显示旧的注释
你好
我想生成我的结果,我可以类似的图像在红色
图6基于优化变分模态分解和多尺度排列熵| SpringerLink的铣削颤振特征提取|
我已经从我的噪声数据中得到了FFT,并使用命令findpeaks,我已经获得了以下内容
情节(f1, P1,“——b”,“线宽”, 1.5)%信号的频域
Fz = 60;%基频
牙= Fz;期望峰间距百分比
持有在
(pkt, lct) = findpeaks (P1, f1,“SortStr”,“下”,“NPeaks”6“MinPeakDistance”牙/ 5)
% PKT为振幅,LCT为相应频率
情节(lct, pkt的r *,“MarkerSize”, 10)
%%
轮([pkt lct '])
ans =
78 240
18 60
180年14
960年14
1050年13
480年12
你可以看到,只有一个峰是非谐波的。我想修改一下:
1)识别组[pkt,lct],哪些是60Hz分量的谐波,将每个谐波标记为谐波或非谐波。
2)绘制与一个符号的谐波和与另一个符号的非谐波。
警告:有些fft会有多个非谐波,或者所有的峰值都是谐波,所以组数据可能小于6项。
附上了代码当前状态的一张图片,但正如您可能注意到的那样,它并没有像预期的那样工作。
0评论
接受的答案
马修•诺伊
2021年10月12日
你好
试试这个
当然我不能画出光谱,因为这里没有提供
我只是让你们看看如何区分谐波和非谐波数据。
顺便说一下,数据的排序
findpeaks
不会给这里带来任何附加价值——事实上不需要;
这里我从数据开始:
轮([pkt lct '])
%轮([pkt lct '])
data = (
78 240
18 60
180年14
960年14
1050年13
12 480];
PKT = data(:,1);
LCT = data(:,2);
%谐波/非谐波群偏析
F_base = min(lct);
F_ratio = (lct./f_base);
f_residual = abs(f_ratio-round(f_ratio));
Tol = 1e-2;% 1%公差
Ind_harmo = find(f_residual <=tol);
Ind_non_harmo = find(f_residual >tol);
%谐波群
Pkt_harmo = data(ind_harmo,1);
Lct_harmo = data(ind_harmo,2);
%非谐波群
Pkt_non_harmo = data(ind_non_harmo,1);
Lct_non_harmo = data(ind_non_harmo,2);
图(1)
情节(lct_harmo pkt_harmo,“博士”lct_non_harmo pkt_non_harmo,‘* k”);
传奇(“harmo峰”,“非谐波峰”);