Electronics & Communication Engineering (VLSI &Embedded Systems Design) Semester: III Subject Name: Digital Signal Processing Subject Code: 735206 Lab-Assignment: Problem 1 Design and Implement a Digital Butterworth Low Pass System with the following specifications: o Passband Frequency: 1000Hz o Passband Attenuation: 1db o Stopband Frequency: 12000Hz o Stopband Attenuation: 80db o Sampling Rate: 16000Hz Obtain and Plot the impulse response of the given digital low pass filter. Obtain and Plot the Magnitude and Phase responses of the given digital low pass filter. Verify the cut-off frequency of the filter from its Magnitude Response. Implement the Difference Equation by passing the samples of a sinusoidal signal of amplitude 0.9, frequency 1000Hz and number of cycles equal to 1000. Verify the output signal amplitude with the theoretical and expected amplitude.
MATLAB Code:clc; clear all; close all; fs=16000; ts=1/fs; fp=1000; fstop=12000; rp=1; rs=80; ap=10^(-rp/20); as=10^(-rs/20); ap_lin=(1/(ap*ap))-1; as_lin=(1/(as*as))-1; Wp=2*pi*fp; Ws=2*pi*fstop;
Jay Kothari
Page 1 of 67
N=0.5*(log(ap_lin)-log(as_lin))/(log(Wp)-log(Ws)); N=ceil(N); disp(N); Wc=Wp/((ap_lin)^(1/(2*N))); k=0:1:N-1; sk=Wc*exp(j*(((pi*(2*k+1)/(2*N))) +(pi/2))); num=Wc^N; den=poly(sk); %%Frequency Transformation [bm,ak]=bilinear(num,den,fs); figure impz(bm,ak); figure freqz(bm,ak); title('Frequency Response') A=0.9; f0=1000; ts=1/fs; cycle=1000; D=cycle/f0; t=0:ts:D-ts %%Sinusoidal Signal Passing through Filter x=A*sin(2*pi*f0*t); m=990*(fs/f0); y=filter(bm,ak,x); figure('Name','Sin() signal response of Butterworth Filter','NumberTitle','off') subplot(2,1,1) plot(t(m:end),x(m:end)); title('Sine Signal') ylabel('Magnitude'); xlabel('Time'); subplot(2,1,2) plot(t(m:end),y(m:end)) ylabel('Magnitude'); xlabel('Time'); title('Sine Signal Response')
Jay Kothari Page 2 of 67
OUTPUT:-
Jay Kothari
Page 3 of 67
Jay Kothari
Page 4 of 67
Problem 2 Design and Implement a Digital Chebyshev Low Pass System with the following specifications: o Passband Frequency: 1000Hz o Passband Attenuation: 1db o Stopband Frequency: 12000Hz o Stopband Attenuation: 80db o Sampling Rate: 16000Hz Obtain and Plot the impulse response of the given digital low pass filter. Obtain and Plot the Magnitude and Phase responses of the given digital low pass filter. Verify the cut-off frequency of the filter from its Magnitude Response. Implement the Difference Equation by passing the samples of a sinusoidal signal of amplitude 0.9, frequency 1000Hz and number of cycles equal to 1000. Verify the output signal amplitude with the theoretical and expected amplitude.
MATLAB Code:clc clear all close all fpass = 1000; fstop = 12000; fs = 16000; nf = fs/2; ts = 1/fs; Wpass = 2*pi*fpass; Wstop = 2*pi*fstop; rp = 2; rs = 20; ap = 10^(-rp/20); as = 10^(-rs/20); epsilon = sqrt((1/(ap*ap))-1); alp = sqrt((1/(as*as))-1); N = acosh(alp/epsilon)/acosh(Wstop/Wpass); N = ceil(N); k = 0:1:2*N-1;
Jay Kothari
Page 5 of 67
uk = ((2*k+1)*pi)/(2*N); v = asinh(1/epsilon)/N; sk = Wpass*(sin(uk)*sinh(v)+j*cos(uk)*cosh(v)); sk = sk(N+1:end); disp(sk); %% Frequency Transformation zk = exp(sk*ts); ak = poly(zk); if(mod(N,2)==0) kd = sum(ak)/sqrt(1+(epsilon^2)); else kd = sum(ak); end bm= kd; figure impz(bm, ak); figure freqz(bm, ak); title('Frequency Response') %%Sinusoidal Signal A=0.9; f0=1000; ts=1/fs; cycle=1000; D=cycle/f0; t=0:ts:D-ts; x=A*sin(2*pi*f0*t); m=990*(fs/f0); y=filter(bm,ak,x); figure subplot(2,1,1)
Jay Kothari Page 6 of 67
plot(t(m:end),x(m:end)); title('Sine Signal') ylabel('Magnitude'); xlabel('Time'); subplot(2,1,2) plot(t(m:end),y(m:end)); title('Sine Signal Response') ylabel('Magnitude'); xlabel('Time');
Jay Kothari
Page 7 of 67
Jay Kothari
Page 8 of 67
Problem 3 Design and Implement an FIR system of order 127 and using Hamming Window samples and cut-off frequency 2000Hz and sampling rate fs = 32000. Obtain and Plot the impulse response of the given digital low pass filter. Obtain and Plot the Magnitude and Phase responses of the given digital low pass filter. Verify the cut-off frequency of the filter from its Magnitude Response. Implement the Difference Equation by passing the samples of a sinusoidal signal of amplitude 0.9, frequency 1000Hz and number of cycles equal to 1000. Verify the output signal amplitude with the theoretical and expected amplitude.
MATLAB Code:clc; clear all; close all; cf=2000; order = 127; win = window(@hamming,order); fs=32000; nf=fs/2; ts=1/fs; ncf=cf/nf; bm=fir1(order-1,ncf,'low',win); ak=1; figure impz(bm,ak); figure freqz(bm,ak); title('Frequency Response'); A=0.9; f0=1000; cycles=1000; D=cycles/f0; t=0:ts:D-ts; x=A*sin(2*pi*f0*t); y=filter(bm , ak, x);
Jay Kothari Page 9 of 67
m=fix(990*(fs/f0)); figure subplot(2,1,1); plot(t(m+1:end),x(m+1:end)); title('Sine Signal') ylabel('Magnitude'); xlabel('Time'); subplot(2,1,2); plot(t(m+1:end),y(m+1:end)); title('Sine Signal Response') ylabel('Magnitude'); xlabel('Time');
Jay Kothari 67
Page 10 of
OUTPUT:-
Jay Kothari 67
Page 11 of
Jay Kothari 67
Page 12 of
Problem 4 Calculate and plot Cn = (2*A*tau/T)*sinc(2*n*f0*tau) with A = 10, T = 1 milli sec and tau = 0.1 milli sec on n*f0 axis to depict 5 zero crossing points on both the negative and positive frequency axes. Repeat the above with T = 10000 milli sec and compare the following obtained in both the cases: o First Zero Crossing Frequency o Total Average Power, Partial and Percentage average powers contributed by the complex exponentials distributed between positive and negative first zero crossing frequencies. o Inter Sample Distance in the frequency domain. MATLAB Code:clc clear all close all msec=10^(-3); A = 10; %% For T=0.1 msec T=1*msec; f0 = 1/T; tau = 0.1*T; fz1 = 1/(2*tau); disp(['First zero crossing frequency : ',num2str(fz1)]) N1 = fz1/f0; N5 = 5*N1; n = -N5: 1: N5; cn = (2*A*tau/T)*sinc(2*n*f0*tau); figure subplot(2,1,1) stem(n*f0,cn); title('Sinc Function(T=0.1*msec)') ylabel('Magnitude'); xlabel('n*fs'); TAP = 2*A*A*tau/T; N5 = 5*N1;
Jay Kothari 67 Page 13 of
n = -N1: 1: N1; cn = (2*A*tau/T)*sinc(2*n*f0*tau); PAP = sum(cn.*cn); PCAP = (PAP/TAP)*100; ISD=f0; disp(['Total Average Power:',num2str(TAP)]); disp(['Partial Average Power:',num2str(PAP)]); disp(['Percentage Average Power:',num2str(PCAP)]); disp(['Ineter Sample Distance:',num2str(ISD)]); %% For T=10000 msec T=10000*msec; f0 = 1/T; tau=0.1*msec; fz1 = 1/(2*tau); N1 = fz1/f0; N5 = 5*N1; n = -N5: 1: N5; cn = (2*A*tau/T)*sinc(2*n*f0*tau); subplot(2,1,2) stem(n*f0,cn); title('Sinc Function(T=10000*msec)') ylabel('Magnitude'); xlabel('n*fs'); TAP = 2*A*A*tau/T; N5 = 5*N1; n = -N1: 1: N1; cn = (2*A*tau/T)*sinc(2*n*f0*tau); PAP = sum(cn.*cn); PCAP = (PAP/TAP)*100; ISD=f0; disp(['First zero crossing frequency : ',num2str(fz1)]) disp(['Total Average Power:',num2str(TAP)]); disp(['Partial Average Power:',num2str(PAP)]); disp(['Percentage Average Power:',num2str(PCAP)]);
Jay Kothari 67 Page 14 of
OUTPUT:Command Window:First zero crossing frequency : 5000 Total Average Power:20 Partial Average Power:18.0576 Percentage Average Power:90.2878 Ineter Sample Distance:1000
First zero crossing frequency : 5000 Total Average Power:0.002 Partial Average Power:0.0018056 Percentage Average Power:90.2823 Ineter Sample Distance:0.1
Jay Kothari 67
Page 15 of
Problem 5 Implement DFT and IDFT functions using the related mathematical relations as the basis. Find the DFT samples of X(k) of a rectangular pulse of amplitude 10 and having its pulse width equal to 2 msecs. Plot the magnitude and phase parts of X(k) along the frequency axis f. Find the average power of the above signal using time domain and frequency domain signal samples Find the DFT samples of X(k) of an exponentially decaying pulse given by alpha*exp(alpha*t)*u(t). Plot the magnitude and phase parts of X(k) along the frequency axis f. Find the average power of the above signal using time domain and frequency domain signal samples Find the DFT samples of X(k) of a triangular pulse of maximum amplitude 100 and pulse width 4 msec and centered around origin. Plot the magnitude and phase parts of X(k) along the frequency axis f. Find the average power of the above signal using time domain and frequency domain signal samples
MATLAB Code:clc clear all close all A = 10; ms = 10^-3; tau = 1*ms; fs = 32000; ts = 1/fs; nq = fs/2; % Rectangular Pulse L = tau/ts; M = 2*L + 1 N = input('Enter the value of N>M : '); x = [ones(1,1) ones(1,L) zeros(1,N-M) ones(1,L)]; n = 0:1:N-1; figure('Name','Rectangular pulse','NumberTitle','off')
Jay Kothari 67 Page 16 of
plot(n,x); title('Rectangular Pulse') X = dft(x,N); k = 0:1:N-1; f = k*fs/N; figure('Name','DFT version of rectangular pulse','NumberTitle','off') subplot(2,1,1); stem(f, abs(X)); title('Frequency Response'); subplot(2,1,2); stem(f, angle(X)); title('Phase Response'); %Exponentially Decaying Function alp = 10000; fc = alp/(2*pi); fm = 100*fc; fs = 2*fm; ts = 1/fs; T = 100/alp; f0 = 1/T; N = T/ts; n = 0:1:N-1; x = ts*alp*exp(-alp*n*ts); figure plot(n,x); title('Exponential decaying signal') X = dft(x,N); k = 0:1:N-1; f = k*fs/N; figure('Name','DFT version of exponential decaying signal','NumberTitle','off') subplot(2,1,1);
Jay Kothari 67 Page 17 of
stem(f, abs(X)); title('Frequncy Response'); subplot(2,1,2); stem(f, angle(X)); title('Phase Response'); disp(['fc = ',num2str(fc)]); TAP = (alp * (1 - exp(-2*alp*T)))/(2*T); N1 = fix(fc/f0); n = -N1:1:N1; cn = (alp*f0)./(alp+j*2*pi*n*f0); PAP = sum(abs(cn).*abs(cn)); PCAP = PAP * 100 / TAP; disp(['Partial Average Power of the exponentially decaying curve :',num2str(PAP)]); disp(['Total Average Power of the exponentially decaying curve : ',num2str(TAP)]); disp(['Percentage Average Power of the exponentially decaying curve : ',num2str(PCAP)]); % Triangular Pulse tau = 2*ms; fs = 32000; ts = 1/fs; nq = fs/2; t = -tau:ts:-ts; x1 = 50*t + 100; t = 0:ts:tau; x2 = -50*t + 100; T = 4*tau; f0 = 1/T; L = tau/ts; M = 2*L + 1 N = input('Enter the value of N>M : '); x = [x2 zeros(1,N-M) x1]; X = dft(x,N);
Jay Kothari 67 Page 18 of
k = 0:1:N-1; f = k*fs/N; figure subplot(2,1,1); stem(f, abs(X)); subplot(2,1,2); stem(f, angle(X)); TAP = 1/T*sum(x.^2) N1 = T/(2*tau); fz1 = 1/(2*tau); k1 = fz1*N/fs; X1 = [X(1:k1+1) X(N-k1:end)]; PAP = 1/(2*k1)*sum(abs(X1).^2) PCAP = 100* PAP/TAP
OUTPUT:Command Window:M= 65 Enter the value of N>M : 128 fc = 1591.5494 Partial Average Power of the exponentially decaying curve :245817.2134 Total Average Power of the exponentially decaying curve : 500000 Percentage Average Power of the exponentially decaying curve : 49.1634 M= 129 Enter the value of N>M : 256 TAP = 1.6109e+008 PAP = 7.6577e+007 PCAP = 47.5376
Jay Kothari 67
Page 19 of
Jay Kothari 67
Page 20 of
Jay Kothari 67
Page 21 of
Problem 6 Calculate and plot Cn = (*f0)/(+j*2**n*f0) with = 10000, f0 = 100Hz on n*f0 axis to depict 100 frequency components on both the negative and positive frequency axes. Identify the first Half Power frequency. Calculate and display the Total Average Power of a of the signal xp(t). Calculate the partial amount of average power contributed by the complex exponentials between the Half-Power Frequency points on the frequency axis. Find the percentage of average power contributed by the same complex exponentials. o Repeat the above exercise with = 10000.
MATLAB Code:clc clear all close all f0 = 100; %% For alp=10000 alp = 10000; T = 1/f0; N = 100; n = -N:1:N; cn = (alp*f0)./(alp+j*2*pi*n*f0); figure stem(n*f0, abs(cn)); title('Frequency Response'); xlabel('Frequency'); ylabel('Magnitude'); figure stem(n*f0, angle(cn)); title('Phase Response'); xlabel('Frequency'); ylabel('Magnitude'); TAP = (alp/(2*T))*(1-exp(-2*alp*T)); fc = alp/(2*pi); disp(['Half Power Frequency:',num2str(fc)]);
Jay Kothari 67 Page 22 of
N1 = fix(fc/f0); n = -N1:1:N1; cn = (alp*f0)./(alp+j*2*pi*n*f0); PAP = sum(abs(cn).*abs(cn)); PCAP = PAP*100/TAP; disp(['Partial Average Power :',num2str(PAP)]); disp(['Total Average Power : ',num2str(TAP)]); disp(['Percentage Average Power : ',num2str(PCAP)]); OUTPUT:Command Window:Half Power Frequency:1591.5494 Partial Average Power :245817.2134 Total Average Power : 500000 Percentage Average Power : 49.1634
Jay Kothari 67
Page 23 of
Jay Kothari 67
Page 24 of
Problem 7 Find and plot the impulse response of the discrete time system equivalent to RC system. Apply DFT/FFT for the obtained impulse response to get H(k) and plot the magnitude and Phase responses of the system across frequency values. Identify the half-power frequencies from the obtained plot. Implement the difference equation of the system by passing a sinusoidal signal of frequency f0 and amplitude 10. MATLAB Code:clc clear all close all kohms = 10^3; mfarads = 10^(-6); R = 10*kohms; C = 0.01*mfarads; alp = 1/(R*C); fc = alp/(2*pi); fm = 100*fc; fs = 2*fm; ts = 1/fs; a = exp(-alp*ts); T = 100/alp; N = T/ts; n = 0:1:N-1; h = alp*ts*a.^n; impz(h,1); title('Impulse Response in Time Domain'); H = dft(h, N); k = 0:1:N-1; f = k*fs/N; figure subplot(2,1,1); plot(f, abs(H));
Jay Kothari 67 Page 25 of
title('Frequency Response'); xlabel('Frequency'); ylabel('Magnitude');subplot(2,1,2); plot(f, angle(H)); title('Phase Response'); xlabel('Frequency'); ylabel('Magnitude'); bm = alp*ts; ak = [1, -a]; figure impz(bm, ak, 512); title('Impulse Response ') figure freqz(bm, ak) title('Frequency Response') A = 10; f0 = 1000; cycles = 1000; D = cycles/f0; t = 0:ts:D-ts; x = A*sin(2*pi*f0*t); y = filter(bm, ak, x); m = fix(990*fs/f0); figure subplot(2,1,1) plot(t(m+1:end), x(m+1:end)); title('Sine Signal ') ylabel('Magnitude'); xlabel('Time'); subplot(2,1,2) plot(t(m+1:end), y(m+1:end)); title('Sine Signal Response') ylabel('Magnitude'); xlabel('Time');
Jay Kothari 67 Page 26 of
OUTPUT:-
Jay Kothari 67
Page 27 of
Jay Kothari 67
Page 28 of
Jay Kothari 67
Page 29 of
Problem 8 Implement Goertzel Function on MATLAB and using the function implement a DTMF Signal Detection System on MATLAB. Matlab Code: close all;clear all figure(1) % DTMF tone generator fs=8000; t=[0:1:204]/fs; x=zeros(1,length(t)); x(1)=1; y852=filter([0 sin(2*pi*852/fs) ],[1 -2*cos(2*pi*852/fs) 1],x); y1209=filter([0 sin(2*pi*1209/fs) ],[1 -2*cos(2*pi*1209/fs) 1],x); y7=y852+y1209; subplot(2,1,1);plot(t,y7);grid ylabel('y(n) DTMF: number 7'); xlabel('time (second)') Ak=2*abs(fft(y7))/length(y7);Ak(1)=Ak(1)/2; f=[0:1:(length(y7)-1)/2]*fs/length(y7); subplot(2,1,2);plot(f,Ak(1:(length(y7)+1)/2));grid ylabel('Spectrum for y7(n)'); xlabel('frequency (Hz)'); figure(2) % DTMF detector (use Goertzel algorithm) b697=[1]; a697=[1 -2*cos(2*pi*18/205) 1]; b770=[1]; a770=[1 -2*cos(2*pi*20/205) 1]; b852=[1]; a852=[1 -2*cos(2*pi*22/205) 1]; b941=[1]; a941=[1 -2*cos(2*pi*24/205) 1]; b1209=[1]; a1209=[1 -2*cos(2*pi*31/205) 1]; b1336=[1]; a1336=[1 -2*cos(2*pi*34/205) 1]; b1477=[1]; a1477=[1 -2*cos(2*pi*38/205) 1] [w1, f]=freqz([1 -exp(-2*pi*18/205)],a697,512,8000); [w2, f]=freqz([1 -exp(-2*pi*20/205)],a770,512,8000); [w3, f]=freqz([1 -exp(-2*pi*22/205)],a852,512,8000); [w4, f]=freqz([1 -exp(-2*pi*24/205)],a941,512,8000); [w5, f]=freqz([1 -exp(-2*pi*31/205)],a1209,512,8000); [w6, f]=freqz([1 -exp(-2*pi*34/205)],a1336,512,8000); [w7, f]=freqz([1 -exp(-2*pi*38/205)],a1477,512,8000); subplot(2,1,1);plot(f,abs(w1),f,abs(w2),f,abs(w3), ... f,abs(w4),f,abs(w5),f,abs(w6),f,abs(w7));grid
Jay Kothari 67 Page 30 of
xlabel('Frequency (Hz)'); ylabel('BPF frequency responses'); yDTMF=[y7 0]; y697=filter(1,a697,yDTMF); y770=filter(1,a770,yDTMF); y852=filter(1,a852,yDTMF); y941=filter(1,a941,yDTMF); y1209=filter(1,a1209,yDTMF); y1336=filter(1,a1336,yDTMF); y1477=filter(1,a1477,yDTMF); m(1)=sqrt(y697(206)^2+y697(205)^2- ... 2*cos(2*pi*18/205)*y697(206)*y697(205)); m(2)=sqrt(y770(206)^2+y770(205)^2- ... 2*cos(2*pi*20/205)*y770(206)*y770(205)); m(3)=sqrt(y852(206)^2+y852(205)^2- ... 2*cos(2*pi*22/205)*y852(206)*y852(205)); m(4)=sqrt(y941(206)^2+y941(205)^2- ... 2*cos(2*pi*24/205)*y941(206)*y941(205)); m(5)=sqrt(y1209(206)^2+y1209(205)^2- ... 2*cos(2*pi*31/205)*y1209(206)*y1209(205)); m(6)=sqrt(y1336(206)^2+y1336(205)^2- ... 2*cos(2*pi*34/205)*y1336(206)*y1336(205)); m(7)=sqrt(y1477(206)^2+y1477(205)^2- ... 2*cos(2*pi*38/205)*y1477(206)*y1477(205)); m=2*m/205; th=sum(m)/4; %based on empirical measurement f=[ 697 770 852 941 1209 1336 1477]; f1=[0 4000]; th=[ th th]; x subplot(2,1,2);stem(f,m);grid hold; plot(f1,th); xlabel('Frequency (Hz)'); ylabel('Absolute output values');
Output:
Jay Kothari 67
Page 31 of
Jay Kothari 67
Page 32 of
Problem 9 Assuming an ideal and symmetrical frequency response of a low pass filter with the following specifications given by o H(w) = 1; for 0 w /2 and o H(w) = 0; Method. MATLAB Code: clc; clear all; close all; f = [0 0.25 0.25 1]; m = [1 1 0 0]; b = fir2(128,f,m); [h,w] = freqz(b,1,128); plot(f,m,w/pi,abs(h)) legend('Ideal','fir2 Designed') title('Comparison of Frequency Response Magnitudes' Output: for /2 < w
Design a FIR system with the order given by 128 (Even number) using Frequency Sampling
Jay Kothari 67
Page 33 of
Problem 10 Calculate and plot Cn = (2*A*tau/T)*sinc(2*n*f0*tau) with A = 10, f0 = 1000Hz and tau = 0.1* T on n*f0 axis to depict 5 zero crossing points on both the negative and positive frequency axes. Identify the first zero crossing frequency. Calculate and display the Total Average Power of a Rectangular Pulse Train. Calculate the partial amount of average power contributed by the complex exponentials between the first zero crossing points on the frequency axis. Find the percentage of average power contributed by the same complex exponentials.
MATLAB Code: clc clear all close all %Case A A = 10; mili = 10^-3; T = 1*mili; f0 = 1/T; tau = 0.1*mili; fz1 = 1/2/tau; disp(['First zero crossing frequency for T = 1ms: ',num2str(fz1)]); f5 = 5*fz1; n = -f5/f0:1:f5/f0; cn = (2*A*tau/T)*sinc(2*n*f0*tau); figure('Name','plot of Cn upto 5zero crossing frequency','NumberTitle','off') subplot(2,1,1); stem(n*f0,cn); title('n*f0 vs Cn plot for 5 zero crossing frequency for T=1ms'); grid on; % Total Average Power TAP = 2*A^2 * tau/T; N1 = T/(2*tau); n = -N1:1:N1; % Partial Average Power PAP = sum(cn.*cn); % Partial Average Power Contributed by exponential PACP = 100*PAP/TAP; disp(['Total Average Power for Tau = 0.1ms: ',num2str(TAP)]); disp(['Partial Average Power for Tau = 0.1ms: ',num2str(PAP)]); disp(['Percentage Average Power Contributed by Exponential for Tau = 0.1ms: ',num2str(PACP)]);
Jay Kothari 67 Page 34 of
disp(['Intersample Distance In Frequency Domain for Tau = 0.1ms: ',num2str(f0)]); %Case B A = 10; mili = 10^-3; T = 1*mili; f0 = 1/T; tau = 0.05*mili; fz1 = 1/2/tau; disp(['First zero crossing frequency for Tau = 0.05ms: ',num2str(fz1)]); f5 = 5*fz1; n = -f5/f0:1:f5/f0; cn = (2*A*tau/T)*sinc(2*n*f0*tau); subplot(2,1,2); stem(n*f0,cn); title('n*f0 vs Cn plot for 5 zero crossing frequency for T=0.05ms'); grid on; % Total Average Power TAP = 2*A^2 * tau/T; N1 = T/(2*tau); n = -N1:1:N1; % Partial Average Power PAP = sum(cn.*cn); % Partial Average Power Contributed by exponential PACP = 100*PAP/TAP; disp(['Total Average Power for Tau = 0.05ms: ',num2str(TAP)]); disp(['Partial Average Power for Tau = 0.05ms: ',num2str(PAP)]); disp(['Percentage Average Power Contributed by Exponentioal for Tau = 0.05ms: ',num2str(PACP)]); disp(['Intersample Distance In Frequency Domain for Tau = 0.05ms: ',num2str(f0)]);
Jay Kothari 67
Page 35 of
OUTPUT:Command Window:First zero crossing frequency : 5000 Total Average Power:20 Partial Average Power:18.0576 Percentage Average Power:90.2878
First zero crossing frequency : 10000 Total Average Power:10 Partial Average Power:9.0283 Percentage Average Power:90.2827
Jay Kothari 67
Page 36 of
Problem 11 Given three sinusoids with the following amplitudes and phases x1 t 5 cos2 500 t x2 t 5 cos2 1200 t 0.25 x3 t 5 cos2 1800 t 0.5
Create a MATLAB program to sample each sinusoid and generate a sum of three
sinusoids, that is x(n) = x1(n)+x2(n)+x3(n) using a sampling rate of 8000Hz and plot the sum x(n) over a range of time that will exhibit approximately 0.1 second. Use the user defined dft() function and MATLAB built-in function fft() to compute the
DFT coefficients and plot and examine the examine the spectrum of the signal.
MATLAB Code:clc; clear all; close all; fs=8000; ts=1/fs; n=0:(0.1*fs)-1; x1=5*cos(2*pi*500*ts*n); x2=5*cos(2*pi*1200*ts*n+0.25*pi); x3=5*cos(2*pi*1800*ts*n+0.5*pi); x=x1+x2+x3; stem(n,x) title('Sine signals Summation (x signal)') xlabel('n(samples)') ylabel('Magnitude') M=length(x); %DFT X=dft(x,M); k=0:M-1;
Jay Kothari 67
Page 37 of
f=k*fs/M; figure subplot(2,1,1) plot(f,abs(X)); title('Mangnitude Vs Frequency(DFT)'); xlabel('Freq.') ylabel('Magnitude') subplot(2,1,2) plot(f,angle(X)) title('Phase Vs Frequency(DFT)'); xlabel('Freq.') ylabel('Magnitude') %FFT X1=fft(x,M); figure subplot(2,1,1) plot(f,abs(X1)); title('Magnitude Vs Frequency(FFT)'); xlabel('Freq.') ylabel('Magnitude') subplot(2,1,2) plot(f,angle(X1)) title('Phase Vs Frequency(FFT)'); xlabel('Freq.') ylabel('Magnitude')
Jay Kothari 67
Page 38 of
OUTPUT:-_
Jay Kothari 67
Page 39 of
Jay Kothari 67
Page 40 of
Problem 12 Using the user defined dft() function obtain the spectral coefficients of o Rectangular Window o Hamming Window o Hanning Window o Blackman Window Assume window length of 255 and plot the magnitude and phase spectra of all the windows individually and compare them MATLAB Code:clc; close all; clear all; win=window(@rectwin,255); figure subplot(2,4,1) plot(win); bm=dft(win,255) ak=1; subplot(2,4,5); freqz(bm, ak); title('Magnitude & Phase Spectra of Rectangular Window'); win=window(@hann,255); figure subplot(2,4,2); plot(win); bm=dft(win,255); ak=1; subplot(2,4,6); freqz(bm, ak); title('Magnitude & Phase Spectra of Hanning Window'); win=window(@hamming,255); figure
Jay Kothari 67
Page 41 of
subplot(2,4,3); plot(win); bm=dft(win,255); ak=1; subplot(2,4,7); freqz(bm, ak); title('Magnitude & Phase Spectra of Hamming Window'); win=window(@blackman,255); figure subplot(2,4,4); plot(win); bm=dft(win,255); ak=1; subplot(2,4,8); freqz(bm, ak); title('Magnitude & Phase Spectra of Blackman Window');
Jay Kothari 67
Page 42 of
OUTPUT:-
Jay Kothari 67
Page 43 of
Jay Kothari 67
Page 44 of
Problem 13 Using MATLAB, design a fourth-order digital lowpass Chebyshev filter with cut-off frequency of 1.5kHz and a 0.5dB ripple at a sampling rate of 8,000Hz. Determine the transf er function and difference equation Plot the Magnitude and Phase Response of the filter.
MATLAB Code:-
clc; close all; clear all; N=4; fpass = 1500; fs = 8000; nf = fs/2; ts = 1/fs; Wpass = 2*pi*fpass; rp = 0.5; ap = 10^(-rp/20); epsilon = sqrt((1/(ap*ap))-1); k = 0:1:2*N-1; uk = ((2*k+1)*pi)/(2*N); v = asinh(1/epsilon)/N; sk = Wpass*(sin(uk)*sinh(v)+j*cos(uk)*cosh(v)); sk = sk(N+1:end); disp(sk); zk = exp(sk*ts); ak = poly(zk); if(mod(N,2)==0) kd = sum(ak)/sqrt(1+(epsilon^2)); else kd = sum(ak); end
Jay Kothari 67 Page 45 of
OUTPUT:Command Window:1.0e+003 * -1.6527 - 9.5780i -3.9899 - 3.9673i -3.9899 + 3.9673i -1.6527 + 9.5780i
Transfer function: (0.303-1.31e-017i) ---------------------------------------------------------s^4 - (1.662-7.772e-016i) s^3 + (1.665-1.332e-015i) s^2 (0.9257-7.772e-016i)s +(0.244-2.359e-016i)
Jay Kothari 67
Page 46 of
Problem 14 Design a second order digital bandstop Butterworth filter with a centre frequency of 1.8kHz and a bandwidth of 200Hz and a passband ripple of 3dB at a sampling rate of 8,000Hz. Determine the transfer function and difference equation of the system. Use MATLAB to plot the magnitude and phase frequency responses. MATLAB Code:clc; clear all; close all; N=2; fs=8000; nf=fs/2; ts=1/fs; fp=1902.77; fstop=1702.77; fmp=fp/nf; fms=fstop/nf; rp=3; ap=10^(-rp/20); ap_lin=(1/(ap*ap))-1; Wp=2*pi*fp; Ws=2*pi*fstop; Wc=Wp/((ap_lin)^(1/(2*N))); fc=Wc/(2*pi); fmc=fc/nf; k=0:1:N-1; sk=Wc*exp(j*(((pi*(2*k+1)/(2*N))) +(pi/2))); disp(sk); num=Wc^N; den=poly(sk); [bm,ak]=bilinear(num,den,fs); [num1,den1] = iirlp2bs(bm, ak, fmc, [fms, fmp]); tf(num1,den1) figure freqz(num1,den1);
Jay Kothari 67
Page 47 of
title('Frequency Response'); OUTPUT:Command Window:1.0e+003 * -8.4638 + 8.4638i -8.4638 - 8.4638i Transfer function:
Jay Kothari 67
Page 48 of
Problem 15 Given a DSP system with a sampling rate set up to be 8,000Hz, develop a 800Hz single-tone generator using a digital IIR filter by completing the following steps o Determine the digital IIR filter transfer function o Determine the DSP equation o Plot the tone thus generated for a duration of 0.01 sec MATLAB Code:clc; close all; clear all; fs=8000; ts=1/fs; t=0:ts:0.01; x=zeros(1,length(t)); x(1)=1; y=filter([0 sin(2*pi*800/fs) ],[1 -2*cos(2*pi*800/fs) 1],x); plot(t,y);grid ylabel('y(n)'); xlabel('time (second)'); TF=tf([0 sin(2*pi*800/fs) ],[1 -2*cos(2*pi*800/fs) 1])
Jay Kothari 67
Page 49 of
Jay Kothari 67
Page 50 of
Problem 16 Given x(0) = 1, x(1) = 1, x(2) = 0, x(3) = -1, use the Goertzel algorithm to compute the following DFT coefficients and their amplitude spectra o X(0) o X(1) o |X(0)|2 o |X(1)|2
MATLAB Code:clc; close all; clear all; x(1) = 1; x(2) = 2; x(3) = 3; x(4) = 4; N=4; X1=goertzel(x,1); subplot(4,1,1); stem(abs(X1)); title('Amplitude Spectra of|X(0)|') xlabel('N(Samples)') ylabel('Amplitude') X2=goertzel(x,2); subplot(4,1,2); stem(abs(X2)); xlabel('N(Samples)') ylabel('Amplitude') title('Amplitude Spectra of|X(1)|') x1=abs(X1)*abs(X1); subplot(4,1,3); stem(abs(x1)); xlabel('N(Samples)') ylabel('Amplitude')
Jay Kothari 67
Page 51 of
title('Amplitude Spectra of|X(0)|^(2)') x2=abs(X2)*abs(X2); subplot(4,1,4); stem(abs(x2)); xlabel('N(Samples)') ylabel('Amplitude') title('Amplitude Spectra of|X(1)|^(2)') disp(['X(0):',num2str(X1)]) disp(['X(1):',num2str(X2)]) disp(['|X(0)|^(2):',num2str(x1)]); disp(['|X(1)|^(2):',num2str(x2)]); OUTPUT:Command Window:X(0):10 X(1):-2+2i |X(0)|^(2):100 |X(1)|^(2):8
Jay Kothari 67
Page 52 of
Problem 17 Design a 31-tap lowpass & highpass FIR filters whose cut-off frequency is 2,500Hz using the following window functions. Assume that the sampling rate is 8kHz. o Hamming Window o Hanning Window o Blackman Window
MATLAB Code:n=31; fs=8000; nf=fs/2; wn=2500; Wn=wn/nf; %Low Pass Filter lphamm = fir1(n,Wn,hamming(n+1)); figure('Name','Lowpass Filter using Hamming Window','NumberTitle','off') freqz(lphamm,1,fs); title('Lowpass Filter using Hamming Window') lphann = fir1(n,Wn,hanning(n+1)); figure('Name','Lowpass Filter using Hanning Window','NumberTitle','off') freqz(lphann,1,fs); title('Lowpass Filter using Hanning Window') lpblac = fir1(n,Wn,blackman(n+1)); figure('Name','Lowpass Filter using Blackman Window','NumberTitle','off') freqz(lpblac,1,fs); title('') %High Pass Filter if mod(n,2)==1 n=n+1; end lhhamm = fir1(n,Wn,'high',hamming(n+1)); figure('Name','Highpass Filter using Hamming Window','NumberTitle','off') freqz(lhhamm,1,fs); title('Highpass Filter using Hamming Window')
Jay Kothari 67
Page 53 of
lhhann = fir1(n,Wn,'high',hanning(n+1)); figure('Name','Highpass Filter using Hanning Window','NumberTitle','off') freqz(lhhann,1,fs); title('Highpass Filter using Hanning Window') lhblac = fir1(n,Wn,'high',blackman(n+1)); figure('Name','Highpass Filter using Blackman Window','NumberTitle','off') freqz(lhblac,1,fs); title('Highpass Filter using Blackman Window')
OUTPUT:-
Jay Kothari 67
Page 54 of
Jay Kothari 67
Page 55 of
Jay Kothari 67
Page 56 of
Jay Kothari 67
Page 57 of
Problem 18 Design a 41-tap bandpass FIR filter with the lower and upper cot-off frequencies being 2,500Hz and 3,000Hz respectively, using the following window functions. Assume a sampling rate of 8kHz. o Hanning Window o Hamming Window o Blackman Window List the FIR filter coefficients and plot the frequency responses for each design.
MATLAB Code:clc; close all; clear all; N=41; fs=8000; nf=fs/2; wp=2500; ws=3000; wp1=wp/nf; ws1=ws/nf; wn=[wp1 ws1]; w = hamming(N+1); bphamm = fir1(41,wn,w); figure('Name','Bandpass Filter using Hamming Window','NumberTitle','off') freqz(bphamm,1,fs) title('Bandpass Filter using Hamming Window') w=hanning(N+1); bphann = fir1(41,wn,w); figure('Name','Bandpass Filter using Hanning Window','NumberTitle','off') freqz(bphann,1,fs) title('Bandpass Filter using Hanning Window') w=blackman(N+1); bpblac= fir1(41,wn,w); figure('Name','Bandpass Filter using Blackman Window','NumberTitle','off') freqz(bpblac,1,fs) title('Bandpass Filter using Blackman Window')
Jay Kothari 67
Page 58 of
OUTPUT:-_
Jay Kothari 67
Page 59 of
Jay Kothari 67
Page 60 of
Problem 19 Given the difference equation with the input-output relationship of a certain initially relaxed DSP system (all initial conditions are zero) y(n)-0.4 y(n-1)+0.29 y(n-2) = x(n) + 0.5 x(n-1) Find the impulse response h(n) and frequency response H(w) of the above filter (using MATLAB) Find the step response of the system (using MATLAB) MATLAB Code:clc; clear all; close all; num=[1 0.5]; den=[1 -0.4 0.29]; sys=tf(num,den,-1); z=tf('z',-1) impz(num,den); figure freqz(num,den); title('Frequency Response') figure step(sys) title('Step Response of System')
Jay Kothari 67
Page 61 of
OUTPUT:Command Window:Transfer function: z + 0.5 -----------------z^2 - 0.4 z + 0.29 Sampling time: unspecified
Jay Kothari 67
Page 62 of
Jay Kothari 67
Page 63 of
Problem 20 Write a MATLAB program to read speech data from a PCM formatted speech signal and for passing it through Pre-Emphasis and De-Emphasis systems. Also write the output signal from the de-Emphasis System into an output PCM formatted signal. MATLAB Code:close all; clear all fs = 8000;
% Sampling rate
%Pre-Emphasis alpha =0.9; % Degree of pre-emphasis figure(1); freqz([1 (-alpha)],1,512,fs); % Calculate and display frequency responses t=0:(1/fs):1 x1=sin(2*pi*100*t)+sin(2*pi*1000*t)+sin(2*pi*10000*t); %test signal on behalf of speech signal figure(2); y = filter([1 -alpha],1,x1); % Filtering test signal subplot(2,1,1), plot(x1,'k') ylabel('test signal') title('test signal') subplot(2,1,2),plot(y,'k');grid ylabel('Filtered samples') xlabel('Number of samples'); title('Pre-emphasized test signal') figure(3); N = length(x1); % Length of test signal Axk =(abs(fft(x1.*hamming(N)')))/ N; % Two-sided spectrum of test signal Ayk = (abs(fft(y.*hamming(N)')))/ N; % Two-sided spectrumof pre-emphasized test signal f=[0:N/2]*fs/N; Axk(2:N)=2*Axk(2:N); % Get one-sided spectrum of test signal Ayk(2:N)= 2*Ayk(2:N); % Get one-sided spectrum of filtered test signal subplot(2,1,1), plot(f,Axk(1:N/2 + 1),'k');grid ylabel('Amplitude spectrum Ak') title('Original test signal'); subplot(2,1,2),plot(f,Ayk(1:N/2 + 1),'k');grid ylabel('Amplitude spectrum Ak') xlabel('Frequency (Hz)'); title('Preemphasized test signal');
Jay Kothari 67
Page 64 of
%De-Emphasis y1=filter(1,[1 (-alpha)],y); figure(4) title('Original test signal'); subplot(2,1,2) subplot(2,1,1) plot(x1,'k') plot(y1,'k') xlabel('Frequency (Hz)'); title('De-emphasized test signal') OUTPUT:-_
Jay Kothari 67
Page 65 of
Jay Kothari 67
Page 66 of
Jay Kothari 67
Page 67 of