兩個MATLAB函式dir2par和cplxcomp
阿新 • • 發佈:2022-05-12
跑MATLAB程式,缺少函式,搜尋整理如下:
dir2par
參考連結:https://github.com/sonientaegi/matlab/blob/master/DSP/dir2par.m
function [C,B,A] = dir2par(b,a) % DIRECT-form to PARALLEL-form conversion % -------------------------------------- % [C,B,A] = dir2par(b,a) % C = Polynomial part when length(b) >= length(a) % B = K by 2 matrix of real coefficients containing bk's % A = K by 3 matrix of real coefficients containing ak's % b = numerator polynomial coefficients of DIRECT form % a = denominator polynomial coefficients of DIRECT form % M = length(b); N = length(a); [r1,p1,C] = residuez(b,a); p = cplxpair(p1,10000000*eps); I = cplxcomp(p1,p); r = r1(I); K = floor(N/2); B = zeros(K,2); A = zeros(K,3); if K*2 == N %N even, order of A(z) odd, one factor is first order for i=1:2:N-2 Brow = r(i:1:i+1,:); Arow = p(i:1:i+1,:); [Brow,Arow] = residuez(Brow,Arow,[]); B(fix((i+1)/2),:) = real(Brow'); A(fix((i+1)/2),:) = real(Arow'); end [Brow,Arow] = residuez(r(N-1),p(N-1),[]); B(K,:) = [real(Brow') 0]; A(K,:) = [real(Arow') 0]; else for i=1:2:N-1 Brow = r(i:1:i+1,:); Arow = p(i:1:i+1,:); [Brow,Arow] = residuez(Brow,Arow,[]); B(fix((i+1)/2),:) = real(Brow'); A(fix((i+1)/2),:) = real(Arow'); end end
cplxcomp
參考連結:https://zhidao.baidu.com/question/135459467.html
function I=cplxcomp(p1,p2)
I=[];
for j=1:1:length(p2)
for i=1:1:length(p1)
if (abs(p1(i)-p2(j))<0.0001)
I=[I,i];
end
end
end
I=I';
end