對于給定的音頻信號,我希望將其分成 50 毫秒的塊以執行傅里葉變換。問題是當我在 Numpy 中使用通常的拆分方法時,由于突然拆分,它會添加一些高頻分量。
所以要解決這個問題,我聽說我們必須使用適當的視窗。使用 numpy 函式進行分割相當于使用矩形視窗,這在信號處理中是一種不太聰明的方法!
所以我需要幫助我如何使用 Blackman 視窗將我的音頻信號拼接成塊。
uj5u.com熱心網友回復:
所以這是我在音頻信號處理中用于類似應用程式的內容。確切地說,我正在為歌曲制作頻譜圖查找器。為此,我還想找到小塊的傅立葉變換。
spacing = 0.1 # seconds
window_dura = 0.2 #seconds
signal_N = len(data) #length of whole audio
window_N = int(sample_rate * window_dura)
spacing_N = int(spacing * sample_rate)
#blackman nuttel window
a0,a1,a2,a3 = 0.3635819,0.4891775,0.1365995,0.0106411
xWindow = np.arange(0,window_N,1)
yWindow = a0 - a1 * np.cos(2 * np.pi * xWindow / window_N) a2 * np.cos(4 * np.pi * xWindow / window_N) -a3 * np.cos(6 * np.pi * xWindow / window_N)
n = int((signal_N - window_N) / spacing_N) # number of chunks targetable (window touches the starting point
# ... total does not exceed signal length)
window_Array = np.zeros(shape=(n,siganl_N)) # all windows horizontally stacked
print("r3:shape",window_Array.shape)
for i in range(n):
window_Array[i,i*spacing_N:i*spacing_N window_N] = yWindow
另請查看這些視窗是如何對齊的(僅顯示前 10 個視窗)
#See how the window_Array's each "window with full duration" looks like
max_plot_N = 10
fig,ax = plt.subplots(min(max_plot_N,n),1,figsize=(30,4*min(max_plot_N,n)))
for i in range(n)[:max_plot_N]:
ax[i].plot(window_Array[i])
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/511879.html
上一篇:Pandas-計算均值和方差
