yummyking 发表于 2015-5-28 19:33

为什么频谱分析和包络谱分析以后的结果是一样的


这是我们实验室采集到的轴承故障振动信号,为什么频谱图和包络谱图是一样的?

不是钱林 发表于 2015-5-29 10:06

确定用过包络谱分析了?是不是程序里的图形显示命令都是显示的FFT?

yummyking 发表于 2015-5-29 10:09

不是钱林 发表于 2015-5-29 10:06
确定用过包络谱分析了?是不是程序里的图形显示命令都是显示的FFT?

我把程序贴上来。
function hua_fft(y,fs,style,varargin)
%当style=1,画幅值谱;当style=2,画功率谱;当style=其他的,那么画幅值谱和功率谱
%对随机信号分析,功率谱才是有效的
%当style=1时,还可以多输入2个可选参数
%可选输入参数是用来控制需要查看的频率段的
%第一个是需要查看的频率段起点
%第二个是需要查看的频率段的终点
%其他style不具备可选输入参数,如果输入发生位置错误
nfft= 2^nextpow2(length(y));%找出大于y的个数的最大的2的指数值(自动计算最佳FFT步长nfft)
%nfft=1024;%人为设置FFT的步长nfft
y=y-mean(y);%去除直流分量,要不然第一个点的幅值很大
y_ft=fft(y,nfft)/length(y);%对y信号进行DFT,得到频率的幅值分布
y_p=y_ft.*conj(y_ft)/nfft;%conj()函数是求y函数的共轭复数,实数的共轭复数是他本身。相当于求模值
y_f=fs*(0:nfft/2-1)/nfft;%DFT变换后对应的频率的序列
if style==1
    if nargin==3
      plot(y_f,2*abs(y_ft(1:nfft/2)));%matlab的帮助里画FFT的方法
      %ylabel('幅值');xlabel('频率');title('信号幅值谱');
      %plot(y_f,abs(y_ft(1:nfft/2)));%论坛上画FFT的方法
    else
      f1=varargin{1};
      fn=varargin{2};
      ni=round(f1 * nfft/fs+1);
      na=round(fn * nfft/fs+1);
      plot(y_f(ni:na),abs(y_ft(ni:na)*2));
    end

elseif style==2
            plot(y_f,y_p(1:nfft/2));
            ylabel('功率谱密度');xlabel('频率');title('信号功率谱');
    else
      subplot(211);plot(y_f,2*abs(y_ft(1:nfft/2))/length(y));
      ylabel('幅值');xlabel('频率');title('信号幅值谱');
      subplot(212);plot(y_f,y_p(1:nfft/2));
      ylabel('功率谱密度');xlabel('频率');title('信号功率谱');
end
end


function hua_baol (y,fs,style,varargin)
%画包络函数是hua_baoluo的代码简化版
%输入参数要么是3个,要么是5个
%当三个的时候,和hua-fft一样
y_hht=hilbert(y);%希尔伯特变换
y_an=abs(y_hht);%包络信号
%y_an=y_an-mean(y_an);%去除直流分量
    if nargin==3
      hua_fft(y_an,fs,style);
    elseif nargin==5
      f1=varargin{1};
      f2=varargin{2};
      hua_fft(y_an,fs,style,f1,f2);
    else
      error('调用函数的输入参数数目不正确,输入参数只能是三个或者五个');
    end
end

yummyking 发表于 2015-5-29 10:10

不是钱林 发表于 2015-5-29 10:06
确定用过包络谱分析了?是不是程序里的图形显示命令都是显示的FFT?

帮我看一下,急求帮助

叮咚。。 发表于 2016-6-30 22:13

个人理解 FFT转换就像一个玻璃一样 ,从正面看是一张玻璃 ,从侧面看就只是一条线

sovereign 发表于 2016-7-1 09:04

% 包络分析(高中心频率的窄带信号分析)
% 基于:两个信号乘积的Hilbert变换取决于高频信号的Hilbert变换
clc
clear all
close all
ts = 0.001;
fs = 1/ts;
N = 200;
k = 0:N-1;
t = k*ts;
% 原始信号
f1 = 10;
f2 = 70;
% a = cos(2*pi*f1*t);       % 包络1
a = 2 + cos(2*pi*f1*t);   % 包络2
% a = 1./(1+t.^2*50);       % 包络3
m = sin(2*pi*f2*t);         % 调制信号
y = a.*m;% 信号调制
figure
subplot(241)
plot(t, a)
title('包络')
subplot(242)
plot(t, m)
title('调制信号')
subplot(243)
plot(t, y)
title('调制结果')
% 包络分析
% 结论:Hilbert变换可以有效提取包络、高频调制信号的频率等
yh = hilbert(y);
aabs = abs(yh);               % 包络的绝对值
aangle = unwrap(angle(yh));   % 包络的相位
af = diff(aangle)/2/pi;         % 包络的瞬时频率,差分代替微分计算
% NFFT = 2^nextpow2(N);
NFFT = 2^nextpow2(1024*4);      % 改善栅栏效应
f = fs*linspace(0,1,NFFT);
YH = fft(yh, NFFT)/N;         % Hilbert变换复信号的频谱
A = fft(aabs, NFFT)/N;          % 包络的频谱
subplot(245)
plot(t, aabs, t, a, '.')
title('包络的绝对值')
legend('包络分析结果', '真实包络')
subplot(246)
plot(t, aangle)
title('调制信号的相位')
subplot(247)
plot(t(1:end-1), af*fs)
title('调制信号的瞬时频率')
subplot(244)
plot(f,abs(YH))
title('原始信号的Hilbert谱')
xlabel('频率f (Hz)')
ylabel('|YH(f)|')
subplot(248)
plot(f,abs(A))
title('包络的频谱')
xlabel('频率f (Hz)')
ylabel('|A(f)|')
希望能给你带来帮助!
页: [1]
查看完整版本: 为什么频谱分析和包络谱分析以后的结果是一样的