Понятия не имею, но ошибиться в подсчетах довольно сложно, алгоритм прост:
THD =
Math.Sqrt(HarmPower - CarrierPower) // Sum of all power in harmonics sans carrier
/
Math.Sqrt(CarrierPower); // Versus carrier
THD+N =
Math.Sqrt(TotalPower - CarrierPower) //Sum of all power sans carrier
/
Math.Sqrt(CarrierPower); // Versus Carrier
но разный подход просчета этих мощностей будет давать разный результат))
у меня кэрриер (и остальные гармошки) меряются с линейным бэндвичем в 20Гц (-10 до +10 относительно измеряемой частоты), сумма квадратов бинов
тотал = 20..20кГц, сумма квадратов бинов
разный софт будет брать разные размеры бэндвича фильтра для измерения несущей, и будет брать разный тотал (можно от DC до Найквиста, можно вообще в обход FFT померить мощность исходного сигнала).
Кто-то предлагает брать несущую с более широким бэндвичем "фильтра" чтоб захватить юбку, кто-то считает "юбку" непричастной к сигналу.
И это еще без учета формы окна) (хотя чот мне подсказывает, что его форма нивелируется делением одного на другое, т.к. "коррекция" у них делается коэффициентом на все циферки сразу = постоянная сверху и снизу деления)
наверное прийдется сделать 2-3 экспорта файликов с "референсным сигналом" и пропустить их черех все возможные програмки))
Например для получения THD+N меньше чем THD достаточно взять total power взвешенным, а гармошки от несущей в случае простого THD - не взвешивая об А-фильтр.
Взвешивалть ли несущую?))
UPD: профиксил баг, при котором програмка вываливалась при ресайзе окна после запуска ффт.
Теперь она работает _только_ после ресайза окна. Чудеса)))
Вопрос)
допустим есть 2 бина, b1 b2. Они комплексные (вылазят прямо из ффт).
Их мощность - b1.mag^2, b2.mag^2, что в принципе правильно. (mag = magnitude = sqrt(r^2 + i^2))
их сумма мощностей тоже правильна, b1.mag^2 + b2.mag^2
но при этом sqrt(b1.mag^2 + b2.mag^2) не равен (b1 + b2).mag. Например в случае, когда imag у них противоположный.
Этот момент кого-то волнует, или следует "не задавать лишних вопросов"? :)
THD =
Math.Sqrt(HarmPower - CarrierPower) // Sum of all power in harmonics sans carrier
/
Math.Sqrt(CarrierPower); // Versus carrier
THD+N =
Math.Sqrt(TotalPower - CarrierPower) //Sum of all power sans carrier
/
Math.Sqrt(CarrierPower); // Versus Carrier
но разный подход просчета этих мощностей будет давать разный результат))
у меня кэрриер (и остальные гармошки) меряются с линейным бэндвичем в 20Гц (-10 до +10 относительно измеряемой частоты), сумма квадратов бинов
тотал = 20..20кГц, сумма квадратов бинов
разный софт будет брать разные размеры бэндвича фильтра для измерения несущей, и будет брать разный тотал (можно от DC до Найквиста, можно вообще в обход FFT померить мощность исходного сигнала).
Кто-то предлагает брать несущую с более широким бэндвичем "фильтра" чтоб захватить юбку, кто-то считает "юбку" непричастной к сигналу.
И это еще без учета формы окна) (хотя чот мне подсказывает, что его форма нивелируется делением одного на другое, т.к. "коррекция" у них делается коэффициентом на все циферки сразу = постоянная сверху и снизу деления)
наверное прийдется сделать 2-3 экспорта файликов с "референсным сигналом" и пропустить их черех все возможные програмки))
Например для получения THD+N меньше чем THD достаточно взять total power взвешенным, а гармошки от несущей в случае простого THD - не взвешивая об А-фильтр.
Взвешивалть ли несущую?))
UPD: профиксил баг, при котором програмка вываливалась при ресайзе окна после запуска ффт.
Теперь она работает _только_ после ресайза окна. Чудеса)))
Вопрос)
допустим есть 2 бина, b1 b2. Они комплексные (вылазят прямо из ффт).
Их мощность - b1.mag^2, b2.mag^2, что в принципе правильно. (mag = magnitude = sqrt(r^2 + i^2))
их сумма мощностей тоже правильна, b1.mag^2 + b2.mag^2
но при этом sqrt(b1.mag^2 + b2.mag^2) не равен (b1 + b2).mag. Например в случае, когда imag у них противоположный.
Этот момент кого-то волнует, или следует "не задавать лишних вопросов"? :)
Аминь.