Showing posts with label dsp lab interfacing programs. Show all posts
Showing posts with label dsp lab interfacing programs. Show all posts

Sunday, 20 October 2013

Digital Signal Processing lab interfacing programs

Digital Signal Processing lab interfacing programs...

To verify, Download C,C++ compiler from
https://www.facebook.com/groups/163904047131828/


alt+c   compile
alt+r   run
alt+f open file functions
alt+enter   exit full screen mode..

Note:1: Copy the programs and save as  filename.c  at  C:\TurboC++\Disk\TurboC3\BIN
          and directly run the programs from compiler.
         2:While running these progrms on CCStudio,Linux remove following commands from program.
                    a)#include<conio.h>
                    b)clrscr();
                    c)getch();

Expt no.1
Linear convolution


#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{

float x[15],y[15],h[15];
int i,j,m,n;
clrscr();

printf("\n Enter the value of m:");
scanf("%d",&m);
printf("\n Enter the first sequence:");
for(i=0;i<m;i++)
scanf("%f",&x[i]);

printf("\n Enter the value of n:");
scanf("%d",&n);
printf("\n Enter the second sequence:");
for(i=0;i<n;i++)
scanf("%f",&h[i]);

for(i=0;i<m+n-1;i++)
{
y[i]=0;
for(j=0;j<=i;j++)
y[i]+=x[j]*h[i-j];
}
for(i=0;i<m+n-1;i++)
printf("\n Linear convolution =%f\n",y[i]);
getch();

 }

Expt no.2
Circular convolution


#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
int m,n,i,j,k;
float x[30],h[30],y[30],x2[30],a[30];
clrscr();
printf("Enter the length of the first sequence:\n");
scanf("%d",&m);
printf("Enter the first sequence:\n");
for(i=0;i<m;i++)
scanf("%f",&x[i]);
printf("Enter the length of the second sequence:\n");
scanf("%d",&n);
printf("Enter the second sequence:\n");
for(j=0;j<n;j++)
scanf("%f",&h[j]);
/*If length of both sequences are not equal*/
if(m-n!=0)
{
if(m>n) /* Pad the smaller sequence with zero*/
{
for(i=n;i<m;i++)
h[i]=0;
n=m;
}
for(i=m;i<n;i++)
x[i]=0;
m=n;
}
y[0]=0;
a[0]=h[0];
for(j=1;j<n;j++) /*folding h(n) to h(-n)*/
a[j]=h[n-j];
/*Circular convolution*/
for(i=0;i<n;i++)
y[0]+=x[i]*a[i];
for(k=1;k<n;k++)
{
y[k]=0;
/*circular shift*/
for(j=1;j<n;j++)
x2[j]=a[j-1];
x2[0]=a[n-1];
for(i=0;i<n;i++)
{
a[i]=x2[i];
y[k]+=x[i]*x2[i];
}
}
/*displaying the result*/
printf(" the circular convolution is\n");
for(i=0;i<n;i++)
printf("%f ",y[i]);
getch();
}


Expt no.3
N point DFT

#include <stdio.h>
#include <math.h>
#include<conio.h>

void dft(int *x, short k, float *real, float *imaginary);
float pi = 3.141592654;
float real[10],imaginary[10]; //Output results
int index=0;
int N,x[10]={0};

void main()
{
 short i,j;
 clrscr();
 printf("\nEnter the length of the input sequence:");
 scanf("%d",&N);
 printf("\nEnter the input sequence:");
 for(i=0;i<N;i++)
 scanf("%d",&x[i]);
  printf("\n The %d point DFT of sequence is \n",N);
 for (j = 0; j < N; j++)
    {
     dft(x,j,real,imaginary);                 //call DFT function
    }
}

void dft(int *x, short k, float *real, float *imaginary)  //DFT function
{
 float sumRe = 0;                        //initialize real component
 float sumIm = 0;                        //initialize imaginary component
 int i = 0;
 float cs = 0;                         //initialize cosine component
 float sn = 0;                          //initialize sine component

 for (i = 0; i < N; i++)                 //for N-point DFT
    {
      cs = cos(2*pi*(k)*i/N);           //real component
      sn = sin(2*pi*(k)*i/N);           //imaginary component
      sumRe = sumRe + x[i]*cs;        //sum of real components
      sumIm = sumIm - x[i]*sn;        //sum of imaginary components
    }
    real[index]=sumRe;
    imaginary[index]=sumIm;
 index++;

 printf("\n%f+j*%f\n",sumRe,sumIm);
 getch();
}


Expt no.4
Impulse response

#include<stdio.h>
#include<conio.h>
#define Order 2
#define Len 5

float h[Len] = {0.0,0.0,0.0,0.0,0.0},sum;

void main()
{
int j,k;
float a[Order+1] = {0.5311, 0.8622, 1.1311};
float b[Order+1] = {.2009, -0.7478, 0.5722};
clrscr();
printf("Impulse response of the given system:\n");
for(j=0;j<Len;j++)
{
sum = 0.0;
for(k=1;k<=Order;k++)
{
if((j-k)>=0)
sum = sum+(b[k]*h[j-k]);
}
if(j<=Order)
{
h[j] = a[j]-sum;
}
else
{
h[j] = -sum;
  }
printf("%f ",h[j]);
}
getch();

}