Функция записи sd.rec()
возвращает двумерный массив пустышек формы [44100,1].Размер 1 связан с номером канала (здесь 1).Чтобы проверить это, наберите:
print( recording.shape)
Затем выполняется dft для последнего измерения длины 1. Следовательно, ничего не меняется, и yk
полностью идентичен recording
.
Чтобы исправить это, к recording[:,0]
можно применить вещественное к сложному ДПФ np.fft.rfft()
.Кроме того, окно Tuckey может быть добавлено, чтобы умерить эффект от рассмотрения кадра непериодического сигнала как периода периодического сигнала: разрыв на краю вводит скачкообразные частоты (спектральный недостаток) (см. оконная функция ).
from scipy import signal
...
N = ys.shape[0]
print(N , ys.shape)
L = N/fs
tuckey_window=signal.tukey(N,0.01,True) #generate the Tuckey window, widely open, alpha=0.01
ysc=ys[:,0]*tuckey_window #applying the Tuckey window
yk = np.fft.rfft(ysc) #real to complex DFT
k = np.arange(yk.shape[0])
freqs = k/L
fig, ax = plt.subplots()
ax.plot(freqs, np.abs(yk))
plt.show()