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