X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fsignal-1.1.3%2Fbesselap.m;fp=octave_packages%2Fsignal-1.1.3%2Fbesselap.m;h=e0d6890c6fa5aa7cda1bf0ec6fa1a1725f6d1949;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/signal-1.1.3/besselap.m b/octave_packages/signal-1.1.3/besselap.m new file mode 100644 index 0000000..e0d6890 --- /dev/null +++ b/octave_packages/signal-1.1.3/besselap.m @@ -0,0 +1,52 @@ +## Copyright (C) 2009 Thomas Sailer +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 3 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, see . + +## Return bessel analog filter prototype. +## +## References: +## +## http://en.wikipedia.org/wiki/Bessel_polynomials + +function [zero, pole, gain] = besselap (n) + + if (nargin>1 || nargin<1) + print_usage; + end + + ## interpret the input parameters + if (!(length(n)==1 && n == round(n) && n > 0)) + error ("besselap: filter order n must be a positive integer"); + end + + p0=1; + p1=[1 1]; + for nn=2:n; + px=(2*nn-1)*p1; + py=[p0 0 0]; + px=prepad(px,max(length(px),length(py)),0); + py=prepad(py,length(px)); + p0=p1; + p1=px+py; + endfor; + % p1 now contains the reverse bessel polynomial for n + + % scale it by replacing s->s/w0 so that the gain becomes 1 + p1=p1.*p1(length(p1)).^((length(p1)-1:-1:0)/(length(p1)-1)); + + zero=[]; + pole=roots(p1); + gain=1; + +endfunction