document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*
  2. -------------------------------------------------------------------------------------------------
  3.  Assignment No:7
  4.  Title - Compute the Circular Convolution of given two sequences and test it for Linear Convolution.
  5. -------------------------------------------------------------------------------------------------
  6. */
  7.  
  8. #include<stdio.h>
  9. #include<iostream.h>
  10. #include<conio.h>
  11. #include<math.h>
  12.  
  13. # define max 20
  14.  
  15. void main()
  16. {
  17.     int ch,len,m,n,x[max],xn[max],h[max],hn[max],y[max],i,j, k,x2[max],a[max];
  18.     clrscr();
  19.      do
  20.       {
  21.     cout<<"\\nEnter your choice :";
  22.     cout<<"\\n---------------------------------------------------\\n";
  23.     cout<<"\\nMENU\\n";
  24.     cout<<"\\n---------------------------------------------------\\n";
  25.     cout<<"\\n1. Same result for Linear and Circular Convolution.";
  26.     cout<<"\\n2. Different result for Linear and Circular Convolution.";
  27.     cout<<"\\n3. Exit";
  28.     cout<<"\\n---------------------------------------------------\\n";
  29.     cout<<"\\nEnter the Choice:";
  30.     cin>>ch;
  31.  
  32.     switch(ch)
  33.     {
  34.       case 1:
  35.          cout<<"\\nLinear Convolution\\n";
  36.          cout<<"\\n Enter The Number Of Values In X => ";
  37.          cin>>m;
  38.          cout<<"\\n Enter The Number Of Values In H => ";
  39.          cin>>n;
  40.          for(i=0;i<max;i++)
  41.          {
  42.           x[i]=h[i]=0;
  43.          }
  44.          cout<<"\\n Enter The Input For X[n] => \\n";
  45.          for(i=0;i<m;i++)
  46.             cin>>x[i];
  47.          cout<<"\\n Enter The Input For H[n] => \\n";
  48.          for(i=0;i<m;i++)
  49.          cin>>h[i];
  50.  
  51.          for(i=m;i<m+n-1;i++)
  52.             x[i]=0;
  53.          for(i=n;i<m+n-1;i++)
  54.          h[i]=0;
  55.          for(i=0;i<m+n-1;i++)
  56.          {
  57.             y[i]=0;
  58.             for(j=0;j<=i;j++)
  59.             y[i]=y[i]+(x[j]*h[i-j]);
  60.          }
  61.  
  62.          cout<<"\\nOUTPUT OF LINEAR CONVOLUTION:";
  63.          for(i=0;i<m+n-1;i++)
  64.          cout<<"\\t"<<y[i];
  65.  
  66.          len=m+n-1;
  67.  
  68.          for(i=0;i<len;i++)
  69.          {
  70.             xn[i]=hn[i]=0;
  71.          }
  72.          for(i=0;i<m;i++)
  73.          {
  74.             xn[i]=x[i];
  75.          }
  76.          for(i=0;i<n;i++)
  77.          {
  78.             hn[i]=h[i];
  79.          }
  80.  
  81.          y[0]=0;
  82.          a[0]=hn[0];
  83.          for(j=1;j<len;j++)                         //folding h(n) to h(-n)//
  84.             a[j]=hn[len-j];                 //Circular convolution//
  85.          for(i=0;i<len;i++)
  86.             y[0]+=xn[i]*a[i];
  87.          for(k=1;k<len;k++)
  88.          {
  89.             y[k]=0;                             //circular shift//
  90.             for(j=1;j<len;j++)
  91.                 x2[j]=a[j-1];
  92.             x2[0]=a[len-1];
  93.             for(i=0;i<len;i++)
  94.             {
  95.  
  96.                 a[i]=x2[i];
  97.                 y[k]+=xn[i]*x2[i];
  98.             }
  99.          }
  100.          //displaying the result//
  101.          cout<<" \\nTHE CIRCULAR CONVOLUTION = ";
  102.          for(i=0;i<len;i++)
  103.             cout<<"\\t"<<y[i];
  104.          cout<<"\\n"<<"HERE THE OUTPUT OF BOTH SEQUENCES IS SAME";
  105.          break;
  106.        case 2:
  107.          cout<<"\\nLinear Convolution\\n";
  108.          cout<<"\\n Enter The Number Of Values In X => ";
  109.          cin>>m;
  110.          cout<<"\\n Enter The Number Of Values In H => ";
  111.          cin>>n;
  112.          cout<<"\\n Enter The Input For X[n] => \\n";
  113.          for(i=0;i<m;i++)
  114.             cin>>x[i];
  115.          cout<<"\\n Enter The Input For H[n] => \\n";
  116.          for(i=0;i<m;i++)
  117.          cin>>h[i];
  118.          for(i=m;i<m+n-1;i++)
  119.             x[i]=0;
  120.          for(i=n;i<m+n-1;i++)
  121.             h[i]=0;
  122.          for(i=0;i<m+n-1;i++)
  123.          {
  124.             y[i]=0;
  125.             for(j=0;j<=i;j++)
  126.             y[i]=y[i]+(x[j]*h[i-j]);
  127.          }
  128.          cout<<"\\nOUTPUT OF LINEAR CONVOLUTION:";
  129.          for(i=0;i<m+n-1;i++)
  130.          cout<<"\\t"<<y[i];
  131.          y[0]=0;
  132.          a[0]=h[0];
  133.          for(j=1;j<n;j++)                       /*folding h(n) to h(-n)*/
  134.          a[j]=h[n-j];                               /*Circular convolution*/
  135.          for(i=0;i<n;i++)
  136.          y[0]+=x[i]*a[i];
  137.          for(k=1;k<n;k++)
  138.          {
  139.             y[k]=0;                             /*circular shift*/
  140.             for(j=1;j<n;j++)
  141.             x2[j]=a[j-1];
  142.             x2[0]=a[n-1];
  143.             for(i=0;i<n;i++)
  144.              {
  145.                 a[i]=x2[i];
  146.                 y[k]+=x[i]*x2[i];
  147.             }
  148.          }
  149.          /*displaying the result*/
  150.          cout<<" \\nThHE CIRCULAR CONVOLUTION = ";
  151.          for(i=0;i<n;i++)
  152.          cout<<"\\t"<<y[i];
  153.          cout<<"\\n"<<"HERE THE OUTPUT OF BOTH SEQUENCES IS DIFFERENT";
  154.          break;
  155.     }
  156.       }while(ch!=3);
  157. }
');