Дискретное преобразование Фурье и его обратное преобразование требуют определенной нормализации, чтобы ifft(fft(x))==x
.То, как выполняется эта нормализация, меняется от реализации к реализации.
Кажется, что в этом случае NAudio выбрала другую нормализацию, нежели MATLAB.
MATLAB использует наиболее распространенную нормализацию, где fft(x)
at k=0
равно sum(x)
, и обратное преобразование делает то же самое, но делится на n
(количество выборок).Это также уравнение, описанное на странице Википедии для DFT .В этом случае обратное преобразование соответствует уравнению для ряда Фурье.
Кажется, что NAudio выполняет деление на n
в прямом преобразовании, так что при k=0
у вас есть mean(x)
.
Учитывая вышеизложенное, вы можете использовать первую частотную ячейку (компонент постоянного тока), чтобы проверить, какая нормализация используется (при условии, что есть компонент постоянного тока, если сигнал имеет нулевое значение, это не будет работать): если постоянный токКомпонент равен сумме всех значений выборки, тогда используется «общая» нормализация.Она также может быть равна сумме, деленной на sqrt(n)
, в случае симметричного определения, когда прямое и обратное преобразование несут одинаковую нормировку.В случае NAudio оно будет равно сумме, деленной на n
(т.е. среднее значение значений выборки).В общем, возьмите компонент DC и разделите его на сумму значений выборки.Результат q
- используемый термин нормализации.Обратное преобразование должно иметь нормализующий член 1/qn
.