yading@10: function y= stpt(x,w,N,H,t) yading@10: M=length(w); % Window size yading@10: pin=0; % Start pointer yading@10: pend=length(x)-M; % End pointer yading@10: y=zeros(1,length(x)); % Inicial. output yading@10: npeaks=0; % Number of peaks yading@10: w=w./sum(w); % Analy. Windw. Norm. yading@10: w_out=hanning(M)'; % Synthesis window. yading@10: w_out=w_out./sum(w_out); % Synth. Windw. Norm. yading@10: while(pint).*(Xmag(2:N/2)>Xmag(3:N/2+1)).*(Xmag(2:N/2)>Xmag(1:N/2-1))); % Find the local max. yading@10: npeaks=npeaks+length(ploc); yading@10: pphase=Xphase(ploc); % Save phase values yading@10: pmag=Xmag(ploc); % Save mag. values yading@10: %plot_peaks(Xmag,Xphase,ploc,t); % Plotting peaks yading@10: Xmag=zeros(1,N/2+1)-1000; % Modifying Xmag... yading@10: Xphase=zeros(1,N/2+1); % Modifying Xphase... yading@10: %ploc=round(ploc.*0.96); % Transposition (fx) yading@10: %ploc=10:10:10*length(ploc); % Harmonics mapping(fx) yading@10: Xmag(ploc)=pmag; % Add the mag maxs. yading@10: Xphase(ploc)=pphase; % Add the phase maxs. yading@10: %---Synthesis yading@10: Y(1:N/2+1) = 10.^(Xmag/20).*exp(1i.*Xphase);% Generate posit. freq. yading@10: Y(N/2+2:N) = conj(fliplr(Y(2:N/2))); % Generate negat. freq yading@10: fftbuffer_out=real(ifft(Y)); % Clean the signal yading@10: fftbuffer_out=circshift(fftbuffer_out,[0,+(M-1)/2]); yading@10: % Undo zero-phasing yading@10: y(pin+1:pin+M)=y(pin+1:pin+M)+H*N*fftbuffer_out(1:M).*w_out; yading@10: % Overlap-add method yading@10: pin=pin+H; % Advance pointer yading@10: end