Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.82.108] |
|
Сообщ.
#1
,
|
|
|
Имеется
1. комп - Intel®_Core_i7-6700_CPU_@_3.40GHz 2. встроенный звук - RealTek High Definition Audio 3. микрофон - logitech usb headset h340 Столкнулся с такой проблемой Прикреплённый файл_____________________________________________________________________________________.png (6,84 Кбайт, скачиваний: 686) На картинке видно (зелёная стрелка) что уровень шума самого микрофона и блока обработки без какого либо сигнала не превышает 1 единицы Этот же уровень в 1 единицу виден и на второй картинке (небольшая тёмная полоска в начале серой шкалы в системных настройках звука (чёрная стрелка)) Прикреплённый файл________________________________________________.png (20,17 Кбайт, скачиваний: 671) Программа настроена так что не реагирует на сигнал менее 2 единиц и происходит останов когда уровень начинает превышать 1 единицу значения … так вот срабатывание это происходит когда уровень начинает выходить за красную черту (рис 2 красная стрелка) явно видно что это превышение по уровню не в 2 раза а в 5-6 раз а иногда и того больше. где тут собака зарыта - слишком не линейная шкала ацп встроенного звука? не на все сигналы срабатывает ацп? может кто нибудь что посоветует? |
Сообщ.
#2
,
|
|
|
Ivan123, я думаю, что тут такая история.
16-битный звук имеет диапазон ≈ 96 дБ, 8-битный ≈ 48 дБ (условно, смотря что считать на нижнее значение). Т.е. 1 в 8-битном представлении – это 256 в 16-битном (ну или 128, смотря как округлять). Значение семпла = 1 в 8 битах – это -42.1 дБ, в 16 битах: -90.3 дБ. Значение семпла = 2 в 8 битах – это -36.1 дБ, в 16 битах: -84.3 дБ. Значение семпла = 3 в 8 битах – это -32.6 дБ, в 16 битах: -80.8 дБ. Значение семпла = 4 в 8 битах – это -30.1 дБ, в 16 битах: -78.3 дБ. Значение семпла = 126 в 8 битах – это -0.137 дБ, 32766 в 16 битах: -0.00053 дБ. Значение семпла = 127 в 8 битах – это -0.0676 дБ, 32767 в 16 битах: -0.000265 дБ. Значение семпла = 128 в 8 битах – это 0 дБ, 32768 в 16 битах тоже 0 дБ. Т.е. на малых значениях малое приращение даёт гораздо большее изменение уровня (6, 4, 2) в дБ, чем на больших (сотые, тысячные, 10-тыс. доли). Собственно, этим и объясняется популярность 32-битных IEEE-форматов (с плавающей запятой). Прикол в том, что значение 0 (ноль) – это минус бесконечность, поэтому за его принимают какое-то фиксированное значение. Что принято за ноль в измерительной шкале винды – х/з. Если, к примеру, 0 = -43 дБ, тогда 1 = -42, 2 = -36. В семплах мы получаем (снимаем с микрофона) уровень напряжения (переведённое в нужный диапазон - байт, слово, 24 бита и пр), а на шкале видим громкость (уровень звукового давления) в дБ. Добавлено Кроме того, я, конечно, не спец в том, как работают АЦП, но теоретически, если взять исходный аналоговый звук как вещественное значение (пусть тоже в диапазоне от 0 до 128 по модулю, а не от 0 до 1, для простоты), то значение 0.5 АПЦ может преобразовать как в 0, так и в 1. Другой АПЦ может преобразовать в 0, а в 1 только значения 1.0+, либо 0.8+. Т.е. то, что прога показывает 1 может быть на самом деле 0.5, тогда это -48 дБ (а не -42), а 2 может быть 1.5 или 2.499 (-38 .. -34 дБ). И если шкала в винде от -50 дБ, тогда мы видим: • 0 = -50 дБ • 1 = -48 дБ (+2) • 2 = -36 дБ (+12) Но скорее всего (что-то мне подсказывает), за ноль там принято -48 дБ. Шум микрофона ≈ -47..-45 дБ А 2 - это ≈ от -38 дБ. Справа – 0 дБ. Т.е. от -48 до -47 серая полоска – это ≈ 1/48 часть отрезка. А от -48 до -38 – это примерно 1/5 часть отрезка. Плюс-минус, конечно, мы же не знаем точно, что ноль – это -48, может, там -46 или -45. Да и красная полоска нарисована на глаз же. Как раз соответствует картинке примерно. Короче, лучше потестить не на 8 битах, а на 16 битах. Там и шум будет виден точнее. И порог срабатывания можно настроить точнее (и поиграть с ним). |
Сообщ.
#3
,
|
|
|
Вот я делал как-то консольную прогу (для себя) для перевода дробей в децибелы и наоборот. Для звука.
Чтобы определить уровень для значения 1 в 8 битах, нужно ввести 1/128 (ибо диапазон -128..127), уровень 256 в 16 битах – 256/32768 (для данного примера результат будет тот же). Наоборот – ввести 48 или -48, получишь дробь. Может, пригодится кому Прикреплённый файлdB.zip (28,56 Кбайт, скачиваний: 538) |
Сообщ.
#4
,
|
|
|
Можно посмотреть ещё в каком-нибудь редакторе уровень. Ну или вот я делал для тестов каких-то. Тут можно посмотреть уровень в дБ.
Тут 16 бит используется. Прикреплённый файлWaveMeter.zip (222,49 Кбайт, скачиваний: 502) |