Бытовой ретро-компьютер своими руками http://forum.pk-fpga.ru:443/ |
|
Эмулятор БК-0010-01, БК-0011 и БК-0011М http://forum.pk-fpga.ru:443/viewtopic.php?f=45&t=5441 |
Страница 2 из 8 |
Автор: | peg [ 29 мар 2016, 11:14 ] | |||||||||
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М | |||||||||
Подождите. ШИМ - это один бит. А если 4-8 уровней - какой же это шим? А где это у нас в БКашках 8 уровней? Почему я не знаю? Вы covox имеете в виду? Вообще-то, в БК0010 выход на магнитофон двухбитный (4 уровня). Но почему-то я не встречал ни у кого никаких упоминаний об этом. Ну так и интегрируйте 8 уровней. Принципиальной разницы нет. Выбирайте нулевой уровень посередине (напишу для 8 уровней). Тогда имеем 4 скорости роста амплитуды и 4 скорости спада. Скорости пропорциональны величине ступенек. При постоянном входном ненулевом сигнале амплитуда будет расти бесконечно. Просто ограничиваем ее определеным максимальным значением (положительным и отрицательным). Максимальная скорость роста/спада одновременно задает максимальную частоту, для которой возможна максимальная выходная амплитуда. Далее начинается спад, обратно пропорциональный частоте (как фильтр первого порядка). |
Автор: | peg [ 29 мар 2016, 11:28 ] | |||||||||
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М | |||||||||
Можно тогда все DLL-ки положить в архив с эмулятором. ;) |
Автор: | peg [ 01 апр 2016, 11:24 ] |
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М |
В окне отладки эмулятора, когда курсор активный, он становится темно-синим. Текста на курсоре я не разбираю (все закрашено курсором). Чтобы посмотреть, что там под курсором, надо его убрать! %( Можно ли сделать курсор посветлее? |
Автор: | gid [ 04 апр 2016, 14:37 ] | |||||||||||||||||||||||||||
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М | |||||||||||||||||||||||||||
Давайте конкретный алгоритм, сделаю.
Или дождаться следующего билда. Я ж не знаю какие дллки нужны, у меня vc redist автоматом со студией ставится, а там, где ругается на недостаток дллок, я руками vc redist накатываю. Линуксоиду должно быть привычно самому всё что нужно для работы руками собрать, тем более, что все нужные дллки можно с инета по одной скачать.
Враньё, в win7, win8, win10 он становится светло синим, в WinXP - просто синим, это цвет стандартной цветовой схемы виндовс. Я лучше буду компилировать прогу без поддержки WinXP, чем мучиться с переопределением цвета курсора. |
Автор: | peg [ 05 апр 2016, 00:41 ] |
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М |
Начнем, например, с самого простого:
Код:
Выделить всё
·
Развернуть
Скоростной коэфф. выбираем из таких соображений: за сколько тактов выход должен дорасти до максимума при максимальном входе? N_TACT = MAX_AMP / f_speed (при макс.входе). Отсюда вычисляем f_speed и следом - k_speed Если что-то невнятно объяснил, спрашивайте. |
Автор: | gid [ 11 апр 2016, 15:15 ] | |||||||||
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М | |||||||||
Попробовал. Ерунда получается. Линейное возрастание/затухание даёт пилу. Для одного голоса звучание ещё вполне так себе, а полифония превращается в невнятную кашу. Я допилил эмулятор конденсатора, получилось не идеально, но гораздо лучше, чем было раньше. |
Автор: | peg [ 12 апр 2016, 00:07 ] | ||||||||||||||||||
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М | ||||||||||||||||||
Неудивительно, интеграл от константы - линейная функция. Интегратор - это фильтр первого порядка. То, что Вы называете "конденсатор" - это тоже первый порядок. Разница весьма невелика. Попробуйте второй или третий порядок. Для этого примените интегратор после интегратора. А потом можно еще. Фильтр-то две строчки всего... А вообще, что это за сигнал Вы фильтруете? Какова частота отсчетов? |
Автор: | gid [ 12 апр 2016, 09:35 ] | ||||||||||||||||||
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М | ||||||||||||||||||
Я пробовал всякие фильтры, они там не помогут, там надо не фильтровать, а именно формировать хитрую амплитуду, которая получается на линейном выходе. Я ничего не фильтрую, я тупо эмулирую конденсатор C15 (см. вложение), который заряжается/разряжается через резисторы R35, R29, R30, R31. Причём я упростил себе задачу и вместо резистивного делителя использую постоянное сопротивление для всех уровней и для заряда/разряда, хотя оно там динамически изменяется. Частота дискретизации эмуляции равна частоте БК, на которой он в данный момент работает. Ну а модули вывода звука работают на частоте 44100, съём показаний с конденсатора делается с такой частотой, а то если постоянно вычислять экспоненту, очень уж тормозить начинает.
|
Автор: | peg [ 13 апр 2016, 21:11 ] | ||||||||||||||||||
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М | ||||||||||||||||||
Ну вот. Теперь я сообразил. Вы боретесь с шумом квантования. Из схемы следует, что на выходе ЦАПа имеем 3 бита/8 уровней амплитуды. Мы хотим их сгладить. Частота вывода весьма высока и сложностей с фильтрацией не представляет. А вот ступеньки - это да. Так просто от них не избавиться, ведь они возникают на любой частоте. То есть, тупо отфильтровать не выйдет. Вы знаете, есть такая штука - дизеринг(dithering)? https://ru.wikipedia.org/wiki/%D0%94%D0 ... 0%BD%D0%B3 Надо добавить к выходным ступенькам белый шум с амплитудой ступеньки. А потом отфильтровать (интегратором два-три раза, ну или вашим "конденсатором"). Попробуйте, должно стать заметно лучше. |
Автор: | peg [ 13 апр 2016, 23:10 ] |
Заголовок сообщения: | Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М |
Возможно, я поспешил с советом (шум при дизеринге добавляют в сигнал до оцифровки). Хотя попробовать можно. А просто линейное сглаживание не пробовали? То есть, вершины ступенек соединить прямыми (положить на углы ступенек "досточки"). Для этого надо обрабатывать текущую ступеньку и предыдущую (надо ждать изменения сигнала). А затем выдавать линейно изменяющуюся амплитуду от одной ступеньки до другой. Может так случиться, что ждать придется слишком долго (например, больше 20-50 мС, не знаю, надо пробовать, какая задержка допустима), тогда выдавать ту же самую амплитуду, но имея запас в те же 20-50 мС, чтобы иметь возможность снова линейно (а не ступенчато) изменяться. Надеюсь, не очень сумбурно? Ну а если это поможет, то дальнейшее улучшение - это сглаживание полиномами (гладкими кривыми). Но сильно лучше уже не будет, так как информация о сигнале уже потеряна при оцифровке до 3 бит. Я не знаю, это все-таки эмулятор. Может быть, есть возможность добавить шум до выхода на эти злосчастные 3 бита? Тогда дизеринг проходит в полный рост, точно будет лучше! |
Страница 2 из 8 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |