Ответить на тему  [ Сообщений: 72 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 8  След.
 
Автор Сообщение

Зарегистрирован: 31 дек 2015, 02:49
Сообщений: 16
Откуда: г. Армавир Краснодарского края
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
gid писал(а):
Беда в том, что там не совсем ШИМ. Там перед конденсатором прямоугольные импульсы переменной скважности, переменной частоты и разной амплитуды, для БК10 - 4 уровня, для БК11 - 8. А после конденсатора - примерно синусоида, амплитуда которой зависит как от скважности импульсов, так и от их амплитуды. Я пробовал эмулировать поведение конденсатора - заряд/разряд, но что-то вообще фигня получается.

Подождите. ШИМ - это один бит. А если 4-8 уровней - какой же это шим?
А где это у нас в БКашках 8 уровней? Почему я не знаю?
Вы covox имеете в виду?

Вообще-то, в БК0010 выход на магнитофон двухбитный (4 уровня). Но почему-то я не встречал ни у кого никаких упоминаний об этом.

Ну так и интегрируйте 8 уровней. Принципиальной разницы нет.
Выбирайте нулевой уровень посередине (напишу для 8 уровней).
Тогда имеем 4 скорости роста амплитуды и 4 скорости спада. Скорости пропорциональны величине ступенек.
При постоянном входном ненулевом сигнале амплитуда будет расти бесконечно. Просто ограничиваем ее определеным максимальным значением (положительным и отрицательным).
Максимальная скорость роста/спада одновременно задает максимальную частоту, для которой возможна максимальная выходная амплитуда. Далее начинается спад, обратно пропорциональный частоте (как фильтр первого порядка).


29 мар 2016, 11:14
Профиль

Зарегистрирован: 31 дек 2015, 02:49
Сообщений: 16
Откуда: г. Армавир Краснодарского края
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
gid писал(а):
Со статической линковкой были некоторые проблемы, которые уже решены, я тут тоже об ней задумался, обновлённый билд будет выложен когда-нибудь потом.

Можно тогда все DLL-ки положить в архив с эмулятором. ;)


29 мар 2016, 11:28
Профиль

Зарегистрирован: 31 дек 2015, 02:49
Сообщений: 16
Откуда: г. Армавир Краснодарского края
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
В окне отладки эмулятора, когда курсор активный, он становится темно-синим. Текста на курсоре я не разбираю (все закрашено курсором). Чтобы посмотреть, что там под курсором, надо его убрать! %(
Можно ли сделать курсор посветлее?


01 апр 2016, 11:24
Профиль

Зарегистрирован: 21 авг 2013, 22:12
Сообщений: 37
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
peg писал(а):
Ну так и интегрируйте 8 уровней. Принципиальной разницы нет.

Давайте конкретный алгоритм, сделаю.
peg писал(а):
Можно тогда все DLL-ки положить в архив с эмулятором. ;)

Или дождаться следующего билда. Я ж не знаю какие дллки нужны, у меня vc redist автоматом со студией ставится, а там, где ругается на недостаток дллок, я руками vc redist накатываю. Линуксоиду должно быть привычно самому всё что нужно для работы руками собрать, тем более, что все нужные дллки можно с инета по одной скачать.
peg писал(а):
В окне отладки эмулятора, когда курсор активный, он становится темно-синим.

Враньё, в win7, win8, win10 он становится светло синим, в WinXP - просто синим, это цвет стандартной цветовой схемы виндовс. Я лучше буду компилировать прогу без поддержки WinXP, чем мучиться с переопределением цвета курсора.


04 апр 2016, 14:37
Профиль

Зарегистрирован: 31 дек 2015, 02:49
Сообщений: 16
Откуда: г. Армавир Краснодарского края
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
Начнем, например, с самого простого:
//максимальная амплитуда
#define MAX_AMP 10
//минимальная амплитуда
#define MIN_AMP -10

float input_amp; //входной уровень
float mid_amp; //середина входа
float out_amp; //выход фильтра
float k_speed = 0.2; //скоростной коэфф.
float f_speed; //скорость выходного сигнала
float decr = 0.001; //затухание выхода в отсутствие входа

//середина выхода
float mid_out = (MAX_AMP + MIN_AMP) / 2;

out_amp = 0;
. . . . . .

// выполнять каждый такт:
/////////////////////////////////////////////////
// получили очередное значение входа
// вычисляем скорость и выход
f_speed = k_speed * (input_amp - mid_amp);
out_amp = out_amp + f_speed;
//затухание выхода
out_amp = out_amp + decr * (mid_out - out_amp);
//ограничение выхода
if (out_amp > MAX_AMP) out_amp = MAX_AMP;
if (out_amp < MIN_AMP) out_amp = MIN_AMP;
/////////////////////////////////////////////////

Скоростной коэфф. выбираем из таких соображений:
за сколько тактов выход должен дорасти до максимума при максимальном входе? N_TACT = MAX_AMP / f_speed (при макс.входе). Отсюда вычисляем f_speed и следом - k_speed

Если что-то невнятно объяснил, спрашивайте.


05 апр 2016, 00:41
Профиль

Зарегистрирован: 21 авг 2013, 22:12
Сообщений: 37
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
peg писал(а):
Начнем, например, с самого простого:

Попробовал. Ерунда получается. Линейное возрастание/затухание даёт пилу. Для одного голоса звучание ещё вполне так себе, а полифония превращается в невнятную кашу.
Я допилил эмулятор конденсатора, получилось не идеально, но гораздо лучше, чем было раньше.


11 апр 2016, 15:15
Профиль

Зарегистрирован: 31 дек 2015, 02:49
Сообщений: 16
Откуда: г. Армавир Краснодарского края
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
gid писал(а):
peg писал(а):
Ерунда получается. Линейное возрастание/затухание даёт пилу.
Я допилил эмулятор конденсатора, получилось не идеально, но гораздо лучше, чем было раньше.

Неудивительно, интеграл от константы - линейная функция.
Интегратор - это фильтр первого порядка. То, что Вы называете "конденсатор" - это тоже первый порядок. Разница весьма невелика.
Попробуйте второй или третий порядок. Для этого примените интегратор после интегратора. А потом можно еще.
Фильтр-то две строчки всего...

А вообще, что это за сигнал Вы фильтруете? Какова частота отсчетов?


12 апр 2016, 00:07
Профиль

Зарегистрирован: 21 авг 2013, 22:12
Сообщений: 37
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
peg писал(а):
А вообще, что это за сигнал Вы фильтруете? Какова частота отсчетов?

Я пробовал всякие фильтры, они там не помогут, там надо не фильтровать, а именно формировать хитрую амплитуду, которая получается на линейном выходе.
Я ничего не фильтрую, я тупо эмулирую конденсатор C15 (см. вложение), который заряжается/разряжается через резисторы R35, R29, R30, R31. Причём я упростил себе задачу и вместо резистивного делителя использую постоянное сопротивление для всех уровней и для заряда/разряда, хотя оно там динамически изменяется.
Частота дискретизации эмуляции равна частоте БК, на которой он в данный момент работает. Ну а модули вывода звука работают на частоте 44100, съём показаний с конденсатора делается с такой частотой, а то если постоянно вычислять экспоненту, очень уж тормозить начинает.


12 апр 2016, 09:35
Профиль

Зарегистрирован: 31 дек 2015, 02:49
Сообщений: 16
Откуда: г. Армавир Краснодарского края
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
gid писал(а):
peg писал(а):
А вообще, что это за сигнал Вы фильтруете? Какова частота отсчетов?

Я пробовал всякие фильтры, они там не помогут, там надо не фильтровать, а именно формировать хитрую амплитуду, которая получается на линейном выходе.
Я ничего не фильтрую, я тупо эмулирую конденсатор C15 (см. вложение), который заряжается/разряжается через резисторы R35, R29, R30, R31

Ну вот. Теперь я сообразил. Вы боретесь с шумом квантования.
Из схемы следует, что на выходе ЦАПа имеем 3 бита/8 уровней амплитуды.
Мы хотим их сгладить. Частота вывода весьма высока и сложностей с фильтрацией не представляет. А вот ступеньки - это да. Так просто от них не избавиться, ведь они возникают на любой частоте. То есть, тупо отфильтровать не выйдет.

Вы знаете, есть такая штука - дизеринг(dithering)?
https://ru.wikipedia.org/wiki/%D0%94%D0 ... 0%BD%D0%B3

Надо добавить к выходным ступенькам белый шум с амплитудой ступеньки. А потом отфильтровать (интегратором два-три раза, ну или вашим "конденсатором").
Попробуйте, должно стать заметно лучше.


13 апр 2016, 21:11
Профиль

Зарегистрирован: 31 дек 2015, 02:49
Сообщений: 16
Откуда: г. Армавир Краснодарского края
Сообщение Re: Эмулятор БК-0010-01, БК-0011 и БК-0011М
Возможно, я поспешил с советом (шум при дизеринге добавляют в сигнал до оцифровки). Хотя попробовать можно.

А просто линейное сглаживание не пробовали? То есть, вершины ступенек соединить прямыми (положить на углы ступенек "досточки"). Для этого надо обрабатывать текущую ступеньку и предыдущую (надо ждать изменения сигнала). А затем выдавать линейно изменяющуюся амплитуду от одной ступеньки до другой.
Может так случиться, что ждать придется слишком долго (например, больше 20-50 мС, не знаю, надо пробовать, какая задержка допустима), тогда выдавать ту же самую амплитуду, но имея запас в те же 20-50 мС, чтобы иметь возможность снова линейно (а не ступенчато) изменяться.
Надеюсь, не очень сумбурно?
Ну а если это поможет, то дальнейшее улучшение - это сглаживание полиномами (гладкими кривыми). Но сильно лучше уже не будет, так как информация о сигнале уже потеряна при оцифровке до 3 бит.
Я не знаю, это все-таки эмулятор. Может быть, есть возможность добавить шум до выхода на эти злосчастные 3 бита? Тогда дизеринг проходит в полный рост, точно будет лучше!


13 апр 2016, 23:10
Профиль
Показать сообщения за:  Сортировать по:  
Ответить на тему   [ Сообщений: 72 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 8  След.

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000 - 2011 phpBB Group.
Design creat de Florea Cosmin Ionut | Translation by WebSok.Ru

закрыть

Советскому бытовому " БК-0011М" посвящается...


Вопреки всем скептикам и недоброжелателям, дело БК живет и развивается. Не за горами день, когда будет выпущен в свет "БК-0012 Pulsar" - расширенный FPGA-клон БК-0011М. Пока же на данном форуме Вы можете ознакомиться с репликами БК-0011М(-01), приставкой Booster-11, репликой контроллера SMK64 (а также его FPGA-клоном - SMK512), аппаратным эмулятором ПЗУ КР1801РЕ2Б, блоками расширения с процессорами ВМ2/ВМ3, и другими интересными материалами и работами.
Ведутся работы по отрисовке в 3D корпусов БК, МСТД, оригинальных клавиатуры, джойстика и мыши, но пока не удается найти их производство по приемлемой цене при малом тираже. Выполнено производство новодельных пленок для клавиатур БК-0011М.
Важным для возрождения БК и его сообщества является новый софт (игры и демо в особености), и они периодически появляются!
Удалось решить многие hard-задачи, но нет системных программистов, востребованных в проекте БК-0012, как минимум для тестирования. Требуется разработка полноценного Win32-компилятора Си в bin-файлы БК.
Релизован полноценный каталогизатор всего софта БК, с удобным интерфейсом. Осталось выполнить собственно большую задачу каталогизации.

Ждем ваших откликов, идей. Сообщайте о данном ресурсе всем, кто увлекался в прошлом БКшкой, присылайте их и свои e-mail для рассылки новостей из мира БК.

nimamov@mail.ru