|
| 1 | +function bpck = bpc_skern(n,k,varargin) |
| 2 | +% BPC_KERN |
| 3 | +% full interface: bpc_kern(n,type,rho) |
| 4 | +% Generating Function for Binomial Polynomial Coefficients |
| 5 | +% of any real non-zero order n |
| 6 | + |
| 7 | + |
| 8 | +% Generates Pascal-Triangle's Binomial Coefficients |
| 9 | +% for integer order n |
| 10 | + |
| 11 | +% type = 0 |
| 12 | +% Coefficients of the normalized Binomial Transform |
| 13 | +% - useful in denominator polynomials of bilinear transform from s2z |
| 14 | +% type = 1 |
| 15 | +% Coefficients of the normalized Inverse Binomial Transform |
| 16 | +% - useful in numerator polynomials of bilinear transform from s2z |
| 17 | +% Damping factor inclusion for Somefun Filters |
| 18 | +% - useful for coefficients of somefun filters. |
| 19 | + |
| 20 | +assert(nargin > 0 && nargin < 5, "min of 1, max of 4 arguments") |
| 21 | +if nargin == 2 |
| 22 | + type = 0; % 0 - default bin, 1 - bin. inverse |
| 23 | + rho = 1; % default damping factor |
| 24 | +elseif nargin == 3 |
| 25 | + type = varargin{1}; |
| 26 | + rho = 1; % default damping factor |
| 27 | +elseif nargin > 3 |
| 28 | + type = varargin{1}; |
| 29 | + rho = varargin{2}; % default damping factor |
| 30 | +end |
| 31 | +% input test |
| 32 | +assert(n > 0, "should be a positive natural number "); |
| 33 | +% we set the limit of n as (2^16) which is a big positive number |
| 34 | +% for the sake of safety and repeatability |
| 35 | +% with respect to computer numerical constraints |
| 36 | +assert(n < 65536, "must not exceed the system's maximum integer"); |
| 37 | + |
| 38 | +assert (k <= n && k >= 0, "k must be within limits"); |
| 39 | + |
| 40 | +% initialize a vector of ones with size (n+1) |
| 41 | +bpck = 1; |
| 42 | + |
| 43 | +flag = 0; % is it even or odd |
| 44 | +% compute symmetry stop point |
| 45 | +if mod(n,2) == 0 |
| 46 | + % if even |
| 47 | + ns = n/2; |
| 48 | + flag = 0; % even |
| 49 | +elseif mod(n,2) ~= 0 |
| 50 | + % if odd |
| 51 | + ns = (n-1)/2; |
| 52 | + flag = 1; % odd |
| 53 | +end |
| 54 | + |
| 55 | +if k >= 0 && k <= ns |
| 56 | + |
| 57 | + % for k== 0 |
| 58 | + if (k == 0) |
| 59 | + bpck = 1; |
| 60 | + elseif (k == 1) |
| 61 | + % for k == 1 |
| 62 | + bpck = n*rho; |
| 63 | + elseif (k > 1) |
| 64 | + % for k > 1 |
| 65 | + num = n; |
| 66 | + for i = 1:(k-1) |
| 67 | + num = num * (n - i); |
| 68 | + end |
| 69 | + den = 1; |
| 70 | + for i = 2:k |
| 71 | + den = den * i; |
| 72 | + end |
| 73 | + val = num / den; |
| 74 | + bpck = val*rho; |
| 75 | + end |
| 76 | + |
| 77 | + if type == 1 |
| 78 | + bpck = (-1)^k * bpck; |
| 79 | + end |
| 80 | + |
| 81 | +end |
| 82 | + |
| 83 | +% symmetry for k > n-k |
| 84 | +if k >= (ns+1) && k <=n % k = ns+1: n |
| 85 | + if type == 0 || flag == 0 |
| 86 | + bpck = bpc_skern(n,n-k,type,rho); |
| 87 | + elseif (type == 1) && (flag == 1) |
| 88 | + bpck = (-1) * bpc_skern(n,n-k,type,rho); |
| 89 | + end |
| 90 | +end |
| 91 | + |
| 92 | +end |
0 commit comments