%Matlab file used for class demo conducted during Session 20 %illustrating efficacy of Two-Channel PR Filter Bank %based on Haar Mother Wavelet h[n]={1,1}. The QMF is %applied to a word utterance sampled at 12.5 KHz. clf clear all set(0,'defaultaxesfontsize',20); %Set up 2-channel QMF filter bank: N=2; h=[1 1]; h0=h; h1=(-1).^(0:N-1).*h; g0=h; g1=-h1; data=getspeech('00f1s2t0.wav'); Fs=12500; clf plot(data) end1=input('end1?'); end2=input('end2?'); xr=data(end1:end2); dl=end2-end1+1; %change sampling rate to 10 KHz x=resample(xr,4,5); Fs=(4/5)*Fs; input('Utterance played back at 10 KHz sampling rate'); soundsc(x,Fs) %create x0[n] and x1[n] w0=conv(x,h0); x0=w0(1:2:length(w0)); w1=conv(x,h1); x1=w1(1:2:length(w1)); %create y0[n] and y1[n] z0=zeros(1,2*length(x0)); z0(1:2:length(z0))=x0; z1=zeros(1,2*length(x1)); z1(1:2:length(z1))=x1; y0=conv(z0,g0); y1=conv(z1,g1); y=y0+y1; input('QMF Output played back at Fs=12.5 KHz'); soundsc(y,Fs) %plot and compare DTFT's of x[n] and y[n] domega=2*pi/8192; omega=-pi:domega:pi-domega; yf1=abs(fftshift(fft(x,8192))); yf2=abs(fftshift(fft(y,8192))); subplot(211) plot(omega,yf1,'Linewidth',3) axis([-pi pi 0 max(yf1)]) title('DTFT of original utterance'); xlabel('omega (radians/s)'); subplot(212) plot(omega,yf2,'Linewidth',3) axis([-pi pi 0 max(yf2)]) title('DTFT of output of QMF'); xlabel('omega (radians/s)'); %plot filter response h[n] hlf=abs(fftshift(fft(h0,512))); hpf=abs(fftshift(fft(h1,512))); input('Plot DTFT of h0[n] and h1[n]') clf domega=2*pi/512; omega=-pi:domega:pi-domega; plot(omega,hlf,'b','Linewidth',4) axis([-pi pi 0 max(hlf)]) hold on plot(omega,hpf,'r','Linewidth',4) legend('H0(w)','H1(w)'); title('Frequency Response of h0[n] and h1[n]'); xlabel('omega (radians/s)'); hold off pause %plot and compare DTFT's of x0[n] and x1[n] domega=2*pi/4096; omega=-pi:domega:pi-domega; xf1=abs(fftshift(fft(x0,4096))); xf2=abs(fftshift(fft(x1,4096))); subplot(211) plot(omega,xf1,'Linewidth',3) axis([-pi pi 0 max(xf1)]) title('DTFT of x0[n]'); xlabel('omega (radians/s)'); subplot(212) plot(omega,xf2,'Linewidth',3) axis([-pi pi 0 max(xf2)]) title('DTFT of x1[n]'); xlabel('omega (radians/s)');