/*
-------------------------------------------------------------------------------------------------
Assignment No .: 09
Title .: Draw a pole zero plot from a given system function H(Z) expressed as rational function. (Display pole zero table and pole zero plot)
-------------------------------------------------------------------------------------------------
*/
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<graphics.h>
void main()
{
int M,N,a[10],b[10],i,j,delta,r;
float pr[10],pi[10],zr[10],zi[10],x,y;
int gd=DETECT,gm;
clrscr();
printf("\\nEnter the no.of terms in numerator:");
scanf("%d",&M);
printf("\\nEnter the no.of terms in donominator:");
scanf("%d",&N);
printf("\\nEnter the co-efficient of 1\'st polynomial:");
for(i=0;i<M;i++)
{
if(i==0)
printf("\\nco-efficient of z^%d:",i);
else
printf("\\nco-efficient of z^%d:",-i);
scanf("%d",&a[i]);
}
printf("\\nEnter the co-efficient of 2\'nd polynomial:");
for(i=0;i<N;i++)
{
if(i==0)
printf("\\nco-efficient of z^%d:",i);
else
printf("\\nco-efficient of z^%d:",-i);
scanf("%d",&b[i]);
}
printf("\\n\\nConvert into positive powers of z.");
printf("\\n Multiply both polynomials with highest power of z");
printf("\\n\\nh(z)=");
i=M-1;
for(i=0;i<M;i++)
{
printf("%z^%d",a[i],j);
j--;
}
printf("\\n\\t-----------------------------\\n\\t");
j=N-1;
for(i=0;i<N;i++)
{
printf("%z^%d",b[i],j);
j--;
}
//calculate poles & zeros
//zeros:
delta=(a[1]*a[1])-(4*a[0]*a[2]);
i=0;
if(delta>=0)
{
zr[i]=(-a[1]+sqrt(abs(delta)))/(2*a[0]);
zi[i]=0;
i++;
zr[i]=(-a[1]-sqrt(abs(delta)))/(2*a[0]);
zi[i]=0;
}
else
{
zr[i]=(-a[1])/(2*a[0]);
zi[i]=sqrt(abs(delta))/(2*a[0]);
i++;
zr[i]=(-a[1])/(2*a[0]);
zi[i]=(-sqrt(abs(delta)))/(2*a[0]);
}
//poles:
delta=0;
delta=(b[1]*b[1])-(4*b[0]*b[2]);
i=0;
if(delta>=0)
{
pr[i]=(-b[1]+sqrt(abs(delta)))/(2*b[0]);
pi[i]=0;
i++;
pr[i]=(-b[1]-sqrt(abs(delta)))/(2*b[0]);
pi[i]=0;
}
else
{
pr[i]=(-b[1])/(2*b[0]);
pi[i]=sqrt(abs(delta))/(2*b[0]);
i++;
pr[i]=(-b[1])/(2*b[0]);
pi[i]=(-sqrt(abs(delta)))/(2*b[0]);
}
initgraph(&gd,&gm,"");
printf("\\n\\nThe zeros are:");
for(i=0;i<M-1;i++)
{
printf("(%f+%f)",zr[i],zi[i]);
}
printf("\\n\\nThe poles are:");
for(i=0;i<N-1;i++)
{
printf("(%f+%f)",pr[i],pi[i]);
}
line(100,250,500,250);
line(300,50,300,500);
circle(300,250,100);
outtextxy(500,250,"x-axis");
outtextxy(300,50,"y-axis");
//plot zeros
for(i=0;i<M-1;i++)
{
x=300+(zr[i]*100);
y=250-(zi[i]*100);
putpixel(x,y,15);
circle(x,y,5);
outtextxy(x+7,y-7,"z");
}
//plot poles
for(i=0;i<N-1;i++)
{
x=300+(pr[i]*100);
y=250-(pi[i]*100);
putpixel(x,y,15);
line(x-5,y-5,x+5,y+5);
line(x+5,y-5,x-5,y+5);
outtextxy(x+7,y-7,"p");
}
getch();
closegraph();
}