Dsp iit workshop

69
Digital Signal Processing Using Scilab R.Senthilkumar, Assistant Professor, Department of Electronics and Communication Engineering, Institute of Road and Transport Technology, Erode – 638 316 Email Id: [email protected] [email protected] Mobile no: 9940882605

Transcript of Dsp iit workshop

Page 1: Dsp iit workshop

Digital Signal Processing Using Scilab

R.Senthilkumar,Assistant Professor,

Department of Electronics and Communication Engineering,

Institute of Road and Transport Technology,Erode – 638 316

Email Id: [email protected][email protected]

Mobile no: 9940882605

Page 2: Dsp iit workshop

Topics to be covered in signal processing

[1]. Generation of Discrete basic sequences:

unit impulse, unit step sequence, Ramp, sine, cosine and exponential sequences.

[2]. Linear Convolution

[3]. Circular Convolution

[4]. Linear Convolution using Circular Convolution

Page 3: Dsp iit workshop

[5]. DFT and IDFT

[6]. DFT and IDFT using FFT inbuilt function

[7]. DCT and IDCT

[8]. Cross correlation and Auto correlation

[9]. Sampling and aliasing effect

[10]. FIR digital filter design

[11]. IIR digital filter design

[12]. Power Spectrum Estimation using DFT

Page 4: Dsp iit workshop

[1]. Generation of basic sequences

//Caption:Unit Impulse Sequence [Program]

clear;

clc;

close;

L = 4; //Upperlimit

n = -L:L;

x = [zeros(1,L),1,zeros(1,L)];

b = gca();

b.y_location = "middle";

plot2d3('gnn',n,x)

Page 5: Dsp iit workshop

a=gce();

a.children(1).thickness =4;

xtitle('Graphical Representation of Unit Impulse Sequence','n','x[n]');

Page 6: Dsp iit workshop

//Caption: Unit Step Sequence [Program]

clear;

clc;

close;

L = 4; //Upperlimit

n = -L:L;

x = [zeros(1,L),ones(1,L+1)];

a=gca();

a.y_location = "middle";

plot2d3('gnn',n,x)

title('Graphical Representation of Unit Step Signal')

xlabel(' n');

ylabel(' x[n]');

Page 7: Dsp iit workshop
Page 8: Dsp iit workshop

//Caption: Discrete Ramp Sequence [Program]

clear;

clc;

close;

L = 4; //Upperlimit

n = -L:L;

x = [zeros(1,L),0:L];

b = gca();

b.y_location = 'middle';

plot2d3('gnn',n,x)

a=gce();

a.children(1).thickness =2;

xtitle('Graphical Representation of Discrete Unit Ramp Sequence','n','x[n]');

Page 9: Dsp iit workshop
Page 10: Dsp iit workshop

//Caption: Exponentially Decreasing Signal [Program]

clear;

clc;

close;

a =0.5;

n = 0:10;

x = (a)^n;

a=gca();

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',n,x)

a.thickness = 2;

xtitle('Graphical Representation of Exponentially Decreasing Signal','n','x[n]');

Page 11: Dsp iit workshop
Page 12: Dsp iit workshop

//Caption:Exponentially Increasing Signal [Program]

clear;

clc;

close;

a =1.5;

n =1:10;

x = (a)^n;

a=gca();

a.thickness = 2;

plot2d3('gnn',n,x)

xtitle('Graphical Representation of Exponentially Increasing Signal','n','x[n]');

Page 13: Dsp iit workshop
Page 14: Dsp iit workshop

//Caption: Sine wave and Cosine wave plot [Program]

clc;

clear;

close;

f = 3; //Frequency = 3 Hertz

t = 0:0.01:1;

X = sin(2*%pi*f*t);

Y = cos(2*%pi*f*t);

subplot(2,1,1)

plot2d3('gnn',t,X,5)

title("Sine waveform")

subplot(2,1,2)

plot2d3('gnn',t,Y,3)

title('Cosine Waveform')

Page 15: Dsp iit workshop
Page 16: Dsp iit workshop

[2]. Linear Convolution

//Caption:Program for Linear Convolution [Program]

clc;

clear all;

close ;

x = input('enter x seq');

h = input('enter h seq');

m = length(x);

n = length(h);

//Method 1 Using Direct Convolution Sum Formula

Page 17: Dsp iit workshop

for i = 1:n+m-1

conv_sum = 0;

for j = 1:i

if (((i-j+1) <= n)&(j <= m))

conv_sum = conv_sum + x(j)*h(i-j+1);

end;

y(i) = conv_sum;

end;

end;

disp(y','Convolution Sum using Direct Formula Method =')

Page 18: Dsp iit workshop

//Method 2 Using Inbuilt Function

f = convol(x,h)

disp(f,'Convolution Sum Result using Inbuilt Funtion =')

subplot(3,1,1);

plot2d3('gnn',x)

xtitle('Graphical Representation of Input signal x');

subplot(3,1,2);

plot2d3('gnn',h)

xtitle('Graphical Representation of Impulse signal h');

subplot(3,1,3);

plot2d3('gnn',y)

xtitle('Graphical Representation of Output signal y');

Page 19: Dsp iit workshop
Page 20: Dsp iit workshop

[3]. Circular Convolution

//Caption: Program to find the Cicrcular Convolution of given [Program]

//discrete sequences using Matrix method

clear;

clc;

x1 = [2,1,2,1]; //First sequence

x2 = [1,2,3,4]; //Second sequence

m = length(x1); //length of first sequence

n = length(x2); //length of second sequence

//To make length of x1 and x2 are Equal

Page 21: Dsp iit workshop

if (m >n)

for i = n+1:m

x2(i) = 0;

end

elseif (n>m)

for i = m+1:n

x1(i) = 0;

end

end

N = length(x1);

x3 = zeros(1,N); //x3 = Circular convolution result

a(1) = x2(1);

Page 22: Dsp iit workshop

for j = 2:N

a(j) = x2(N-j+2);

end

for i =1:N

x3(1) = x3(1)+x1(i)*a(i);

end

X(1,:)=a;

//Calculation of circular convolution

for k = 2:N

for j =2:N

x2(j) = a(j-1);

end

Page 23: Dsp iit workshop

x2(1) = a(N);

X(k,:)= x2;

for i = 1:N

a(i) = x2(i);

x3(k) = x3(k)+x1(i)*a(i);

end

end

disp(X,'Circular Convolution Matrix x2[n]=')

disp(x3,'Circular Convolution Result x3[n] = ')

//Result

//Circular Convolution Matrix x2[n]=

// 1. 4. 3. 2.

// 2. 1. 4. 3.

// 3. 2. 1. 4.

// 4. 3. 2. 1.

// Circular Convolution Result x3[n] =

// 14. 16. 14. 16.

Page 24: Dsp iit workshop

[4]. Linear Convolution using Circular Convolution

//Method 3 Linear Convolution using Circular Convolution

//Circular Convolution Using frequency Domain multiplication (DFT-IDFT method)[Program]

N = n+m-1;

x = [x zeros(1,N-m)];

h = [h zeros(1,N-n)];

f1 = fft(x)

f2 = fft(h)

f3 = f1.*f2; // freq domain multiplication

f4 = ifft(f3)

disp(f4,'Convolution Sum Result DFT - IDFT method =')

//Result

//enter x seq [1 1 1 1]

//enter h seq [1 2 3]

// Convolution Sum Result DFT - IDFT method =

// 1. 3. 6. 6. 5. 3.

Page 25: Dsp iit workshop

[5]. DFT and IDFT using Formula

//Caption: Discrete Fourier Transform and its Inverse using formula

//Program to find the spectral information of discrete time signal [Program]

clc;

close;

clear;

xn = input('Enter the real input discrete sequence x[n]=');

N = length(xn);

XK = zeros(1,N);

IXK = zeros(1,N);

Page 26: Dsp iit workshop

//Code block to find the DFT of the Sequence

for K = 0:N-1

for n = 0:N-1

XK(K+1) = XK(K+1)+xn(n+1)*exp(-%i*2*%pi*K*n/N);

end

end

[phase,db] = phasemag(XK)

disp(XK,'Discrete Fourier Transform X(k)=')

disp(abs(XK),'Magnitude Spectral Samples=')

disp(phase,'Phase Spectral Samples=')

n = 0:N-1;

K = 0:N-1;

Page 27: Dsp iit workshop

subplot(2,2,1)

a = gca();

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',n,xn)

xlabel('Time Index n---->')

ylabel('Amplitude xn---->')

title('Discrete Input Sequence')

subplot(2,2,2)

a = gca();

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',K,abs(XK))

Page 28: Dsp iit workshop

xlabel('Frequency Sample Index K---->')

ylabel('|X(K)|---->')

title('Magnitude Spectrum')

subplot(2,2,3)

a = gca();

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',K,phase)

xlabel('Frequency Sample Index K---->')

ylabel('<X(K) in radians---->')

title('Phase Spectrum')

Page 29: Dsp iit workshop

//Code block to find the IDFT of the sequence

for n = 0:N-1

for K = 0:N-1

IXK(n+1) = IXK(n+1)+XK(K+1)*exp(%i*2*%pi*K*n/N);

end

end

IXK = IXK/N;

ixn = real(IXK);

subplot(2,2,4)

a = gca();

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',[0:N-1],ixn)

xlabel('Discrete Time Index n ---->')

ylabel('Amplitude x[n]---->')

title('IDFT sequence')

Page 30: Dsp iit workshop
Page 31: Dsp iit workshop

[6]. DFT and IDFT using FFT algorithm (inbuilt function)

//Caption:DFT and IDFT using FFT algorithm[Program]

clear;

clc;

close;

x = input("enter the input discrete sequence");

L = length(x); //Length of the Sequence

N = input('Enter the N-point value:='); // N -point DFT

//Computing DFT

X = fft(x,-1);

disp(X,'FFT of x[n] is X(k)=')

x =abs(fft(X,1))

disp(x,'IFFT of X(k) is x[n]=')

Page 32: Dsp iit workshop

//Plotting the spectrum of Discrete Sequence

subplot(2,1,1)

a=gca();

a.data_bounds=[0,0;5,10];

plot2d3('gnn',0:length(x)-1,x)

b = gce();

b.children(1).thickness =3;

xtitle('Graphical Representation of Discrete Sequence','n','x[n]');

subplot(2,1,2)

a=gce();

a.data_bounds=[0,0;5,10];

plot2d3('gnn',0:length(X)-1,abs(X))

b = gce();

b.children(1).thickness =3;

xtitle('Graphical Representation of Discrete Spectrum','k','X(k)');

Page 33: Dsp iit workshop
Page 34: Dsp iit workshop

[7]. Discrete Cosine Transform and Inverse Discrete Cosine TransformProblem: If x[n] = {1,3,5,2,3,6,1,2} compute signal in frequency domain using DCT algorithm.

XDCT(K) = {8.131,-0.0342,-2.263,0.1573,-2.474,-1.7718,2.8508,-0.5784}

xIDCT[n] = {1,3,5,2,3,6,1,2}

Program

Page 35: Dsp iit workshop

//Caption: Discrete Cosine Transform and Inverse Discrete Cosine Transform

clear;

clc;

close;

x = [1,3,5,2,3,6,1,2];

XDCT = dct(x,-1);//Discrete Cosine Transform

xIDCT = dct(XDCT,1);//Inverse Discrete Cosine Transform

disp(XDCT,'DCT of x[n]=')

disp(xIDCT,'Inverse DCT of x =')

//RESULT

//DCT of x[n]=

// 8.131728 - 0.0342533 - 2.2632715 0.1573526 - 2.4748737 - 1.7718504 2.8508949 - 0.5784576

// Inverse DCT of x =

// 1. 3. 5. 2. 3. 6. 1. 2.

Page 36: Dsp iit workshop

[8]. Auto correlation and Cross correlation

a). Auto correlation [Program]

//Caption: Program to Compute the Autocorrelation of a Sequence And verfication of Autocorrelation property

clc;

clear;

close;

x = input('Enter the input Sequence:=');

m = length(x);

lx = input('Enter the lower index of input sequence:=')

hx = lx+m-1;

n = lx:1:hx;

Page 37: Dsp iit workshop

x_fold = x($:-1:1);

nx = lx+lx;

nh = nx+m+m-2;

r = nx:nh;

Rxx = convol(x,x_fold);

disp(Rxx,'Auto Correlation Rxx[n]:=')

//Property 1: Autocorrelation of a sequence has even symmetry

//Rxx[n] = Rxx[-n]

Rxx_flip = Rxx([$:-1:1]);

if Rxx_flip==Rxx then

disp('Property 1:Auto Correlation has Even Symmetry');

disp(Rxx_flip,'Auto Correlation time reversed Rxx[-n]:=');

end

Page 38: Dsp iit workshop

//Property 2: Center value Rxx[0]= total power of the sequence

Tot_Px = sum(x.^2);

Mid = ceil(length(Rxx)/2);

if Tot_Px == Rxx(Mid) then

disp('Property 2:Rxx[0]=center value=max. value=Total power of i/p sequence');

end

subplot(2,1,1)

plot2d3('gnn',n,x)

xlabel('n===>')

ylabel('Amplitude-->')

title('Input Sequence x[n]')

subplot(2,1,2)

plot2d3('gnn',r,Rxx)

xlabel('n===>')

ylabel('Amplitude-->')

title('Auto correlation Sequence Rxx[n]')

Page 39: Dsp iit workshop

/Example

//Enter the input Sequence:=[2,-1,3,4,1]

//

//Enter the lower index of input sequence:=-2

//

// Auto Correlation Rxx[n]:=

//

// 2. 7. 5. 11. 31. 11. 5. 7. 2.

//

// Property 1:Auto Correlation has Even Symmetry

//

// Auto Correlation time reversed Rxx[-n]:=

//

// 2. 7. 5. 11. 31. 11. 5. 7. 2.

//

// Property 2:Rxx[0]=center value=max. value=Total power of i/p sequence

Page 40: Dsp iit workshop

[b]. Cross Correlation [Program]

Page 41: Dsp iit workshop

9. Sampling and Aliasing Effect//Caption: Verification of Sampling Theorem [Program]

//[1].Right Sampling [2]. Under Sampling [3]. Over Sampling

clc;

close;

clear;

fm=input('Enter the input signal frequency:');

k=input('Enter the number of Cycles of input signal:');

A=input('Enter the amplitude of input signal:');

tm=0:1/(fm*fm):k/fm;

x=A*cos(2*%pi*fm*tm);

figure(1);

a = gca();

a.x_location = "origin";

a.y_location = "origin";

Page 42: Dsp iit workshop

plot(tm,x);

title('ORIGINAL SIGNAL');

xlabel('Time');

ylabel('Amplitude');

xgrid(1)

//Sampling Rate(Nyquist Rate)=2*fm

fnyq=2*fm;

// UNDER SAMPLING

fs=(3/4)*fnyq;

n=0:1/fs:k/fm;

xn=A*cos(2*%pi*fm*n);

figure(2);

a = gca();

Page 43: Dsp iit workshop

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',n,xn);

plot(n,xn,'r');

title('Under Sampling');

xlabel('Time');

ylabel('Amplitude');

legend('Sampled Signal', 'Reconstructed Signal');

xgrid(1)

//NYQUIST SAMPLING

fs=fnyq;

n=0:1/fs:k/fm;

xn=A*cos(2*%pi*fm*n);

figure(3);

a = gca();

Page 44: Dsp iit workshop

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',n,xn);

plot(n,xn,'r');

title('Nyquist Sampling');

xlabel('Time');

ylabel('Amplitude');

legend('Sampled Signal', 'Reconstructed Signal');

xgrid(1)

//OVER SAMPLING

fs=fnyq*10;

n=0:1/fs:k/fm;

Page 45: Dsp iit workshop

xn=A*cos(2*%pi*fm*n);

figure(4);

a = gca();

a.x_location = "origin";

a.y_location = "origin";

plot2d3('gnn',n,xn);

plot(n,xn,'r');

title('Over Sampling');

xlabel('Time');

ylabel('Amplitude');

legend('Sampled Signal', 'Reconstructed Signal');

xgrid(1)

//Result

//Enter the input signal frequency:100

//Enter the number of Cycles of input signal:2

//Enter the amplitude of input signal:2

Page 46: Dsp iit workshop
Page 47: Dsp iit workshop
Page 48: Dsp iit workshop
Page 49: Dsp iit workshop

10. FIR Digital Filter Design

Low Pass Filter Design [Program]

//Caption: Program to Design FIR Low Pass Filter

//Reference: Digital Signal Processing A Practical Approach

//by Emmaanuel Ifeachor and Barrie Jervis, Second Edition, Pearson Education

clc;

close;

clear;

fp = input("Enter the passband edge frequency in Hz=")

delf = input("Enter the transition width in Hz =")

A = input("Enter the stop band attenuation in dB =")

Fs = input("Enter the sampling frequency in Hz=")

Page 50: Dsp iit workshop

M = (A-7.95)/(14.36*delf/Fs) //Filter length

M = ceil(M);

Wc = ((fp+delf/2)/Fs)*%pi; //Digital Cutoff frequency

Tuo = (M-1)/2 //Center Value

for n = 1:M

if (n == Tuo+1)

hd(n) = Wc/%pi;

else

hd(n) = sin(Wc*((n-1)-Tuo))/(((n-1)-Tuo)*%pi);

end

end

Page 51: Dsp iit workshop

//Rectangular Window

for n = 1:M

W(n) = 1;

end

//Windowing Fitler Coefficients

h = hd.*W;

disp(h,'Filter Coefficients are')

[hzm,fr]=frmag(h,256);

hzm_dB = 20*log10(hzm)./max(hzm);

subplot(2,1,1)

plot(2*fr,hzm)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude');

title('Frequency Response 0f FIR LPF using Rectangular window')

xgrid(1)

Page 52: Dsp iit workshop

subplot(2,1,2)

plot(2*fr,hzm_dB)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude in dB');

title('Frequency Response 0f FIR LPF using Rectangular window')

xgrid(1)

//Result

///

//Enter the passband edge frequency in Hz=1500

//Enter the transition width in Hz =500

//Enter the stop band attenuation in dB =50

//Enter the sampling frequency in Hz=8000

Page 53: Dsp iit workshop
Page 54: Dsp iit workshop

High Pass Filter Design [Program]//Caption: Program to Design FIR High Pass Filterclear;clc;close;M = input('Enter the Odd Filter Length ='); //Filter length Wc = input('Enter the Digital Cutoff frequency ='); //Digital Cutoff frequencyTuo = (M-1)/2 //Center Valuefor n = 1:M if (n == Tuo+1) hd(n) = 1-Wc/%pi; else hd(n) = (sin(%pi*((n-1)-Tuo)) -sin(Wc*((n-1)-Tuo)))/(((n-1)-Tuo)*%pi); endend//Rectangular Windowfor n = 1:M W(n) = 1;end

Page 55: Dsp iit workshop

//Windowing Fitler Coefficients

h = hd.*W;

disp(h,'Filter Coefficients are')

[hzm,fr]=frmag(h,256);

hzm_dB = 20*log10(hzm)./max(hzm);

subplot(2,1,1)

plot(2*fr,hzm)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude');

title('Frequency Response 0f FIR HPF using Rectangular window')

xgrid(1)

subplot(2,1,2)

plot(2*fr,hzm_dB)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude in dB');

title('Frequency Response 0f FIR HPF using Rectangular window')

xgrid(1)

Page 56: Dsp iit workshop

//Result

//Enter the Odd Filter Length = 5

//Enter the Digital Cutoff frequency = %pi/4

//Filter Coefficients are

//

// - 0.1591549

// - 0.2250791

// 0.75

// - 0.2250791

// - 0.1591549

Page 57: Dsp iit workshop
Page 58: Dsp iit workshop

Band Pass Filter [Program]

//Caption: Program to Design FIR Band Pass Filter

clear;

clc;

close;

M = input('Enter the Odd Filter Length ='); //Filter length

//Digital Cutoff frequency [Lower Cutoff, Upper Cutoff]

Wc = input('Enter the Digital Cutoff frequency =');

Wc2 = Wc(2)

Wc1 = Wc(1)

Tuo = (M-1)/2 //Center Value

hd = zeros(1,M);

W = zeros(1,M);

Page 59: Dsp iit workshop

for n = 1:11

if (n == Tuo+1)

hd(n) = (Wc2-Wc1)/%pi;

else

n

hd(n) = (sin(Wc2*((n-1)-Tuo)) -sin(Wc1*((n-1)-Tuo)))/(((n-1)-Tuo)*%pi);

end

if(abs(hd(n))<(0.00001))

hd(n)=0;

end

end

hd;

//Rectangular Window

for n = 1:M

W(n) = 1;

end

Page 60: Dsp iit workshop

//Windowing Fitler Coefficients

h = hd.*W;

disp(h,'Filter Coefficients are')

[hzm,fr]=frmag(h,256);

hzm_dB = 20*log10(hzm)./max(hzm);

subplot(2,1,1)

plot(2*fr,hzm)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude');

title('Frequency Response 0f FIR BPF using Rectangular window')

xgrid(1)

subplot(2,1,2)

plot(2*fr,hzm_dB)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude in dB');

title('Frequency Response 0f FIR BPF using Rectangular window')

xgrid(1)

Page 61: Dsp iit workshop

//Result

//Enter the Odd Filter Length = 11

//Enter the Digital Cutoff frequency = [%pi/4,3*%pi/4]

//Filter Coefficients are

// 0. 0. 0. - 0.3183099 0. 0.5 0. - 0.3183099 0. 0. 0.

Page 62: Dsp iit workshop
Page 63: Dsp iit workshop

FIR Band Stop Filter [Program]

//Caption: Program to Design FIR Band Reject Filter

clear ;

clc;

close;

M = input('Enter the Odd Filter Length ='); //Filter length

//Digital Cutoff frequency [Lower Cutoff, Upper Cutoff]

Wc = input('Enter the Digital Cutoff frequency =');

Wc2 = Wc(2)

Wc1 = Wc(1)

Tuo = (M-1)/2 //Center Value

hd = zeros(1,M);

W = zeros(1,M);

Page 64: Dsp iit workshop

for n = 1:M

if (n == Tuo+1)

hd(n) = 1-((Wc2-Wc1)/%pi);

else

hd(n)=(sin(%pi*((n-1)-Tuo))-sin(Wc2*((n-1)-Tuo))+sin(Wc1*((n-1)-Tuo)))/(((n-1)-Tuo)*%pi);

end

if(abs(hd(n))<(0.00001))

hd(n)=0;

end

end

//Rectangular Window

for n = 1:M

W(n) = 1;

end

Page 65: Dsp iit workshop

//Windowing Fitler Coefficients

h = hd.*W;

disp(h,'Filter Coefficients are')

[hzm,fr]=frmag(h,256);

hzm_dB = 20*log10(hzm)./max(hzm);

subplot(2,1,1)

plot(2*fr,hzm)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude');

title('Frequency Response 0f FIR BSF using Rectangular window')

xgrid(1)

subplot(2,1,2)

plot(2*fr,hzm_dB)

xlabel('Normalized Digital Frequency W');

ylabel('Magnitude in dB');

title('Frequency Response 0f FIR BSF using Rectangular window')

xgrid(1)

Page 66: Dsp iit workshop
Page 67: Dsp iit workshop

[11]. IIR Butterworth Filter Design(Digital Filter Design using Bilinear

Transform Method)a) .Digital IIR Low Pass Butterworth Filter

b). Digital IIR High Pass Butterworth Filter

c). Digital IIR Band Pass Butterworth Filter

d).Digital IIR Band Stop Butterworth Filter

Page 68: Dsp iit workshop

[12]. IIR Chebyshev Digital Filter Design

(Using Bilinear Transformation)

Program

Page 69: Dsp iit workshop

[13]. Power Spectrum Estimation (Periodogram)

Program