PhysioNet Cardiovascular Signal Toolbox 1.0.0
(3,056 bytes)
function [ulf, vlf, lf, hf, lfhf, ttlpwr] = CalcLfHfParams(PSD, F, limits,plot_on)
% [ulf, vlf, lf, hf, lfhf, ttlpwr] = CalcLfHfParams(PSD, F, limits,plot_on)
%
% OVERVIEW: Compute the frequency domain features for a given PSD and
% frequency bans limits
%
% INPUT:
% PSD - power spectral density
% F - frequency vector
% limits - frequency domain analysis limits
% plot_on -
%
% OUTPUT:
% - ulf : (ms^2) Power in the ultra low frequency range (default < 0.003 Hz)
% - vlf : (ms^2) Power in very low frequency range (default 0.003 <= vlf < 0.04 Hz)
% - lf : (ms^2) Power in low frequency range (default 0.04Hz <= lf < 0.15 Hz)
% - hf : (ms^2) Power in high frequency range (default 0.15 <= hf < 0.4 Hz)
% - lfhf : Ratio LF [ms^2]/HF [ms^2]
% - ttlpwr : (ms^2) Total spectral power (approximately <0.4 Hz)
%
% REPO:
% https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox
% ORIGINAL SOURCE AND AUTHORS:
% Main script written by Adriana N. Vest
% Dependent scripts written by various authors
% (see functions for details)
% COPYRIGHT (C) 2016
% LICENSE:
% This software is offered freely and without warranty under
% the GNU (v3 or later) public license. See license file for
% more information
%%
if nargin <3
ULF = [0 .003];
VLF = [0.003 .04];
LF = [.04 .15];
HF = [0.15 0.4];
limits = [ULF; VLF; LF; HF];
end
if nargin < 4
plot_on =1;
end
Indx_ULF = find( (limits(1,1) <= F) & (F <= limits(1,2)) );
Indx_VLF = find( (limits(2,1) <= F) & (F <= limits(2,2)) );
Indx_LF = find( (limits(3,1) <= F) & (F <= limits(3,2)) );
Indx_HF = find( (limits(4,1) <= F) & (F <= limits(4,2)) );
space = F(2)-F(1);
ulf = sum(PSD(Indx_ULF)*space) * 1e6; % convert to ms^2
vlf = sum(PSD(Indx_VLF)*space) * 1e6; % convert to ms^2
lf = sum(PSD(Indx_LF)*space) * 1e6; % convert to ms^2
hf = sum(PSD(Indx_HF)*space) * 1e6; % convert to ms^2
ttlpwr = sum([ulf vlf lf hf]);
lf_n = lf/ttlpwr; % normalized
hf_n = hf/ttlpwr;
lfhf = round(lf_n/hf_n*100)/100; % lf/hf ratio
if plot_on
figure
% plot PSD
plot(F,10*log10(PSD),'b','linewidth',2)
hold on
% plot limits on graph for lf and hf
plot([F(Indx_LF(1)) F(Indx_LF(1))],[-80 40],'k:')
hold on
plot([F(Indx_LF(end)) F(Indx_LF(end))],[-80 40],'k:')
hold on
plot([F(Indx_HF(end)) F(Indx_HF(end))],[-80 40],'k:')
% labelsc
text(0.07,30,'LF','Fontname','Times New Roman','Fontsize',10)
text(0.25,30,'HF','Fontname','Times New Roman','Fontsize',10)
%text(0.15, 35, 'Power Spectral Density','Fontname','Times New Roman','Fontsize',10)
text(0.3, -60, strcat('LF/HF=',num2str(lfhf)),'Fontname','Times New Roman','Fontsize',10)
ylabel('Normalized PSD (db/Hz)','Fontname','Times New Roman','fontsize',10)
xlabel('Frequency (Hz)','Fontname','Times New Roman','fontsize',10)
axis([0 .45 -80 40]);
box off
end % end plot
end % end function