原创 包络谱是这样做的吗?

2011-6-14 15:17 4032 5 5 分类: 测试测量

http://www.chinavib.com/forum/thread-20636-1-72.html

 

包络谱是不是经过hilbert变换后,再取模啊?
------------------------

这么做、这么理解基本没有问题。
-------------------------
时域包络还是频域包络?目的是什么?
-------------------------
我做的是一个倒双谱的图,因为峰值勉强可以看出来,但是不是很明显,所以想做一个包络看看,这样就应该算是时域的包络,希望大家能够指教!
------------------------
国外机械故障诊断上所说的包络分析
概念和你所说的不大一样
好像要利用到高频共振的特点
----------------------
我觉得主要目的还是为了解调。用在齿轮或者轴承故障诊断上。传统包络先是把故障信号进行带通滤波,之后:

y=hilbert(da) %da是滤波后的信号
y=abs(y);
nfft=1024;      %点数
p=abs(fft(y,nfft));
plot((0:nfft/2-1)/nfft*fs,p(1:nfft/2)); %fs是采样频率

我觉得应该属于频域的吧
----------------------
----------------------
 
一个实信号x(t)的Hilbert变换定义
x1(t)=(/3。14159t)*x(t)=(1/3.14159)f(从-无穷到+无穷积分)x(T)/(t-T)dT
于是得到x(t)的解析信号
g(t)=x(t)+x1(t)j
g(t)的幅值
A(t)=根号下[x(t)*x(t)+x1(t)*x1(t)]
怎么编A(t)啊
第一次接触这东西啊啊  有些东西不会打  谁帮帮我 要用MATLAB的
另外 请教大哥大姐  包络的含义是什么 
------------------------------
附件中的图就是三次样条插值法得到的包络线,有过冲和欠冲现象。绿色线为上包络线,红色线为下包络线。包络线作用就是用一些插值算法将信号的局部极大值和局部极小值分别连接起来。
59843_1247224535TEO9.jpg
-----------------------------
在matlab中直接应用hilbert(x(t)),就会得到信号x(t)的解析信号,然后对这个解析信号进行求绝对值,就会得到信号x(t)的包络!
--------------------
====================
 
 
EMD之包络线总结
首先我要说这个论坛真的很不错,高手云集,让我这个菜鸟也对EMD有了一定的认识。
我从众多的帖子里搜集到很多关于EMD包络线的资料,在这里想与大家分享一下,可能有的地方不是很准确,请各位版主多多批评指正。

大概有三种方法
1、在 emddec.m 里(具体在哪个帖子忘记了),求包络线(具体见关于某版本的EMD分解的疑问里的附件);
2、利用函数envelope_s(见下面附件),方法和1类似,但在有些信号中有区别(见附件),至于这些区别,我还没有
      参透;
3、利用emd.m里自带的函数extr(关于emd.m请到http://free.ys168.com/?zhlong下载)

三种方法的比较
通过图形可知,extr函数形成的包络谱效果最好。
----------------------------
==============================
 
如何绘出多条抛射曲线以及它们的包络线?

    抛射物体的运动可描述为平面上一个动点的轨迹,即抛射曲线,其参数方程为

tg8.ht31.gif

其中g是重力加速度,动点初始速度为v0,发射角度为 tg8.ht32.gif

当发射角度在区间 tg8.ht33.gif 内变化时,不同发射角便形成不同曲线。由

tg8.ht34.gif

解之,得弹落点所对应的参数值

tg8.ht35.gif

所以,对发射角 tg8.ht36.gif ,参数 t的变化范围为[0t0]。为了简化问题,取v0 = 1下面程序段可绘制曲线簇中的n-2条曲线

n=input(input  n:’)             输入数据n,确定所绘曲线簇曲线数

alpha=(2n-1)*pi/(2*n)              确定不同曲线所对应的发射角

for  k=1n-2                        开始计算n-2条曲线上的离散点数据

a=alpha(k);                        选取 tg9.ht37.gif 的值

  v1=cos(a)v2=sin(a);                      计算初始速度分量

  t0=v2/4.9

  t=(016)*t0/16                             确定参数值

  x(k,:)=v1*ty(k,:)=v2*t-4.9*t.^2 确定曲线上离散点坐标数据

end

plot(x'y')                            同时绘出曲线簇中n-2条曲线

 

运行上面程序,输入 n = 20 则可以绘出图3-3中的18条曲线。

文本框:


  3-3 不同发射角形成的抛射线簇

不同发射角所形成的抛射线构成一曲线簇,如果存在一条曲线L,曲线簇中每一曲线都与L相切,则称L为该曲线簇的包络。对于参数方程,曲线族的包络曲线由

tg9.ht39.gif

消去参变量 tg9.ht40.gif 而得到。在上面抛射线族的包络曲线中

tg9.ht41.gif

tg9.ht42.gif 

tg9.ht43.gif

tg9.ht44.gif 。求解得

tg10.h45.gif

代入曲线族的参数方程,便得包络曲线的参数方程为

tg10.h46.gif

下面程序段将绘制出曲线簇的包络曲线(又称为安全抛物线)。

    g=9.8;

t=1/g:.001:sqrt(2)/g;

x=sqrt(t.^2-1/g^2);

y=1/g-.5*g*t.^2;
plot(x,y)

文本框:

3-4  曲线簇及其包络

===================================
===================================
一种有效的包络线算法

http://www.chinavib.com/forum/thread-32967-1-1.html

 

代码:

function [up,down] = envelope(x,y,interpMethod)

%ENVELOPE gets the data of upper and down envelope of the known input (x,y).
%
%   Input parameters:
%    x               the abscissa of the given data
%    y               the ordinate of the given data
%    interpMethod    the interpolation method
%
%   Output parameters:
%    up      the upper envelope, which has the same length as x.
%    down    the down envelope, which has the same length as x.
%
%   See also DIFF INTERP1

%   Designed by: Lei Wang, <WangLeiBox@hotmail.com>, 11-Mar-2003.
%   Last Revision: 21-Mar-2003.
%   Dept. Mechanical & Aerospace Engineering, NC State University.
% $Revision: 1.1 $  $Date: 3/21/2003 10:33 AM $

if length(x) ~= length(y)
    error('Two input data should have the same length.');
end

if (nargin < 2)|(nargin > 3),
error('Please see help for INPUT DATA.');
elseif (nargin == 2)
    interpMethod = 'linear';
end


   
% Find the extreme maxim values
% and the corresponding indexes
%----------------------------------------------------
extrMaxValue = y(find(diff(sign(diff(y)))==-2)+1);
extrMaxIndex =   find(diff(sign(diff(y)))==-2)+1;



% Find the extreme minim values
% and the corresponding indexes
%----------------------------------------------------
extrMinValue = y(find(diff(sign(diff(y)))==+2)+1);
extrMinIndex =   find(diff(sign(diff(y)))==+2)+1;



up = extrMaxValue;
up_x = x(extrMaxIndex);

down = extrMinValue;
down_x = x(extrMinIndex);



% Interpolation of the upper/down envelope data
%----------------------------------------------------
up = interp1(up_x,up,x,interpMethod);
down = interp1(down_x,down,x,interpMethod);

使用例子:
代码:%DEMOENVELOPE shows how to use function envelope to obtain the
%   upper/down envelope of a given data and plot the envelope.
%
%   See also EVELOPE

%   Designed by: Lei Wang, <WangLeiBox@hotmail.com>, 11-Mar-2003.
%   Last Revision: 21-Mar-2003.
%   Dept. Mechanical & Aerospace Engineering, NC State University.
% $Revision: 1.1 $  $Date: 3/21/2003 10:38 AM $

clc;

% Load a signal waveform
%--------------------------------------------
load data.txt data;
t = data(:,1); % time series
y = data(:,2); % signal data
figure(1);
plot(t,y,'b-');
title('The original signal waveform','FontSize',18);



% Call function envelope to
% obtain the envelope data
%--------------------------------------------
[up,down] = envelope(t,y,'linear');



% Show the envelope alone
%--------------------------------------------
figure(2)
plot(t,up); hold on;
plot(t,down);
title('The envelope of the given signal data','FontSize',18);
hold off;



% Show the original signal and its envelope
%--------------------------------------------
figure(3)
plot(t,y,'g-'); hold on;
plot(t,up,'r-.');
plot(t,down,'r-.');
title('The envelope vs the given signal data','FontSize',18);
hold off;
附件

-------------------------------

这个方法事实上和EMD算法中的迭代求出各IMF时所用的包络是一致的,不过我对包络的理解是先把复杂信号通过EMD分解得到单分量信号,然后再把其频率部分(无论用解析信号的方法还是别的什么方法)分离出来,剩下的就是包络。happy你提供的程序是对任意信号(无论是复杂信号还是单分量信号)直接通过极值点求出它的样条包络,事实上,包络这个词用在此是不准确的,数学上的包络前提条件是要有一个给定的函数集,然后在里面求出满足某个条件的一个函数,这才是包络

----eghit

===============================

================================

关于包络概念的理解

http://www.chinavib.com/forum/thread-33208-1-1.html

 

看到大家经常提到"包络:这个概念, 好象SKF 有"加速度包络" 更让人摸不着头脑,希望有高人指点!谢谢!
------------------------
加速度包络是SKF的专利技术,
------------------------
加速度包络是一种信号处理技术,这种技术能够检测到很弱的冲击故障信号,比如轴承的早期损伤。它可以将非常弱的冲击信号经过一系列的放大、滤波等处理转变成高频的振动信号。
------------------------
包络解调原理:故障所引起的低频(通常是数百HZ以内)冲击脉冲激起了高频(数十倍于冲击频率)共振波形,对它进行包络、检波、低通滤波(即解调),会获得一个对应于低频冲击的而又放大并展宽的共振解调波形。
59843_1247225254v208.jpg
 
-------------------
包络解调的优点:
   1)剔除了低频振动干扰
   2)含有未知的故障信息(即S/N↑)
对于共振解调波后续处理方法不同,可分为SPM及IFD法
   1)SPM法:
     它是应用共振解调波的幅值来进行诊断。共振解调波通过峰值检波、平均、保持、测得冲击量值SV。
     再用一经验公式获得均一化冲击量值
         DBN=20log*2000*SV/n*Do.6
   2)   IFD法

    该法既应用共振解调波的幅值又利用它的频率信息,即对共振解调波进行FFT后做频谱分析,寻找上节中提到的轴承各元件故障对应的频率。


包络都是针对加速度说的,加速度才存在高频。
我不知道SKF有没有专利,只知道现在不止一家有高频包络,只是各家的包络值没有统一的标准、定义,测出来的数据也不一样。
加速度高频包络值对轴承齿轮的早期磨损等故障敏感,判断准确。
------------------------
包络分析的关键词:高频、共振、解调。
---------------------
共振解调法,也称包络检波频谱分析法,包络检波实现的方法有检波滤波,Hilbert变换法。前者没有接触过,但后者我了解一点,据我所知,基于 Hilbert 变换的包络谱分析,好像对滚动轴承的裂纹故障并不敏感,很难从其图谱中找到与裂纹故障相对应的特征频率。而且共振区的中心频率很难找到,选取合适的带通滤波器,是应用共振解调法成功的关键
-----------------------
我想请教大家,现在处理齿轮或者轴承故障 一些最新的处理方法是什么?我看了很多文献,都是和包络谱相关,除了解调 就没有更新的吗?
-----------------
加速度包络 SPM
-----------------
什么是包络频谱.doc (73 KB)
下载次数: 166
2008-5-29 09:39
----------------
==================
==================
如何在matlab中实现包络分析
 
如何在matlab中实现包络分析!大虾们尽量说的具体点!
------------------
普通情况下(针对不对称函数),可使用hilbert方法,如包络谱=abs(hilbert(x));求的是上包络,针对不对称函数可用,针对对称函数频率翻倍
-------------------
====================
====================
小波与hilbert变换进行信号包络谱分析
 
这是我自己搞的一个仿真信号用小波与hilbert变换进行信号包络谱分析的程序
大家看一下,给点意见啊。我是结合书上的编的,有几个地方一直不懂,
1,许多论文上说hilbert变换是这样进行的:原始信号X(t)带通滤波,进行hilbert变换得到x^(t),作为虚部,     然后用w(t)=x(t)+jx^(t)作为解析信号。包络谱的求法是:a(t)=X(t)和x^(t)的平方和再开放.但是这个程序里面怎么没有这个功能??
2,plot((0:nfft/2-1)/nfft*fs,p(1:nfft/2));这句程序有点难懂,麻烦哪位编程高手解释一下
t=0:0.005:1*pi;
fs=10000;
s=4*sin(2*200*pi*t).*(sin(2*4500*pi*t))+25*(sin(2*4500*pi*t));
subplot(411);plot(t,s)
[c,l]=wavedec(s,1,'db10');
d1=wrcoef('d',c,l,'db10');
a1=0;
subplot(412);plot(d1);title('重构高频信号');
y=hilbert(d1);
y1=abs(y);
ydata=y-mean(y);
nfft=1024;
p=abs(fft(y1,nfft));
figure(2);
plot((0:nfft/2-1)/nfft*fs,p(1:nfft/2));
xlabel('频率');
ylabel('功率谱');
--------------------------
1、你的程序中小波分解实现了上面说的滤波功能,而hilbert这个函数就是求上面说的w(t).
2、这个可以看一下有关“如何正确得到Fourier分析幅值”的帖子。
--------------------------
我觉得程序应该是这样的


s=data;
plot(s);
hold on
[c,l]=wavedec(s,2,'db10');
d1=wrcoef('d',c,l,'db10');
y=hilbert(d1);
y1=imag(y).^2;
w=sqrt(d1.^2+y1)
y2=abs(w);
plot(w,'r-')
figure(2);
plot(y2);
p=abs(fft(y2,10000));
figure(3);
plot(p);
xlabel('频率');
ylabel('功率谱');


不知大家有何看法??
是对还是错??
--------------------------
 
     引用:
原帖由 wxk8000 于 2008-1-9 16:05 发表
原始信号X(t)带通滤波,进行hilbert变换得到x^(t),作为虚部,
然后用w(t)=x(t)+jx^(t)作为解析信号。包络谱的求法是:a(t)=X(t)和x^(t)的平方和再开方。
楼主程序中的这两语句
y=hilbert(d1);
y1=abs(y);
便是完成把滤波后的信号进行hilbert变换得到x^(t),作为虚部,然后用w(t)=x(t)+jx^(t)作为解析信号。包络谱的求法是:a(t)=X(t)和x^(t)的平方和再开方。
     引用:
原帖由 wxk8000 于 2008-1-9 16:05 发表
plot((0:nfft/2-1)/nfft*fs,p(1:nfft/2));
((0:nfft/2-1)/nfft*fs是计算FFT后频谱各谱线对应的(正)频率值,而p(1:nfft/2)是包络谱的谱线值。
----------------------------
刚才看了下matlab的帮助文件,谈谈我的看法:
1、matlab中的y=hilbert(x)命令虽然字面上是hilbert变换,实际上得到的复数序列y的虚部才是真正的原信号x的hilbert变换,实部就是原信号x,所以经y=hilbert(x)得到的就是原序列的解析信号,没必要再求其虚部等等。帮助文件原文:
Description:x=hilbert(xr) returns a complex helical sequence, sometimes called the analytic signal, from a real data sequence. The analytic signal x = xr + i*xi has a real part, xr, which is the original data, and an imaginary part, xi, which contains the Hilbert transform.
2、本人对于包络谱的算法也一直弄不明白,但看到楼上几位的说法:“用w(t)=x(t)+jx^(t)作为解析信号。包络谱的求法是:a(t)=X(t)和x^(t)的平方和再开方。”,感觉还是有问题。如果只是求解析信号的实部和虚部平方和,得到的仍然只是时域的变换信号,又谈的上什么“谱”的概念呢?我的理解是:对解析信号再做FFT得到的也许才是包络谱(实际上wxk8000兄的程序里已经这样做了)。不过这样做和直接对原信号做FFT有何区别,本人也不清楚,期待高人指点。
---------------------------
我是初学者,看大家都很牛的样子,有点基本的问题想讨教,边际谱和功率谱是一回事吗?还有能量谱这些都有什么区别,有点晕了?
--------------------
边际谱和功率谱是不一样的,边际谱是Hilbert变换以后再求得的,功率谱一般是FFT求得
--------------------

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条