Meter для индикации уровня сигнала...
От: dram  
Дата: 24.10.04 11:21
Оценка:
Здравствуйте!

Подскажите, как реализовать любой (VU или Pitch) метер. Я записываю голос, получаю от устройства заполненные буферы, а вот по какому принципу их отображать — не знаю... Если я использую PitchMeter, то в этих блоках я ищу максимальную амплитуду, так? Но как это значение перевести в нужные единицы (например, 1-7, где каждое деление — 4dB)? И какой диапазон должен быть, если предполагается записывать исключительно голос.
Было бы просто фантастически замечательно, если кто-нибудь поделится исходником на C++! (собственно поэтому эта тема и создана в этом разделе )

Очень надеюсь на ответ...


29.10.04 23:59: Перенесено модератором из 'C/C++. Прикладные вопросы' — Павел Кузнецов
Re: Meter для индикации уровня сигнала...
От: s.ts  
Дата: 24.10.04 17:35
Оценка:
Здравствуйте, dram, Вы писали:

D>Здравствуйте!


D>Подскажите, как реализовать любой (VU или Pitch) метер. Я записываю голос, получаю от устройства заполненные буферы, а вот по какому принципу их отображать — не знаю... Если я использую PitchMeter, то в этих блоках я ищу максимальную амплитуду, так? Но как это значение перевести в нужные единицы (например, 1-7, где каждое деление — 4dB)? И какой диапазон должен быть, если предполагается записывать исключительно голос.

D>Было бы просто фантастически замечательно, если кто-нибудь поделится исходником на C++! (собственно поэтому эта тема и создана в этом разделе )

D>Очень надеюсь на ответ...


D = 20lg10(A/Amin) — это формула для пересчета амплитуды сигнала в децибелы. Если взять (что логично) за Amin единицу младшего разряда измеряемой величины, то:
D = 20lg10(A)
Отсюда следует: чтобы примерно определить дин. диапазон посмотри с какой разрядностью оцифровывается сигнал и умножь на 3.

В общем, весь фикус-пикус в том, что децибеллы — величина относительная и относительно чего считать определяется задачей. Можно также считать относительно максимального значения.
А динамический диапазон — это отношение между максимальным сигналом и минимальным.

Это имелось ввиду ?
Re[2]: Meter для индикации уровня сигнала...
От: Аноним  
Дата: 26.10.04 13:26
Оценка:
Здравствуйте, s.ts, Вы писали:

ST>Здравствуйте, dram, Вы писали:


D>>Здравствуйте!


D>>Подскажите, как реализовать любой (VU или Pitch) метер. Я записываю голос, получаю от устройства заполненные буферы, а вот по какому принципу их отображать — не знаю... Если я использую PitchMeter, то в этих блоках я ищу максимальную амплитуду, так? Но как это значение перевести в нужные единицы (например, 1-7, где каждое деление — 4dB)? И какой диапазон должен быть, если предполагается записывать исключительно голос.

D>>Было бы просто фантастически замечательно, если кто-нибудь поделится исходником на C++! (собственно поэтому эта тема и создана в этом разделе )

D>>Очень надеюсь на ответ...


ST>D = 20lg10(A/Amin) — это формула для пересчета амплитуды сигнала в децибелы. Если взять (что логично) за Amin единицу младшего разряда измеряемой величины, то:

ST>D = 20lg10(A)
ST>Отсюда следует: чтобы примерно определить дин. диапазон посмотри с какой разрядностью оцифровывается сигнал и умножь на 3.

ST>В общем, весь фикус-пикус в том, что децибеллы — величина относительная и относительно чего считать определяется задачей. Можно также считать относительно максимального значения.

ST>А динамический диапазон — это отношение между максимальным сигналом и минимальным.

ST>Это имелось ввиду ?


Да, именно это! =) Спасибо Вам огромное...
Вот только откуда умножение на 3? простите, не допонимаю...
Если у меня сигнал 16битный, то ...? Как посчитать МАХ значение метера?
И еще: если я использую не амплитуду, а, например, энергию сигнала ((сумма квадратов А)/(количество самплов)) — как в этом случае диапазон посчитать....

Заранее спасибо!
Re[3]: Meter для индикации уровня сигнала...
От: Аноним  
Дата: 27.10.04 21:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, s.ts, Вы писали:


ST>>Здравствуйте, dram, Вы писали:


D>>>Здравствуйте!


D>>>Подскажите, как реализовать любой (VU или Pitch) метер. Я записываю голос, получаю от устройства заполненные буферы, а вот по какому принципу их отображать — не знаю... Если я использую PitchMeter, то в этих блоках я ищу максимальную амплитуду, так? Но как это значение перевести в нужные единицы (например, 1-7, где каждое деление — 4dB)? И какой диапазон должен быть, если предполагается записывать исключительно голос.

D>>>Было бы просто фантастически замечательно, если кто-нибудь поделится исходником на C++! (собственно поэтому эта тема и создана в этом разделе )

D>>>Очень надеюсь на ответ...


ST>>D = 20lg10(A/Amin) — это формула для пересчета амплитуды сигнала в децибелы. Если взять (что логично) за Amin единицу младшего разряда измеряемой величины, то:

ST>>D = 20lg10(A)
ST>>Отсюда следует: чтобы примерно определить дин. диапазон посмотри с какой разрядностью оцифровывается сигнал и умножь на 3.

ST>>В общем, весь фикус-пикус в том, что децибеллы — величина относительная и относительно чего считать определяется задачей. Можно также считать относительно максимального значения.

ST>>А динамический диапазон — это отношение между максимальным сигналом и минимальным.

ST>>Это имелось ввиду ?


А>Да, именно это! =) Спасибо Вам огромное...

А>Вот только откуда умножение на 3? простите, не допонимаю...
А>Если у меня сигнал 16битный, то ...? Как посчитать МАХ значение метера?
А>И еще: если я использую не амплитуду, а, например, энергию сигнала ((сумма квадратов А)/(количество самплов)) — как в этом случае диапазон посчитать....

А>Заранее спасибо!


АААААААААААА! Дурная голова — про умножение ж все ясно! Позорище какое, подобные вопросы задавать ...
Re[3]: Meter для индикации уровня сигнала...
От: s.ts  
Дата: 28.10.04 16:29
Оценка: 6 (1)
Здравствуйте, <Аноним>, Вы писали:


А>Да, именно это! =) Спасибо Вам огромное...

А>Вот только откуда умножение на 3? простите, не допонимаю...

Изменение на 3 дБ — это примерно в 2 раза.
Вернее, в 2 раза — это примерно на 3 Дб с хвостиком
Для прикидок сойдет.

А>Если у меня сигнал 16битный, то ...? Как посчитать МАХ значение метера?


если единицу младшего разряда принять за 0, то Max примерно 48 дБ
Можно еще например от уровня шумов мерять. Тогда выфильтровываем шум, ищем его амплитуду и считаем относительно неге.
Вообще рекомендую какие-нибудь книжки по цифровой обработке сигналов почитать (каких-нибудь Оппенгейма/Шафера), про адаптивные фильтры много интересных книжек и иже с ними. Или нужно поконкретнее сформулировать задачу. Что на входе, чем измеряем, что хотим увидеть.

А>И еще: если я использую не амплитуду, а, например, энергию сигнала ((сумма квадратов А)/(количество самплов)) — как в этом случае диапазон посчитать....


Мощность — это квадрат амплитуды, соответственно
D = 20lg10(A) = 20lg10(sqrt(P))=10lg10(P), где P — мощность сигнала.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.