利用峰值位置识别FFT中的基频和非谐波

38次浏览(过去30天)
你好
我已经从我的噪声数据中得到了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项。
附上了代码当前状态的一张图片,但正如您可能注意到的那样,它并没有像预期的那样工作。 不正确的输出需要解决

接受的答案

马修•诺伊
马修•诺伊 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峰”“非谐波峰”);
2的评论
马修•诺伊
马修•诺伊 2021年10月13日
你好
我认为你可以在之后进行排序,但如果你在代码中需要它,在哪里排序并不重要

登录评论。

更多答案(0)

社区寻宝

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

开始狩猎!