Problems with Matlab Projects? You may face many Problems, but do not worry we are ready to solve your Problems. All you need to do is just leave your Comments. We will assure you that you will find a solution to your project along with future tips. On Request we will Mail you Matlab Codes for Registered Members of this site only, at free service...Follow Me.

DIGITAL FILTER IMPLEMENTATION

To implement a causal IIR filter implemented in the Direct Form II structure, the function
direct2 given below can be employed.

function [y,sf] = direct2(p,d,x,si);
% Y = DIRECT2(P,D,X) filters input data vector X with
% the filter described by vectors P and D to create the
% filtered data Y. The filter is a "Direct Form II"
% implementation of the difference equation:
% y(n) = p(1)*x(n) + p(2)*x(n-1) + ... + p(np+1)*x(n-np)
% - d(2)*y(n-1) - ... - d(nd+1)*y(n-nd)
% [Y,SF] = DIRECT2(P,D,X,SI) gives access to initial and
% final conditions, SI and SF, of the delays.
dlen = length(d); plen = length(p);
N = max(dlen,plen); M = length(x);
sf = zeros(1,N-1); y = zeros(1,M);
if nargin ~= 3,
sf = si;
end
if dlen <>
d = [d zeros(1,plen - dlen)];
else
p = [p zeros(1, dlen - plen)];
end
p = p/d(1); d = d/d(1);
for n = 1:M;
wnew = [1 -d(2:N)]*[x(n) sf]’;
K = [wnew sf];
y(n) = K*p’;
sf = [wnew sf(1:N-2)];
end

The structure being simulated can be verified in MATLAB by computing its transfer function with the aid of the function strucver given below.

function [p,d] = strucver(ir,N);
H = zeros(2*N+1,N+1);
H(:,1) = ir’;
for n = 2:N+1;
H(:,n) = [zeros(1,n-1) ir(1:2*(N+1)-n)]’;
end
H1 = zeros(N+1,N+1);
for k = 1:N+1;
H1(k,:) = H(k,:);
end
H3 = zeros(N,N+1);
for k = 1:N;
H3(k,:) = H(k+N+1,:);
end
H2 = H3(:,2:N+1);
hf = H3(:,1);
% Compute the denominator coefficients
d = -(inv(H2))*hf;
% Compute the numerator coefficients
p = H1*[1;d];
d = [1; d];

Program to illustrate the design of a causal IIR filter and its simulation in Direct Form
II. It employs the functions strucver and direct2 described earlier.

% Program
Wp = [0.4 0.5]; Ws = [0.1 0.8]; Rp = 1; Rs = 30;
[N1, Wn1] = buttord(Wp, Ws, Rp, Rs);
[num,den] = butter(N1,Wn1);
disp(’Numerator coefficients are ’);disp(num);
disp(’Denominator coefficients are ’);disp(den);
impres = direct2(num,den,[1 zeros(1,4*N1)]);
[p,d] = strucver(impres,2*N1);
disp(’Actual numerator coeffs are ’); disp(p’);
disp(’Actual denominator coeffs are ’); disp(d’);

1 comments:

kumuda said...

Hi I am trying to implement an FIR filter OF type POLE zero GAIN FORM i.e:
H(z)=(1-z1*z^-1)(1-z2*z^-1)....(1-zN*z^-1); The pole zero gain model is there but I need to filter the data x with H(z) which is not available in matlab. since filter function is incompatible with non dfilt objects. Pls guide me to have an automated filter of this type which is programmed in matlab source code Like other Direct form 1,2 structures.

Post a Comment

Recent Comments

Popular Matlab Topics

Share your knowledge - help others

Crazy over Matlab Projects ? - Join Now - Follow Me

Sites U Missed to Visit ?

Related Posts Plugin for WordPress, Blogger...

Latest Articles

Special Search For Matlab Projects

MATLAB PROJECTS

counter

Bharadwaj. Powered by Blogger.