annotate ddm_gen.m @ 4:72c011ed1977 tip

more elaborate example with non-stat. estimate explanation
author smusevic
date Tue, 30 Jul 2013 09:56:27 +0100
parents a4a7e3405062
children
rev   line source
dan@0 1 % a high-level function for computing a DTFT based DDM
dan@0 2 % (constructs the linear system of equations using distribution derivative rule and solves it via
dan@0 3 % pseudo-inverse (pinv). Use this function if non-Fourier kernels are needed or
dan@0 4 % DTFT at specific frequency rather than FFT is required for whatever reason...
dan@0 5 % no zero-padding is used internally
dan@0 6 function [gdi,r, A,b, gdi_lns, r_lns] = ddm_gen(krnls, krlns_ders, mf_ders, sig, N, tol)
dan@0 7 %generic multi-frequency distribution derivative based estimator for
dan@0 8 % non-stationary sinusoidal analysis
dan@0 9 %
dan@0 10 %
dan@0 11 % [1] Michael Betser: Sinusoidal Polynomial Estimation Using The Distribution
dan@0 12 % Derivative, in IEEE Transactions on Signal Processing, Vol.57, Nr. 12,
dan@0 13 % December 2009
dan@0 14 %
dan@0 15 % krnls: matrix of all the kernels... N x R , where R is the number of
dan@0 16 % non-static parameters to estimate and at the same time, the number
dan@0 17 % of kernels
dan@0 18 %
dan@0 19 % krlns_ders: matrix of all the kernel time derivatives... N x R , where R
dan@0 20 % is the number of non-static parameters to estimate and at the same
dan@0 21 % time, the number of kernels
dan@0 22 %
dan@0 23 % mf_ders: matrix of all the model function time derivatives... N x Q , where Q
dan@0 24 % is the number of model functions
dan@0 25 %
dan@0 26 %
dan@0 27 % sig: vector - signal, N x 1 (CAUTION: MUST be column vector!!!)
dan@0 28 %
dan@0 29 % N: odd integer - signal buffer length, ...
dan@0 30 %
dan@0 31 % For any reasonable use, Q equals R, otherwise it makes little sense.
dan@0 32 % Kernels must include the window function...
dan@0 33
dan@0 34 [A,b] = ddm_lin_sys(krnls, krlns_ders, mf_ders, sig, N);
dan@0 35
dan@0 36 % solving via pinv with provided tolerance
dan@0 37 gdi = pinv(A,tol) * b;
dan@0 38 % r = rcond(A);
dan@0 39 % [gdi_lns r_lns] = linsolve(A,b);
dan@0 40 end