Автор Тема: Пишу софт для измерения параметров звуковухи сравнивает оригинал с записью  (Прочитано 1919 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kvach

  • Знакомый
  • *
  • Сообщений: 57
  • Репутация: 0
  • Иван Москва
  • Поблагодарили: +5
    • Legion
Пишу на пхп, потом будет работать онлайн...
Генерю исходный псм сигнал в виде 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 чото совсем другое кажет  :wall:

Оффлайн Profi

  • Старожил
  • *****
  • Сообщений: 1961
  • Репутация: 16
  • Евгений. Лужу, паяю...
  • Поблагодарили: +4007
Испытания одним синусом? Кроме Кг, другой информации с него не получить же.

Оффлайн Kvach

  • Знакомый
  • *
  • Сообщений: 57
  • Репутация: 0
  • Иван Москва
  • Поблагодарили: +5
    • Legion
Испытания одним синусом? Кроме Кг, другой информации с него не получить же.
По этой части возникли вопросы, а так ещё свип тон сделал который не ровно бежит и каждый ровный кГц отсчитывает 4 полных периода, потом плавно меняет до следущего , по макушкам можно восстановить частоту при считывании понимать какая макушка соответствует какой частоте,
на высоких частотах интерполировать в 10 раз 1920000 семплрейт soxr  и на 30 кГц будет достаточно точек чтобы измерить амплитуду без fft. При измерении ачх на шумы забить - 4 макушки аппроксимировать. Уровень шума вроде просто тишину замерить. Все фазовые типа импульс респонс по записи по худу не возможно замерить. Сигнал / шум - отдельным файлом - если это ваще интересно - нужно понять как детектить аналоговый клипинг...
Но THD и THD+n это самое важное

и добавил...
попробовал REW там всё настраивается и всё зависит от оконной функции (как и должно быть) - показания ближе к моим 0.019
по ходу rmaa без шума показывает как и rew если в нём смотреть на thd 0.0038%

и добавил...
Ещё вопрос, если у нас частота кратная частоте дискретизации 960 Гц (48 96 192 кГц), то каждый период должен быть одинаковый семпл +- шумы (аналоговые), если сильно отличаются - это джитер ?
« Последнее редактирование: 10 Декабря 2023, 01:09:51 от Kvach »

Оффлайн Profi

  • Старожил
  • *****
  • Сообщений: 1961
  • Репутация: 16
  • Евгений. Лужу, паяю...
  • Поблагодарили: +4007
Сам по себе общий Кг мало говорит о качестве. Гораздо большее значение имеет спектр искажений. Если стоит задача оценки качества тракта, то надо именно сам спектр обрабатывать и интерпретировать. Например, как в работе нагличананина, придумавшего коэффициент качества.

и добавил...
нужно понять как детектить аналоговый клипинг...
Резкий рост нечётных гармоник.

Оффлайн dimonos

  • Старожил
  • *****
  • Сообщений: 3222
  • Репутация: 19
  • Поблагодарили: +1688
Кликните для повторного скрытия этого сообщения.
-4
10 Декабря 2023, 07:23:19 - Скрыт.

Оффлайн Profi

  • Старожил
  • *****
  • Сообщений: 1961
  • Репутация: 16
  • Евгений. Лужу, паяю...
  • Поблагодарили: +4007
Ты не прав. Польза от такого софта может быть.  :yes:
Если он будет считать по нагличанину.

Оффлайн Kvach

  • Знакомый
  • *
  • Сообщений: 57
  • Репутация: 0
  • Иван Москва
  • Поблагодарили: +5
    • Legion
Чтобы анализировать спектр в цифре - нужно дискретное преобразование Фурье (не fft которое кратно n^2), чтобы оно было точным нужно брать частоты кратные тактовой частоте и всё равно нужно окно пусть даже flat-top при котором погрешность измерения амплитуды каждой гармоники меньше 0.001 - получится корень из 0.001^2+0.001^2+...n-гармонники - всё равно погрешность огромная...
Я же предлагаю сравнивать побитно энергию, никто не запрещает пробежаться по всему спектру по точкам кратным тактовой частоте сделать замер поточечно всех энергий

Оффлайн Profi

  • Старожил
  • *****
  • Сообщений: 1961
  • Репутация: 16
  • Евгений. Лужу, паяю...
  • Поблагодарили: +4007

Оффлайн GoRs

  • Старожил
  • *****
  • Сообщений: 2258
  • Репутация: 7
  • Игорь, оч. приятно, на "ты".
  • Поблагодарили: +699
Мужики, давно же уже есть программа, я не помню как она называется, которая вычитает один сигнал из другого. То есть, имеем исходный сигнал, берем его же после какого то устройства. Эта программа вычитает первый из второго и остаются только вносимые устройством искажения. Минус только в том, что это не в графической форме, а в виде звукового файла. А вот если бы она это делала в виде графика, как в Спектре...
Нужна визуализация сравнения или вычитания...

Оффлайн drummer

  • Старожил
  • *****
  • Сообщений: 4230
  • Репутация: 41
  • Сергей, Казань
  • Поблагодарили: +5865

Оффлайн Kvach

  • Знакомый
  • *
  • Сообщений: 57
  • Репутация: 0
  • Иван Москва
  • Поблагодарили: +5
    • Legion
Мужики, давно же уже есть программа, я не помню как она называется, которая вычитает один сигнал из другого. То есть, имеем исходный сигнал, берем его же после какого то устройства. Эта программа вычитает первый из второго и остаются только вносимые устройством искажения. Минус только в том, что это не в графической форме, а в виде звукового файла. А вот если бы она это делала в виде графика, как в Спектре...
Нужна визуализация сравнения или вычитания...
Неполучается вычесть из оригинала запись потому что не попадаешь в записи при семплрейте 192000 в 1/192000 секунды и фаза смещается менее чем на 1/192000 и этого достаточно для погрешности измерения, чем больше периодов измерить тем больше погрешность, а мерить нужно много периодов чтобы шумов не было (апроксимация)... а при 44.1 ваще ахтунг
Пришлось делать синхроимпульс по нему начальная синхронизация  а потом arcsin (значение семдпла/максимальную громкость при данной битности) в 0 вой точке старта синуса и если он не 0 то это и есть смещение Фи, но в значении семпла будут шумы, поэтому после ещё генерится со смещением Фи заново синус (точно также как для эталонного файла) и посемплово вычитается из записанного сигнала и запоминается разность, потом смещается на +- 1 (влево вправо на единицу) и выбирается наименьшая разница, потом шаг в 10 раз меньше +-0.1 потом +- 0.01 и так до упупения можно в цикле (5-7 нолей больше чем достаточно получилось). Таким образом находится настоящий Фи. И уже после все сигналы сгенерённые для исходника генерятся заново но со смещением Фи, и вот их я вычитаю - разница и есть энергия гармоник + шумы.
Если мерить АЧХ тоже проблема что на высоких частотах макушки синуса не попадают в такт с семплрейтом в итоге если брать чисто максимумы получаются красивейшие фракталы, ничо лучше не придумал чем сделать оверсемпл soxr и фракталы стали размером 0.002 dB для ачх думаю неважная погрешность

и добавил...
в любом аудио редакторе есть кнопка противофаза.. в адобе в аудасити - сохраняешь результат открываешь его вот графическое представление
« Последнее редактирование: 15 Декабря 2023, 02:10:59 от Kvach »

Оффлайн valve

  • Старожил
  • *****
  • Сообщений: 989
  • Репутация: 17
  • Поблагодарили: +883

Оффлайн dimonos

  • Старожил
  • *****
  • Сообщений: 3222
  • Репутация: 19
  • Поблагодарили: +1688
Кликните для повторного скрытия этого сообщения.
-3
15 Декабря 2023, 10:13:42 - Скрыт.

 

Похожие темы

  Тема / Автор Ответов Последний ответ
143 Ответов
98482 Просмотров
Последний ответ 08 Января 2017, 08:14:18
от Илья_C
4 Ответов
5714 Просмотров
Последний ответ 02 Июля 2013, 17:39:21
от khvilon
21 Ответов
12302 Просмотров
Последний ответ 20 Октября 2019, 12:27:34
от Alex07
28 Ответов
9739 Просмотров
Последний ответ 23 Октября 2020, 11:19:31
от GoRs
6 Ответов
3800 Просмотров
Последний ответ 25 Мая 2022, 13:40:31
от Карта