%Matlab file used for class demo conducted during Session 23 %illustrating efficacy of M-Channel PR Filter Bank %when arbitrary FIR analysis filters of length M are used %Three examples are illustrated: M pt DFT matrix, %MxM Hadamard matrix, and even a case where the filters %are random Gaussian vectors of length M clf clear all set(0,'defaultaxesfontsize',20); %Set up M-channel DFT filter bank: M=8; %H=dftmtx(M); %H=hadamard(M); H=randn(M,M); Gt=inv(H).'; G=Gt(:,M:-1:1); % 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 x_0 [n] through x_M-1 [n] for m=1:M; W(m,:)=conv(x,H(m,:)); X(m,:)=W(m,1:M:length(W(m,:))); end %create y_0[n] and y_M-1 [n] for m=1:M; Z(m,:)=zeros(1,M*length(X(m,:))); Z(m,1:M:length(Z(m,:)))=X(m,:); Y(m,:)=conv(Z(m,:),G(m,:)); end y=zeros(1,length(Y(1,:))); for m=1:M; y=y+Y(m,:); end y=real(y); input('QMF Output played back at Fs=10 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 responses h[n] h0=H(1,:); h1=H(2,:); 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] x0=X(1,:); x1=X(2,:); 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)');