|
|
  |
Расчет громкости. Помогите вспомнить математику. |
|
|
|
May 14 2013, 21:26
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
хм... я почти что допер уже сам. но у меня формула другая получилась: Код DAC->DHR12R1=MIN_VOLUME+pow(10,(log10f(MAX_VOLUME-MIN_VOLUME)/20*volume)); РАзница в двух вещех - я не делю а вычитаю минимум из максимума, и использую десятичный логарифм, а не натуральный. Вопросы: 1. Почему нужно делить? 2. ПОчему лохарифм натуральный? ВРоде бы децибелы считаются по десятичному логарифму... кстати, ваша формалу не дает значения, которое можно в ЦАП подставить. Получается число, исчисляемое единицами.
|
|
|
|
|
May 15 2013, 07:31
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(zheka @ May 14 2013, 19:27)  Есть задачка. С помощью ЦАП регулирую громкость (выход ЦАП подключен ко входу усилителя). Так сложилось, что регулировка сводится к введению в ЦАП значений от 1000 (минимум) до 1800 (максимум). Делений 20. Я написал программу, которая увеличивает напряжение ЦАП линейно. Однако громкость заметно возрастает на первых 5-7 делениях, а до 20 - изменяется незначительно. НУжен логарифмический регулятор громкости. Помогите сообразить формулу логарифмическу, у которой на входе будет минимум (1000) и максимум (18000), число делений (20), номер деления (от 0 до 20), а на выходе будет число от 1000 до 1800, которое нужно записать в ЦАП. i=1000*(1800/1000)^(j/20) 1000 1029 1060 1092 1124 1158 1192 1228 1265 1302 1341 1381 1422 1465 1509 1554 1600 1648 1697 1747 1800 Как-то так
|
|
|
|
|
May 15 2013, 07:51
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
да... не все так просто... Оказывается регуляция усиления в микросхеме TDA7052 (стр.7 FIG.3) тоже какая-то логарифмическая. Потому и не устраивает результат даже с натуральным логарифмом. Наверное сделаю-ка я массив из 2ти громкостей, забью его в память и горя знать не буду. А так хотелось чтобы все было "по понятиям"..
Сообщение отредактировал zheka - May 15 2013, 08:03
|
|
|
|
|
May 15 2013, 18:29
|
Знающий
   
Группа: Свой
Сообщений: 988
Регистрация: 3-11-10
Пользователь №: 60 636

|
Цитата(zheka @ May 15 2013, 00:26)  Вопросы: 1. Почему нужно делить? 2. ПОчему лохарифм натуральный? ВРоде бы децибелы считаются по десятичному логарифму...
кстати, ваша формалу не дает значения, которое можно в ЦАП подставить. Получается число, исчисляемое единицами. Да, извиняюсь - 10000*exp(уровень_громкости*ln(18000/10000)/20) (т.е. нужно умножить на начальный уровень). Чувствительность - логарифмическая, значит, чтобы результат был линейным - функция должна быть экспонентой. Далее идут нормировочные коэффициенты - exp(ln(18000/10000))=18000/10000, т.е. во сколько раз меняется во всем диапазоне. Ну а если 20 уровней - нужно делить показатель экспоненты на 20 (точнее, даже на 19  . Децибеллы абсолютно ни при чем. Нужно просто, чтобы совпадали основание логарифма и число, возводимое в степень. То же самиое - 10^(log(18000/10000))=18000/10000.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|