www.gusucode.com > 局部均值分解源代码 难得的matlab程序代码源码 > lmd/hua_baoluo.m

    %画信号的包络谱和包络功率谱(用matlab的例子画)
function hua_baoluo(y,fs,style,varargin)
%style=1,画包络谱;
%style=2,画包络功率谱;
%style=其他,画包络谱和包络功率谱
%varargin=N,这个是用来设置需要在图中看到的点数,从起点开始到第N个点的包络谱
y_hht=hilbert(y);%希尔伯特变换
y_an=abs(y_hht);%包络信号
y_an=y_an-mean(y_an);%去除直流分量
y_an_nfft= 2^nextpow2(length(y_an));%包络的DFT的采样点数
y_an_ft=fft(y_an,y_an_nfft);%包络的DFT
y_an_f=fs*(0:y_an_nfft/2-1)/y_an_nfft;%包络的频率序列
y_an_p=y_an_ft.*conj(y_an_ft)/y_an_nfft;

c=2*abs(y_an_ft(1:y_an_nfft/2))/length(y_an);
d=y_an_p(1:y_an_nfft/2);
if(nargin==4)
    N=varargin{1};
else
    N=length(c);
end

if style==1
%    c=2*abs(y_an_ft(1:y_an_nfft/2))/length(y_an);
%    N=50;
%    N=length(c);
    plot(y_an_f(1:N),c(1:N));
    %plot(y_an_f,2*abs(y_an_ft(1:y_an_nfft/2))/length(y_an));
    %ylabel('包络幅值');xlabel('频率');title('包络谱');
elseif style==2
    plot(y_an_f(1:N),d(1:N));  
    %plot(y_an_f,y_an_p(1:y_an_nfft/2));
    %ylabel('功率谱密度');xlabel('频率');title('包络功率谱');
else 
    subplot(211);
%    c=2*abs(y_an_ft(1:y_an_nfft/2))/length(y_an);
%    N=50;
    plot(y_an_f(1:N),c(1:N));    
    ylabel('包络幅值');xlabel('频率');title('包络谱');
%    d=y_an_p(1:y_an_nfft/2);
    subplot(212);
    plot(y_an_f(1:N),d(1:N));    
    ylabel('功率谱密度');xlabel('频率');title('包络功率谱');
% else
%     subplot(211);plot(y_an_f,2*abs(y_an_ft(1:y_an_nfft/2))/length(y_an));    
%     ylabel('包络幅值');xlabel('频率');title('包络谱');
%     subplot(212);plot(y_an_f,y_an_p(1:y_an_nfft/2));    
%     ylabel('功率谱密度');xlabel('频率');title('包络功率谱');
end
end