语音处理快速傅里叶变换xf = np.fft.rfft(xs,fft_size)/fft_size之后信号长度没有变为fft_size/2 +1 长度仍然是xs的长度,按理来说频率个数应为:np.linspace(0, sample_rate/2, fft_size/2+1) 但是这样就会报错:
ValueError: x and y must have same first dimension, but have shapes (257,) and (512, 257)
如果用人工生成的周期信号这样处理不会有上述问题,但是使用wav的语音信号输入,就会出来经过rfft函数信号长度不变的情况,有没有哪位大佬知道这是为啥吗?
def plot_freq(signal, sample_rate, fft_size=512):
xs= signal[:fft_size]
xf = np.fft.rfft(xs,fft_size)/fft_size
freqs = np.linspace(0, sample_rate//2, fft_size/2+1)
xfp = 20 * np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
print(len(xf))
print(len(freqs))
plt.figure(figsize=(20, 5))
plt.plot(freqs, xfp)
plt.xlabel('Freq(hz)')
plt.ylabel('dB')
plt.grid()
plt.show()