yading@10: function y=peaks(x,w,N,H,t) yading@10: %Analysis/sysntesis of a sound using the peaks yading@10: %of the short-time fourier transform yading@10: %x: input sound yading@10: %w: analysis window (odd size) yading@10: %N: FFT size yading@10: %H: hop size yading@10: %t: treshold in negative dB yading@10: %y: output sound yading@10: yading@10: %Internal variables yading@10: M=length(w); yading@10: N2=N/2+1; yading@10: soundlength=length(x); yading@10: hM=(M-1)/2; yading@10: yading@10: %Pointers yading@10: pin=1+hM; yading@10: pend=soundlength-hM; yading@10: yading@10: %Initialize buffers yading@10: fftbuffer=zeros(N,1); yading@10: yw=zeros(M,1); yading@10: y=zeros(soundlength,1); yading@10: yading@10: while pint).*(mX(2:N2-1)>mX(3:N2)).*(mX(2:N2-1)>mX(1:N2-2))); %Peak search (levels above threshold) yading@10: pmag=mX(ploc); %Find the peak magnitude yading@10: pphase=pX(ploc); %Find the peak phase yading@10: posipeak=length(ploc)/2; %Just positive peaks yading@10: yading@10: axis=linspace(0,pi,abs(N2)); %Axis for the whole frequency plotting yading@10: axis_peak=axis(ploc(1:num_peak));%Axis for just the peaks plotting yading@10: yading@10: subplot(2,1,1); plot(axis,mX); hold off ; %Magnitude plotting yading@10: plot(axis_peak,pmag(1:posipeak),'rx');%Magnitude peaks plot red x’s yading@10: subplot(2,1,2); plot(axis,pX); hold off ;%Phase plotting yading@10: plot(axis_peak,pphase(1:posipeak),'rx');%Phase peaks plot red x’s yading@10: yading@10: pin=pin+H; %Advance the pointer yading@10: end