/*
-------------------------------------------------------------------------------------------------
Assignment No:5
Title: Compute N Point DFT Using linear transformation matrix.
-------------------------------------------------------------------------------------------------
*/
#include<conio.h>
#include<iostream.h>
#include<math.h>
# define max 50
void main()
{
int i,j,k,n,ch,xr[max]={0},xi[max]={0};
int x[max]={0},wi[max]={0},wr[max]={0},c[max][max]={0},s[max][max]={0};
clrscr();
do
{
cout<<"\\n--::MENU::---\\n";
cout<<"\\n-------------\\n";
cout<<"\\n 1.DFT \\n";
cout<<"\\n 2.IDFT \\n";
cout<<"\\n-------------";
cout<<"\\nEnter your choice:\\n";
cin>>ch;
switch(ch)
{
case 1:
cout<<"\\n Enter your choice of seq u want:";
cin>>n;
cout<<"\\n Enter values in x(n)\\n";
for(i=0;i<n;i++)
{
cout<<"x("<<i<<")=";
cin>>x[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=s[i][j]=0;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=cos((2*M_PI*i*j)/n);
s[i][j]=sin((2*M_PI*i*j)/n);
s[i][j]=s[i][j]*(-1);
cout<<c[i][j]<<"+j("<<s[i][j]<<")\\t";
}
cout<<"\\n";
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
wr[i]=wr[i]+(c[i][j]*x[j]);
wi[i]=wi[i]+(s[i][j]*x[j]);
}
cout<<"\\n";
}
cout<<"\\nFinal Output Sequence:\\n";
for(i=0;i<n;i++)
{
cout<<"\\t"<<wr[i]<<"+j("<<wi[i]<<")\\n";
}
cout<<"\\nFinal output Sequence is:\\n";
cout<<"{";
for(i=0;i<n;i++)
{
cout<<wr[i]<<"+j("<<wi[i]<<"),";
}
cout<<"}";
break;
case 2:
cout<<"\\n Enter your choice of seq u want:";
cin>>n;
cout<<"\\n Enter values in x(n)\\n";
for(i=0;i<n;i++)
{
cout<<"x("<<i<<")=";
cin>>xr[i]>>xi[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=s[i][j]=0;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=cos((2*M_PI*i*j)/n);
s[i][j]=sin((2*M_PI*i*j)/n);
s[i][j]=s[i][j]*(1);
cout<<c[i][j]<<"+j("<<s[i][j]<<")\\t";
}
cout<<"\\n";
}
for(i=0;i<n;i++)
{
wi[i]=wr[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
wr[i]=wr[i]+(c[i][j]*xr[j])-(s[i][j]*xi[i]);
wi[i]=wi[i]+(s[i][j]*xr[j])+(c[i][j]*xi[j]);
}
wr[i]=wr[i]/n;
wi[i]=wi[i]/n;
cout<<"\\n";
}
cout<<"\\nFinal Output Sequence:\\n";
for(i=0;i<n;i++)
{
cout<<"\\t"<<wr[i]<<"+j("<<wi[i]<<")\\n";
}
cout<<"\\nFinal output Sequence is:\\n";
cout<<"{";
for(i=0;i<n;i++)
{
cout<<wr[i]<<"+j("<<wi[i]<<"),";
}
cout<<"}";
cout<<"\\n";
break;
}//case
}while(ch!=3);
getch();
}