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();
}
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();
}