|
Сложение цифрового звука, на хмеге |
|
|
|
Sep 7 2011, 14:23
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(zombi @ Sep 7 2011, 22:59)  ... 0FFH+0FFH= 1FEH младшего бита не хватает :wacko: При складывании двух 8 битных потоков не должен сам собой получиться результат 9 бит. Попробуйте среднее арифметическое: (A+B)/2; (A+B+C)/3; (A1+A2+A3+...+AN)/N.
|
|
|
|
|
Sep 8 2011, 01:07
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
2 zombi Тогда рассматривайте сигнал со знаком, не как 0…255, а как -128…0…+127. Уже без сложения видно, что относительно нуля +max и -max не совпадают. Если их складывать, то эта разница будет только увеличиваться: -128+(-128)=-256 0+0=0 127+127=254 wiki: Дополнительный_код
|
|
|
|
|
Sep 8 2011, 06:38
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Думал, думал но ничего лучше чем : Цитата(ViKo @ Sep 7 2011, 17:47)  Ну и холера с ним! не придумал Цитата(ae_ @ Sep 8 2011, 04:07)  Тогда рассматривайте сигнал со знаком, не как 0…255, а как -128…0…+127. рассматривай как хочеш а результат все равно одинаковый Цитата(Make_Pic @ Sep 8 2011, 03:00)  "Вам шашечки или ехать?" © После DACа наверно стоит усилитель? Добавьте усиление ровно в два раза! Да, но при складывании и сдвиге каждый звук станет меньше на один разряд. А если надо 16 звуков сложить
|
|
|
|
|
Sep 8 2011, 07:03
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
При делении и отбрасывании мы теряем младший разряд, что чуть-чуть скажется на качестве звука. Можно (и нужно, на мой взгляд) использовать все разряды, получающиеся после сложения и деления. ЦАП, наверное, не 8-битовый? А поделить на 2 - так это просто завести на ЦАП разряды, сдвинутые на один к младшему, все 9. А хотите громче сделать, заведите все 9 без сдвига. Хотя, конечно, можно и усилением после ЦАП сделать то же самое, или выбором опорного напряжения для ЦАП. В-общем, лучше завести разряды так, чтобы на старшем разряде ЦАП был старший разряд полученной суммы. Складывая 16 звуков, получим 4 дополнительных старших разряда. Усильте результат в 4 раза, и всех делов.
|
|
|
|
|
Sep 8 2011, 13:47
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(zombi @ Sep 8 2011, 21:52)  Если вывести в ЦАП все 9 бит (получившихся в результате сложения двух байт) то громкость каждого звука не изменится. Берём сигнал L, который изменяется 0…255 и сигнал R, который всегда равен 128 (=0, для наглядности). Складываем их, получаем выходной сигнал 128…383, который подаём на 9-бит цап (0…511). Получаем на выходе макс. 50% заполнение 9-бит ШИМ, при этом исходный сигнал L имел размах 100% 8-бит ШИМ. Как ни складывай, но в суммарном сигнале, если его нормировать, т.е. привести к полной шкале, каждый из складываемых сигналов будет ослаблен.
|
|
|
|
|
Sep 8 2011, 16:26
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(ae_ @ Sep 8 2011, 18:34)  Хор всегда громче, чем отдельные голоса в его составе. Согласен на все 100%. При этом громкость каждого голоса не зависит от того в хоре он поёт или нет. Вы в п#4 предлагаете среднее арифметическое на что я Вам отвечаю в п#6. И затем я не пойму Вы в п#12 возражаете или согласны?
|
|
|
|
|
Sep 9 2011, 01:17
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(zombi @ Sep 9 2011, 01:26)  ...При этом громкость каждого голоса не зависит от того в хоре он поёт или нет. L+R -> 9бит ЦАП и (L+R)/2 -> 8бит ЦАП - разницы в громкости не будет никакой, сумма каналов имеет полный размах DAC, каждый из каналов - лишь половину от диапазона DAC. Во втором случае ещё и хуже качество, т.к. есть потери звуковой информации. Я предложил использовать среднее арифметическое лишь для решения эстетической проблемы: "0FFH+0FFH= 1FEH младшего бита не хватает". Делаем хуже качество, зато цифры ровные. Ведь даже для [0…9]+[0…9]=[0…18] а не [0…19] - некрасиво. Складываейте, как и собирались в 1 посте, всё правильно, но сигналы ослабляются вдвое, как и при (L+R)/2.
|
|
|
|
|
Sep 9 2011, 12:15
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(Allregia @ Sep 9 2011, 18:35)  А немного "в сторону вопрос" - если надо не складываь, а вычитать сигналы, что будет (или что надо делать) с разрядностью? ... То же самое. Разность, как и сумма, для двух 8-бит сигналов без потери качества будет 9-бит. 255-0 = 255 0-255 = -255 диапазон значений max-min 255-(-255)=510.
|
|
|
|
|
Sep 10 2011, 14:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(ae_ @ Sep 9 2011, 14:15)  То же самое. Разность, как и сумма, для двух 8-бит сигналов без потери качества будет 9-бит. 255-0 = 255 0-255 = -255 диапазон значений max-min 255-(-255)=510. Т.е. что получается - допустим есть 8-битный сигнал (IN), пропускаю его через ФНЧ и вычитаю из исходного. получаю два сигнала: OUT1=LPF(IN) OUT2=IN-OUT2=IN-LPF(IN) Чтобы небыло переполнения, OUT2 должен быть 9-битным, но чтобы иметь на выходе опять 8-битный сигнал, я должен его поделить на 2, т.е. пожертвовать младшим битом. Предположим полный размах (8бит) это 1 вольт., частота среза ФНЧ 1кгц. Даю на вход синус полного размаха 10кгц. На выходе OUT1 практически ничего, на выходе OUT2 имею 0.5в. Даю на вход синус полного размаха 100гц. На выходе OUT1 получаю 1в, на выходе OUT2 - почти ничего. Но, чтобы выходы были одинаковые, OUT1 я тоже должен поделить на 2, т.е. истинные выходы будут выглядеть так: OUT1 = LPF(IN)/2 OUT2 = (IN-LPF(IN))/2 Т.е. я потерял точность (младший бит) и динамический диапазон (т.к. на выходе фактически 7 бит). Из этого следует, что делать ФВЧ согласованный с ФНЧ (методом вычитания) в цифре нельзя и лучше применить отдельный ФВЧ: OUT1=HPF(IN) OUT2=LPF(IN) Где я ошибся?
|
|
|
|
|
Sep 11 2011, 03:08
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(Allregia @ Sep 10 2011, 23:12)  ...Из этого следует, что делать ФВЧ согласованный с ФНЧ (методом вычитания) в цифре нельзя и лучше применить отдельный ФВЧ: Сложение и вычитание - обратимые операции, и в обоих случаях результат может выходить за разрядность исходных данных. В том, что разность IN-LPF(IN) получается большей разрядности, "цифра" не причём, это и в реальной схеме так:
схема - RC цепочка, вверху входной сигнал, в середине - напряжение на конденсаторе (ФНЧ), внизу - на резисторе (ФВЧ). амплитуда на резисторе превышает входной сигнал вдвое. ФВЧ=ВХОД-ФНЧ, всё сходится :)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|