В настоящее время я пытаюсь рассчитать THD, минимальный уровень шума и другие измерения звука (IMD, частотная характеристика с Python). Для этого я импортирую волновой файл в массив numpy, а затем вычисляю fft с помощью модулей scipy. Чтобы избежать наложения псевдонимов, мне нужно просмотреть мои данные, прежде чем выполнять fft. Итак, я пытаюсь сравнить разные окна, и вот некоторый результат (синусоида 997 кГц, 32 бита, 192 кГц, сгенерированная Adobe Audition):
Мне нужна точность: минимальный уровень шума должен быть как можно ниже, а отклик за пределами пика — как можно более плоским. Итак, мой вопрос: действительно ли Райф-Винсент лучший вариант, который у меня есть? Я пропустил другое «секретное» окно, которое я не знаю и не проверял?
Если я решу сохранить окно Райфа-Винсента, проблема заключается в расчете времени! Остальные окна реализованы в модуле scipy и очень быстро вычисляются. Я рассчитываю коэффициенты Райфа-Винсента следующим образом:
w = np.empty(M,dtype=np.float64)
a = 2*np.pi/M
for i in np.arange(0, M):
w[i] = (35 - 56*np.cos(a*i) + 28*np.cos(2*a*i) - 8*np.cos(3*a*i) + np.cos(4*a*i))/128
Где M — длина моих данных, которая может быть довольно большой. Это очень трудоемко, может ли кто-нибудь помочь мне оптимизировать его?