I want to get frequencies from amplitudes and I'm following Chap 5.1.1 from Speech Signal Processing by Praat
As the in pictures, I will multiply the signal $s(t)$ with the Hanning window $w(t)$, find its normalized autocorrelation $r_a(\tau)$, and divide by $r_w(\tau)$, which is the normalized autocorrelation of $w(t)$. In the end, I will get the corrected autocorrelations $r(\tau)$.
I understand that diving $r_w$ should somehow rescale $r_a$, but the $r_w$ I got takes negative value, and $r$ gets large where $r_w$ is close to zero. How can I get an $r_w$ as in the picture?
Below are my codes to get $r_w$:
def serial_cov(wave:List[int], lag:int) -> int: """ Returns covariance of a signal with a lagged version of itself """ global WINDOW_LEN n=len(wave) y1=wave[lag:] y2=wave[0:WINDOW_LEN - lag] num = float(np.cov(y1,y2,bias=True)[0,1]) return num hann = np.hanning(WINDOW_LEN) plt.plot(hann) plt.title("Hann window amplitude") plt.show() r0_hann = float(np.cov(hann, hann, bias = True)[0,0]) hann_autocorr =  for i in range(MAX_LAG+1): ri_hann = serial_cov(hann,i) hann_autocorr.append(ri_hann/r0_hann)