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

概述

1.不明白的公式  P5



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.用梯形公式来求

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最大幅值处,对应频率

% 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);

 

最后

以上就是稳重帽子为你收集整理的有关三种计算峰值频域的方法的全部内容,希望文章能够帮你解决有关三种计算峰值频域的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部