/*
-------------------------------------------------------------------------------------------------
Assignment No: 04
Title - Find the N point DFT/IDFT of the given sequence x(n). Plot the magnitude spectrum X(K) Vs K. Analyze the output for different N and the same input sequence x(n). Also observe the periodicity and symmetry property.
-------------------------------------------------------------------------------------------------
*/
#include<conio.h>
#include<iostream.h>
#include<math.h>
#include<process.h>
void main()
{
int N,n,i,j,Real[20],Imag[20],real,imag,xnr[20],xnl[20],ch,real2,imag2;
int xkr[20],xkl[20],xn1[20],xn[20],k=0,y,Real1[20],imag1[20];
clrscr();
cout<<"\\nEnter the number of element:";
cin>>n;
N=n;
do{
cout<<"\\n1.DFT";
cout<<"\\n2.IDFT";
cout<<"\\n3.EXIT";
cout<<"\\nEnter your choice:";
cin>>ch;
switch(ch)
{
case 1:
n=N;
for(i=0;i<n;i++)
{
cout<<"\\n";
for(j=0;j<n;j++)
{
Real[k]=cos(2*M_PI*i*j/N);
Imag[k]=-1*sin(2*M_PI*i*j/N);
cout<<"\\t";
cout<<Real[k]<<"i("<<Imag[k]<<"j)";
k++;
}
}
for(i=0;i<N;i++)
{
cout<<"\\nEnter x1("<<i<<")";
cin>>xn1[i];
}
cout<<"\\nDFT of first sequence:";
k=0;
for(i=0;i<N;i++)
{
real2=imag2=0.0;
for(j=0;j<N;j++)
{
real2=real2+(xn1[j]*Real[k]);
imag2=imag2+(xn1[j]*Imag[k]);
k++;
}
xkr[i]=real2;
xkl[i]=imag2;
}
cout<<"\\n\\nRESULTANT X(K):{";
for(i=0;i<N;i++)
{
cout<<xkr[i]<<"+"<<xkl[i]<<"j,";
}
cout<<"}";
break;
case 2:
cout<<"\\n IDFT matrix:";
for(i=0;i<n;i++)
{
cout<<"\\n";
for(j=0;j<n;j++)
{
Real1[k]=cos(2*M_PI*i*j/N);
imag1[k]=1*sin(2*M_PI*i*j/N);
cout<<"\\t";
cout<<Real1[k]<<"+("<<imag1[k]<<"j)";
k++;
}
}
for(i=0;i<N;i++)
{
cout<<"\\nEnter real part:";
cin>>xkr[i];
cout<<"\\nEnter imag part:";
cin>>xkl[i];
}
cout<<"\\nIDFT of first sequence:";
k=0;
for(i=0;i<N;i++)
{
real=imag=0.0;
for(j=0;j<N;j++)
{
real=real+((xkr[j]*Real1[k])+xkl[j]*imag1[k]*-1);
imag=imag+(xkr[j]*imag1[k])+xkl[j]*Real1[k];
k++;
}
xnr[i]=real/N;
xnl[j]=imag/N;
}
cout<<"\\nREASULTANT X(n):{" ;
for(i=0;i<N;i++)
{
cout<<xnr[i]<<"+"<<xnl[j]<<"j,";
}
cout<<"}";
break;
case 3: exit(0);
}
}while(ch<3);
getch();
}