我是靠谱客的博主 稳重帽子,这篇文章主要介绍有关三种计算峰值频域的方法,现在分享给大家,希望可以做个参考。

1.不明白的公式  P5

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function [fac]=fre_statisti11cal_compute(f,y) %%对频域信号进行统计分析 %%2008年10月10日 fre_line_num=max(size(y)); p1 = mean(y); % 均值频率 特征1,反映频域振动能量的大小; p2 = sum((y-p1).^2)/fre_line_num; % 标准差 特征2,表示频谱的分散或者集中程度; p3 = sum((y-p1).^3)/(fre_line_num*sqrt(p2^3)); % 特征3,表示频谱的分散或者集中程度; p4 = sum((y-p1).^4)/(fre_line_num*p2^2); % 特征4,表示频谱的分散或者集中程度; meanf = sum(f.*y)/sum(y); p5 = meanf; % 频率中心 特征5,反映主频带位置的变化; sigma = sqrt(sum((f-meanf).^2.*y)/fre_line_num); p6 = sigma; % 特征6,表示频谱的分散或者集中程度; p7 = sqrt(sum(f.^2.*y)/sum(y)); % 均方根频率 特征7,反映主频带位置的变化; p8 = sqrt(sum(f.^4.*y)/sum(f.^2.*y)); % 特征8,反映主频带位置的变化; p9 = sum(f.^2.*y)/sqrt(sum(y)*sum(f.^4.*y)); % 特征9,反映主频带位置的变化; p10 = sigma/meanf; % 特征10,表示频谱的分散或者集中程度; p11 = sum((f-meanf).^3.*y)/(sigma.^3*fre_line_num); % 特征11,表示频谱的分散或者集中程度; p12 = sum((f-meanf).^4.*y)/(sigma.^4*fre_line_num); % 特征12,表示频谱的分散或者集中程度; p13 = sum(sqrt(abs(f-meanf)).*y)/(sqrt(sigma)*fre_line_num); % 特征13,表示频谱的分散或者集中程度; fac=[p1;p2;p3;p4;p5;p6;p7;p8;p9;p10;p11;p12;p13]; end

2.用梯形公式来求

复制代码
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
30
31
32
33
34
function [MNF,MDF,AP] = FrenquencyFeatures(data) %能量 FFT=abs(fft(data)); AP=sum(FFT.^2/256);%先将每个fft中值平方之后再除256 %平均功率 fs=1000; [L,W]=size(data);%读取出date中L行W列 for i=1:W a=xcorr(data(:,i),'unbiased');%求功率谱方法的一种,相关函数法 AFFT=abs(fft(a)); PSD=10*log10(AFFT);%功率谱 df=fs/L; p=(sum(AFFT(1:L/2-1))+sum(AFFT(1:L/2)))/2.*df; pf=(sum(AFFT(1:L/2-1).*(1:L/2-1)'.*df)+sum(AFFT(1:L/2).*(1:L/2)'.*df))/2*df; MNF(i)=pf/p; % f1=(0:L-1)*fs/L; % plot(f1(1:L/2),c(1:L/2)) % xlabel('频率/Hz');ylabel('功率谱/dB'); % title('平均功率谱图'); %中值频率 N1=1;pp1=0; while abs(pp1-p/2)>(AFFT(N1)+AFFT(N1+1))/2*df pp1=pp1+(AFFT(N1)+AFFT(N1+1))/2*df; N1=N1+1; end n_1=(N1+N1+1)/2; MDF(i)=df*n_1; end end

3.做fft最大幅值处,对应频率

复制代码
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
% clear;clc;close all % load('C:UsersMr.liDesktopfs40000.TXT') Fs=4000; % 采集频率 T=1/Fs; % 采集时间间隔 y=cha1; N=length(y); % 采集信号的长度 t=(0:1:N-1)*T; % 定义整个采集时间点 t=t'; % 转置成列向量 % 绘制时域信号 figure plot(t,y) xlabel('时间') ylabel('信号值') title('时域信号') % fft变换 Y=fft(y); % Y为fft变换结果,复数向量 Y=Y(1:N/2+1); % 只看变换结果的一半即可 A=abs(Y); % 复数的幅值(模) f=(0:1:N/2)*Fs/N; % 生成频率范围,也叫频率分辨率 f=f'; % 转置成列向量 % 幅值修正 A_adj=zeros(N/2+1,1); A_adj(1)=A(1)/N; % 频率为0的位置 A_adj(end)=A(end)/N; % 频率为Fs/2的位置 A_adj(2:end-1)=2*A(2:end-1)/N;%2:end位置 % 绘制频率幅值图 figure subplot(2,1,1) plot(f,A_adj) xlabel('频率 (Hz)') ylabel('幅值 (修正后)') title('FFT变换幅值图') grid on % 绘制频谱相位图 subplot(2,1,2) phase_angle=angle(Y); % angle函数的返回结果为弧度 phase_angle=rad2deg(phase_angle); plot(f,phase_angle) xlabel('频率 (Hz)') ylabel('相位角 (degree)') title('FFT变换相位图') grid on %峰值频率Peak frequency [M,I]=max(A_adj); Peak_frequency=f(I);

 

最后

以上就是稳重帽子最近收集整理的关于有关三种计算峰值频域的方法的全部内容,更多相关有关三种计算峰值频域内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部