www.gusucode.com > signal 工具箱matlab源码程序 > signal/@dfilt/@filterquantizer/firsrcfilter.m
function [y,z,tapidx] = firsrcfilter(q,L,M,p,x,z,tapidx,im,inOffset,Mx,Nx,My) %#ok<INUSL> %FIRINTERPFILTER Filtering method for fir interpolator. % Copyright 1999-2013 The MathWorks, Inc. % Quantize input x = quantizeinput(q,x); if isreal(p) if isreal(x) && isreal(z), [y,z,tapidx] = firsrcfilter(p,L,M,x,uint32(My),z,tapidx,im,inOffset); else [y,z,tapidx] = getcmplxoutput(p,L,M,x,My,z,tapidx,im,inOffset); end else preal = real(p); pimag = imag(p); lcltapidx = tapidx+0; % force new memory allocation lclz = z+0; % force new memory allocation % Filter input with real part of coefficients (output1) [y1,z1,lcltapidx] = getcmplxoutput(preal,L,M,x,My,lclz,lcltapidx,im,inOffset); %#ok<NASGU> % Filter input with imaginary part of coefficients (output1) [y2,~,tapidx] = getcmplxoutput(pimag,L,M,x,My,z,tapidx,im,inOffset); % Combine both outputs. Output2 should be multiplied by i. Cannot use % COMPLEX function since both outputs may be complex numbers by themselves y = y1+1i*y2; z = z1; end % ------------------------------------------------------------------------ function [y,z,tapidx] = getcmplxoutput(p,L,M,x,My,z,tapidx,im,inOffset) % GETCMPLXOUTPUT Get complex output % Filter real part of input with real initial conditions % Copy tap index tapidxc = tapidx+0; % Force new memory allocation zr = real(z); [yr,zr,tapidx] = firsrcfilter(p,L,M,real(x),uint32(My),zr,tapidx,im,inOffset); % Now filter imag part of input with imaginary initial conditions zi = imag(z); [yi,zi,tapidxc] = firsrcfilter(p,L,M,imag(x),uint32(My),zi,tapidxc,im,inOffset); %#ok<NASGU> y = complex(yr,yi); z = complex(zr,zi); % [EOF]