% G. Dempsey % Bradley University % 2/23/2009 % delete W,b initialization to zero, newlin does this % Neural Networks: HW12.m clear % get time domain info for 6 students y1=wavread('olee.wav'); % open for Lee y2=wavread('glee.wav'); % give me for Lee y3=wavread('ojoel.wav'); y4=wavread('gjoel.wav'); y5=wavread('ojeff.wav'); y6=wavread('gjeff.wav'); y7=wavread('ocurtis.wav'); y8=wavread('gcurtis.wav'); y9=wavread('okurt.wav'); y10=wavread('gkurt.wav'); y11=wavread('obecky.wav'); y12=wavread('gbecky.wav'); % eliminate DC content m1=mean(y1);m2=mean(y2);m3=mean(y3); m4=mean(y4);m5=mean(y5);m6=mean(y6); m7=mean(y7);m8=mean(y8);m9=mean(y9); m10=mean(y10);m11=mean(y11);m12=mean(y12); y1=y1-m1;y2=y2-m2;y3=y3-m3;y4=y4-m4; y5=y5-m5;y6=y6-m6;y7=y7-m7;y8=y8-m8; y9=y9-m9;y10=y10-m10;y11=y11-m11; y12=y12-m12; % normalize data y1=y1/max(abs(y1));y2=y2/max(abs(y2)); y3=y3/max(abs(y3));y4=y4/max(abs(y4)); y5=y5/max(abs(y5));y6=y6/max(abs(y6)); y7=y7/max(abs(y7));y8=y8/max(abs(y8)); y9=y9/max(abs(y9));y10=y10/max(abs(y10)); y11=y11/max(abs(y11));y12=y12/max(abs(y12)); disp('Compute FFT- press any key') pause % setup code for frequency response of input signals (fft) Npts=256; % 256 pt FFT to distinquish freuencies % freq div= 8KHz/256= 31.25 Hz x1=fft(y1,Npts); % take FFT x1=abs(x1); % take absolute value % normalize data x1=x1/max(x1); % do other voices x2=fft(y2,Npts);x2=abs(x2);x2=x2/max(x2); x3=fft(y3,Npts);x3=abs(x3);x3=x3/max(x3); x4=fft(y4,Npts);x4=abs(x4);x4=x4/max(x4); x5=fft(y5,Npts);x5=abs(x5);x5=x5/max(x5); x6=fft(y6,Npts);x6=abs(x6);x6=x6/max(x6); x7=fft(y7,Npts);x7=abs(x7);x7=x7/max(x7); x8=fft(y8,Npts);x8=abs(x8);x8=x8/max(x8); x9=fft(y9,Npts);x9=abs(x9);x9=x9/max(x9); x10=fft(y10,Npts);x10=abs(x10);x10=x10/max(x10); x11=fft(y11,Npts);x11=abs(x11);x11=x11/max(x11); x12=fft(y12,Npts);x12=abs(x12);x12=x12/max(x12); % save data for ANN training x1=x1(1:48); % 0 to 1500 Hz only (48 inputs) x2=x2(1:48);x3=x3(1:48);x4=x4(1:48);x5=x5(1:48); x6=x6(1:48);x7=x7(1:48);x8=x8(1:48);x9=x9(1:48); x10=x10(1:48);x11=x11(1:48);x12=x12(1:48); disp('Press any key to start training') pause % Define input pattern P = [x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12]; % Define Targets: T = [1 -1 1 -1 1 -1 1 -1 1 -1 1 -1]; % build a matrix (2,48) with column 1 all 0's (min value of input components) % and column 2 all 1's (max value of input components) c1=zeros(48,1); c2=ones(48,1); PR=[c1 c2]; % Setup the Network % net = newlin(PR,S,ID,LR) % % NEWLIN(PR,S,ID,LR) takes these arguments, % PR - Rx2 matrix of min and max values for R input elements. % S - Number of elements in the output vector. % ID - Input delay vector, default = [0]. % LR - Learning rate, default = 0.01; % and returns a new linear layer. % default: weights, bias = 0 net=newlin(PR,1,0,0.005); % TRAINING THE NETWORK % ==================== % Widrow-Hoff rule net.trainParam.goal = 0.0; % Sum-squared error goal. net.trainParam.epochs = 1000; % set maximum epochs net.performFcn='sse'; % Training begins...please wait... [net,tr] = train(net,P,T); % ...and finishes. disp('end of training') % Display Training Results disp('press any key to see actual outputs for 12 desired targets') pause A=sim(net,P) % Display Test Set Results disp('press any key to see test set outputs') % get time domain info for next 2 test subjects y13=wavread('ogary.wav'); y14=wavread('ggary.wav'); y15=wavread('odana.wav'); y16=wavread('gdana.wav'); % eliminate DC content m13=mean(y13); m14=mean(y14); m15=mean(y15); m16=mean(y16); y13=y13-m13; y14=y14-m14; y15=y15-m15; y16=y16-m16; % normalize data y13=y13/max(abs(y13)); y14=y14/max(abs(y14)); y15=y15/max(abs(y15)); y16=y16/max(abs(y16)); disp('Compute FFT for test subjects') pause x13=fft(y13,Npts); x13=abs(x13); x13=x13/max(x13); x14=fft(y14,Npts); x14=abs(x14); x14=x14/max(x14); x15=fft(y15,Npts); x15=abs(x15); x15=x15/max(x15); x16=fft(y16,Npts); x16=abs(x16); x16=x16/max(x16); % save data for ANN testing x13=x13(1:48); x14=x14(1:48); x15=x15(1:48); x16=x16(1:48); % now test ANN PT=[x13 x14 x15 x16]; A2=sim(net,PT) disp('end of testing')