Mercurial > hg > ltpda
diff m-toolbox/classes/+utils/@math/welchscale.m @ 43:bc767aaa99a8
CVS Update
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Tue, 06 Dec 2011 11:09:25 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/+utils/@math/welchscale.m Tue Dec 06 11:09:25 2011 +0100 @@ -0,0 +1,54 @@ +% WELCHSCALE scales the output of welch to be in the required units +% +% $Id: welchscale.m,v 1.1 2011/12/01 09:41:22 hewitson Exp $ +% + +function [yy, dyy, info] = welchscale(xx, dxx, win, fs, norm, inunits) + + nfft = length(win); + S1 = sum(win); + S2 = sum(win.^2); + enbw = fs * S2 / (S1*S1); + + if isempty(norm) + norm = 'None'; + end + switch lower(norm) + case 'asd' + yy = sqrt(xx); + if isempty(dxx) + dyy = dxx; + else + dyy = 1./2./sqrt(xx) .* dxx; + end + info.units = inunits ./ unit('Hz^0.5'); + case 'psd' + yy = xx; + dyy = dxx; + info.units = inunits.^2/unit('Hz'); + case 'as' + yy = sqrt(xx * enbw); + if isempty(dxx) + dyy = dxx; + else + dyy = 1./2./sqrt(xx) .* dxx * enbw; + end + info.units = inunits; + case 'ps' + yy = xx * enbw; + dyy = dxx * enbw; + info.units = inunits.^2; + case 'none' + yy = xx; + dyy = dxx; + info.units = inunits; + otherwise + error('Unknown normalisation'); + end + + info.nfft = nfft; + info.enbw = enbw; + info.norm = norm; + +end +