Пишу на пхп, потом будет работать онлайн...
Генерю исходный псм сигнал в виде wav/flac файла - достаточно его воспроизвести и записать через asio любым софтом, дальше запись синхронизируется и сравнивается с вновь сгенерённым сигналом с учётом фазы...
Предварительная синхронизация происходит по тестовому импульсу
А вот далее нужно чтобы кто разбирается в псм сигнале проверил методологию и формулы, боюсь что накосячил где-то...
Фазовая синхронизация точнее чем тактовая частота возможна, если записанный сигнал (синус) сравнивать с вновь сгенерённым синусом смещённым на туже дельту по временной шкале, смещение без шумов (если считаем что используем синус и ищем в точке 0) равно arcsin (амплитуда_в_0/максимальную_амплитуду) , далее из записи можно по семплам вычитать синус сгенерённый с дельтой, получится разница, но мешают шумы (аналоговые) и arcsin вернёт неверное смещение...
Для точной подгонки фазы беру около10-100 семплов и и с шагом сначало в 1 , от -10 до 10 суммирую разницу между каждым семплом записи и оригинала , выбираю наименьшую, потом шаг 0.1 потом 0.01 итд до 5ти нолей (хоть до 64 можно) - так я считаю что нашёл идеальное смещение! (верно ли считаю?)
По амплитуде... сигнал пишу 960 Гц чтобы был кратный тактовым частотам и после дискретного преобразования фурье без окнных предварительных функций (оноже квадратное окно) получаю амплитуду синуса как корень квадратный из суммы квадратов мнимой и вещественной части , за счёт именно дискретного преобразования (не быстрого кратного 2^n) могу точно измерять 960 Гц - получаю абсолютно вплоть до 1 в интежер пространстве амплитуду записанного синуса, без вмешательства шумов. (проверял скармливанием чистого сегенерённого синуса на разных амплитудах, фурье возвращал идеальный ответ)
THD+n измеряю как сумму модуля разниц посемпольно запись- сгенеренный сигнал делить на сумму семплов сгенерённого сигнала, в процентах домножаем на 100, т.к. количество семплов в чеслителе и знаменателе одинаковое - сокразается.
Померил карту - получил 0.02253106801295506%
еёже в rmma - THD + Noise (at -3 dB FS)
IMD + Noise, % L 0.00429 R 0.00427
IMD + Noise (A-weighted), % L 0.00392 R 0.00387
Подумал что я чото нетак сделал...
Проверил - сгенерил искажённый сигнал $d= $db_to_abs(-1) * sin($n * $w) + db_to_abs(-100)*sin($n * 2* $w) + db_to_abs(-110)*sin($n * 3* $w) + db_to_abs(-120)*sin($n * 4* $w) + db_to_abs(-130)*sin($n * 5* $w);
w=2 * M_PI * 960 / $sampleRate;
db_to_abs возвращает интежер громкость из децебелов для 32 бит инт 2147483647-1=0dB
скормил анализатору и сравнил с теоретическим отвтом по формуле sqrt(pow(db_to_abs(-100),2)+pow(db_to_abs(-110),2)+pow(db_to_abs(-120),2)+pow(db_to_abs(-130),2))/db_to_abs(-1)*100
энергия синусов не зависит от частоты и всегда равна амплитуда / корень из 2 который в чеслителе и знаменателе сокращается и остаётся корень из суммы квадратов амплитуд гармоник делить на амплитудуду основной частоты
Так вот ответы совпали вплоть до 11го знака после 0
rmaa чото совсем другое кажет