PDA

Просмотр полной версии : Новый, более эффективный кассетный формат



Страницы : 1 [2]

Barmaley_m
20.08.2013, 13:36
А вот тебе сгенерированный моей программой двухуровневый сигнал со спектром, заданным АЧХ фильтра Кауэра 3 порядка. Попробуй вычисли его спектр с помощью какого-нибудь звукового редактора, например.

Hacker VBI
20.08.2013, 13:36
Barmaley_m, загрузчик commodore (http://www.zimmers.net/anonftp/pub/cbm/crossplatform/transfer/C2N232/)
источник (http://ru.wikipedia.org/wiki/Commodore_Datasette)
может будет полезно?

Barmaley_m
14.07.2018, 02:43
Ребята, может, оживим тему немного? Надо сделать еще один рывок и понять, почему формат не работал на магнитофоне Haywire.

Перечитал старые сообщения. Похоже, я был слишком категоричен и отказывался от реальных испытаний, считая, что причины искажений понятны, а на самом деле это не так. Хочу попробовать выяснить конкретно по магнитофону Haywire - что там именно за искажения. Возникают ли они при записи или при считывании. И проявляются ли они на других экземплярах Spectrum +2.

Требуется помощь клуба. Обладатели Spectrum +2 со встроенными магнитофонами, включая Haywire - отзовитесь! Я вышлю вам кассету с записью в новом формате, ваша задача будет вставить ее в магнитофон и попробовать загрузить.

goodboy
14.07.2018, 09:34
+2 есть

ZX_NOVOSIB
14.07.2018, 09:59
А практический смысл есть в этом новом формате? Хотя бы с позиций ретрогейминга и т.п. Или спорт в чистом виде?

- - - Добавлено - - -

Имею в виду, что найдётся хоть один человек, который будет переделывать загрузчики к играм? А если и найдётся, то с кассеты обычно грузят поностальгировать, услышать "те самые" звуки. А тут звуки не те самые )

haywire
14.07.2018, 10:52
Ребята, может, оживим тему немного? Надо сделать еще один рывок и понять, почему формат не работал на магнитофоне Haywire.

Перечитал старые сообщения. Похоже, я был слишком категоричен и отказывался от реальных испытаний, считая, что причины искажений понятны, а на самом деле это не так. Хочу попробовать выяснить конкретно по магнитофону Haywire - что там именно за искажения. Возникают ли они при записи или при считывании. И проявляются ли они на других экземплярах Spectrum +2.

Требуется помощь клуба. Обладатели Spectrum +2 со встроенными магнитофонами, включая Haywire - отзовитесь! Я вышлю вам кассету с записью в новом формате, ваша задача будет вставить ее в магнитофон и попробовать загрузить.

Я тут. Не вопрос, хотите высылайте кассету. Хотите, файл - запишу на магнитофоне. Есть 2 штуки +2 со встроенными мафонами. Есть +3 с декой JVC TD-W7SD.

cafedead
24.07.2018, 02:33
Ребята, может, оживим тему немного? Надо сделать еще один рывок и понять, почему формат не работал на магнитофоне Haywire.


Привет... Мне, как фанату ленточных загрузок, стало интересно, поэтому я перечитал почти всю эту вашу тему... В общем, я сохранил то, что сохраняет твоя сохранялка (версия 130717, это последняя?). И мне сразу не понравилось то, что у тебя неравномерно выдержаны фронты сигнала, в результате чего волна после выхода из эмулятора, и из звуковой карты, и после входа в другую звуковую карту, превращается во что-то вообще непотребное... И это без всяких магнитофонов.

Стандартный спектрумовский сигнал так же уродуется, но при этом остается читаемым.

Я могу объяснить, почему эмуляторы твой контент могут прочитать. Поскольку эмулятору не известно, что придет на современный вход с АЦП хорошего разрешения, то, как вариант, по входящим данным считается скользящая средняя необходимой глубины, которую можно принять за середину, все что выше нее принимается за 0 для порта, все что ниже - за 1, ну или наоборот. В результате, какой бы ужасной ни была волна, эмулятор, или утилита для выделения сигнала, без труда передаст нужный бит либо в виртуальный порт виртуального Спектрума, либо в файл образа кассеты. Но реальный Спектрум такое вряд ли сможет. У него середина фиксированная, никуда с этого значения не уедет. Более того, она еще и не совпадает обычно с серединой, которую выдает магнитофон... У моих Спектрумов при загрузке ни разу не было красно-голубых полос одинакового размера, т.е. один фронт у приходящей волны пилота всегда оказывался длиннее, второй - короче. И дело не в громкости, ибо громкость увеличивала амплитуду сигнала относительно центра сигнала магнитофона, а центр разделения 0 и 1 порта Спектрума был иным. Более того, частотная модуляция предполагает, что в случае чего может быть пойман вообще противоположный фронт волны, и без проблем данные начнут читаться с него...

В рамках одной звуковушки все более ли менее хорошо выглядит, ну и там отлично видно, что фронты сигнала ты по длительности не выдерживаешь. К чему это приводит?! Тебе ведь известно, что прямоугольная волна, которую выдает Спектрум, после всех усилителей, процессов записей, процессов чтения, превращается в синус? Что это такое, по-твоему? Такой ровненький синус, повторяющий контуры волны? Ну отдаленно конечно повторяет, спору нет... Для волн, у которых фронты одинаковы по длительности. Этот синус - это результат работы всего этого НЧ-фильтра, представленного в виде всех этих процессов, всей электроники, которую проходит сигнал... Ну там на пути сигнала всякие конденсаторы заряжаются, разряжаются... Математически можно представить тоже в виде скользящей средней по данным сигнала с определенной глубиной. Таким образом, когда ты не выдерживаешь равномерность волны, делая один фронт длиннее, а второй - короче, ты как бы не даешь волне вернуться к противоположному... Эмм... Бортику. Уровень остается по большей части выше центра, затем за более равномерные колебания возвращается к центру, но у тебя уже часть данных прошла над центром Спектрума (ну та граница, разделяющая значения 0 и 1 для порта), и он там уже что-то пропустил, или твой алгоритм посчитал, что скорость не соответствует... Построй график скользящей средней по значениям генерируемой тобою неравномерной прямоугольной волны, и увидишь наглядно, о чем я говорю. Кстати, получается ни что иное, как НЧ-волна, которую как раз ты и порождаешь своими действиями... Если магнитофон хороший, то он прилежно ее запишет, и потом проиграет... Если где-то усиление низов, тогда плохо совсем... Зато какая-то мыльница, у которой отрезаны низкие частоты, возможно, не заметит такое, но вроде бы речь шла о надежном способе чтения, и чтоб никаких специализированных магнитофонов?!

В общем, я вам предлагаю, прежде чем возиться с кассетами, для начала зафиксить этот момент... Всегда уравновешивать порт для каждого элемента данных. Дал длинный фронт, второй таким же длинным должен быть. Иначе, боюсь, не выйдет... Ну или же стало бы возможным и без всяких алгоритмов удвоить скорость, передавая биты каждым фронтом волны... Соответственно, если хотите, чтобы любой бит информации был одинаковой длительности, то нужно, например, ноль представить как две волны, по длительности суммарно равные волне единицы.

Что касается практического применения... Мне кажется, смысла нет возиться с этим, разве что действительно как чисто спорт, ну или для собственного развития, и лучшего понимания процессов передачи данных... Тем более сегодня времена эмуляторов. Для эмуляторов такие форматы, предполагающие несколько размеров волны для "00", "01", "10" и "11", не сильно удобны... Сложно будет с перехватом и распознанием такого писка налету, в результате, придется формировать длинные TZX-файлы, неэффективно сохраняющие данные. На мой взгляд, хоть какой-то практический смысл был бы в однобитовых турбо-загрузчиках с коррекцией ошибок налету.

Spectramine
24.07.2018, 08:20
Я записывал игры на кассету в своем модифицированном формате - каждый бит записывался не двумя полупериодами/фронтами, как в оригинале, а одним, причем длины полупериодов были вдвое укорочены, таким образом, скорость в целом была в 4 раза выше. Читалось хорошо, правда 1) у меня в магнитофоне был встроен цифровой усилитель сигнала записи; 2) работало только на хороших кассетах - с красной/черной пленкой (BASF, Sony и подобные), на серых советских пленках не работало. Читаемость была выше, чем у обычного формата с записью бита двумя полупериодами с учетверенной скоростью.

Несколько лет назад я пытался оцифровать свои записи, часть оцифровал, потом надоело. В своей программе оцифровки пришлось перейти от подсчета времени ниже/выше уровня нуля к подсчету времени между экстремумами уровня сигнала в WAV файле, плюс делать восстановление информации по контрольной сумме в редких случаях, когда длина полупериода была сомнительной. А, и фильтровать сверхкороткие полупериоды.

cafedead
24.07.2018, 12:47
Я записывал игры на кассету в своем модифицированном формате - каждый бит записывался не двумя полупериодами/фронтами, как в оригинале, а одним, причем длины полупериодов были вдвое укорочены, таким образом, скорость в целом была в 4 раза выше. Читалось хорошо, правда 1) у меня в магнитофоне был встроен цифровой усилитель сигнала записи; 2) работало только на хороших кассетах - с красной/черной пленкой (BASF, Sony и подобные), на серых советских пленках не работало. Читаемость была выше, чем у обычного формата с записью бита двумя полупериодами с учетверенной скоростью.


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

Spectramine
24.07.2018, 16:49
Но с уверенностью могу предположить, что на другом реале и с другим магнитофоном не прочитали бы ничего.
Нет, я для чтения пользовался несколькими магнитофонами, проблем с чтением не было. Насчет другого реала не скажу, у меня был только Орель БК-08, но при оцифровке на PC вытаскивал почти всё.



читаемость выше именно у спектрумовского загрузчика.На стандартной скорости да, я имел ввиду учетверенную скорость обычного формата с двумя полупериодами на бит - такой формат был уже слабо пригоден к использованию, даже с цифровым усилителем записи, при той же плотности записи, что у моего формата.

cafedead
24.07.2018, 16:56
Нет, я для чтения пользовался несколькими магнитофонами, проблем с чтением не было. Насчет другого реала не скажу, у меня был только Орель БК-08, но при оцифровке на PC вытаскивал почти всё.


На стандартной скорости да, я имел ввиду учетверенную скорость обычного формата с двумя полупериодами на бит - такой формат был уже слабо пригоден к использованию, даже с цифровым усилителем записи, при той же плотности записи, что у моего формата.

Ну причем здесь оцифровка на PC? И сколько же у вас было полупериодов на бит?

Набросал вот иллюстрацию... Кое-где притянул за уши, кое-где приврал, кое-где подогнал, но суть происходящего должна быть понятна.

65825

Spectramine
24.07.2018, 20:24
Ну причем здесь оцифровка на PC? И сколько же у вас было полупериодов на бит?
Оцифровка при том, что считать данные в этом формате получилось и на другом компьютере - PC. Если бы всё было совсем плохо с форматом, считать данные на PC бы не получилось - невозможно было бы отличить 0 от 1. А так получилось, хоть и не без ухищрений.

Полупериодов на бит в моем формате - один. То есть весь формат построен на неравных полупериодах, причем полупериоды ещё и сокращены вдвое по сравнению со стандартным спектрумовским кодированием (а поскольку один бит у меня - один фронт, в целом получается в 4 раза быстрее). И всё читалось. Конечно, с учетом цифрового усилителя записи на записывающем магнитофоне, и хороших кассет. Но читалось, и с разными магнитофонами, правда, с подстройкой головки.

- - - Добавлено - - -


Ну или же стало бы возможным и без всяких алгоритмов удвоить скорость, передавая биты каждым фронтом волны...

Вот именно этим мой формат и занимался - передавал биты каждым фронтом волны. Удваивая скорость, да. Плюс еще одно удвоение за счет укорачивания фронтов вдвое.

cafedead
24.07.2018, 20:43
Оцифровка при том, что считать данные в этом формате получилось и на другом компьютере - PC. Если бы всё было совсем плохо с форматом, считать данные на PC бы не получилось - невозможно было бы отличить 0 от 1. А так получилось, хоть и не без ухищрений.

Полупериодов на бит в моем формате - один. То есть весь формат построен на неравных полупериодах, причем полупериоды ещё и сокращены вдвое по сравнению со стандартным спектрумовским кодированием (а поскольку один бит у меня - один фронт, в целом получается в 4 раза быстрее). И всё читалось. Конечно, с учетом цифрового усилителя записи на записывающем магнитофоне, и хороших кассет. Но читалось, и с разными магнитофонами, правда, с подстройкой головки.


Ну я уже объяснил, почему считывание данных на любом компьютере PC не имеет никакого значения. Это не имеет ничего общего с однобитным АЦП реального Спектрума. Где там у вас чего читалось с полупериодом на бит - сильно частный случай. А в PC - на здоровье, грузите что угодно, и расшифровывайте как угодно, тем более с ухищрениями, что само за себя уже говорит о надежности. Но к рассматриваемой теме это все не относится. Иначе в формате еще меньше смысла, чем даже было заявлено автором изначально.



Вот именно этим мой формат и занимался - передавал биты каждым фронтом волны. Удваивая скорость, да. Плюс еще одно удвоение за счет укорачивания фронтов вдвое.

Ну вот да, и надежность никакая... Будем реалистами.

Spectramine
24.07.2018, 21:24
Ну вот да, и надежность никакая... Будем реалистами.
Надежность была на высоте в заданной конфигурации - заводской Орель БК-08, магнитофон Весна с доработкой - цифровым усилителем записи (читал и с других магов), и кассеты с качественной пленкой. Если бы надежность была никакая, я бы этот формат не использовал, остановился бы на обычном турбо, скорее всего. Но мне захотелось проверить, будет ли работать вот так. И оказалось, что вполне работает. И причем даже спустя много лет данные с кассет считать реально. Так что надежность вполне приличная. Как я уже упомянул, она оказалась выше (намного), чем на учетверённой скорости обычного формата, с двумя фронтам на бит - такой формат не вытягивал даже с цифровым усилителем и качественной пленкой.

Конечно, оригинальный формат работал и на обычных советских кассетах, с обычной записью. Но у многих людей и с ним были проблемы.

cafedead
24.07.2018, 21:30
Если бы надежность была никакая, я бы этот формат не использовал


Если бы надежность была какая-то, то разработчики "Спектрума" неминуемо передавали бы биты каждым фронтом волны. Но этого не произошло.

Spectramine
24.07.2018, 22:01
Если бы надежность была какая-то, то разработчики "Спектрума" неминуемо передавали бы биты каждым фронтом волны. Но этого не произошло.

На многих ретрокомпьютерах на магнитофонах использовалась фазовая модуляция для записи данных. Она также предполагает разные длины соседних фронтов (зато фиксированную длину бита на ленте). Разработчики Спектрума вполне могли остановиться на ней.

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

cafedead
24.07.2018, 23:15
На многих ретрокомпьютерах на магнитофонах использовалась фазовая модуляция для записи данных. Она также предполагает разные длины соседних фронтов (зато фиксированную длину бита на ленте). Разработчики Спектрума вполне могли остановиться на ней.

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

Ну у нас речь про реальный "Спектрум", а не про другие ретро-компьютеры, вероятно, с другим железом. Поэтому действительно не получится. В алгоритме же коррекции ошибок, как я понимаю, нет, и пока не предвидится, или с этого стоило бы начать, а не с безудержного разгона кривых волн. Сплошные фантазии какие-то на тему.

Spectramine
25.07.2018, 00:18
У меня получилось, так что не "сплошные фантазии какие-то на тему". Возможно, и у других получилось бы, или получится. Другое дело, что сейчас в этом смысла нет.

- - - Добавлено - - -

Я могу сделать модифицированный вариант стандартного ПЗУ Спектрума 48, с ШИМ вместо ЧМ на стандартных частотах, с которым любой обладатель реала, позволяющего впечатывать в нижнее окно памяти страницу ОЗУ (а это Орель, Робик, Скорпионы, +2А/+3), может сделать ШИМ-записи программ и потестить их читаемость на его железе. Это альтернативный обычным турбо-записям вариант ускорения загрузки в два раза.

Barmaley_m
28.07.2018, 22:54
Я тут. Не вопрос, хотите высылайте кассету. Хотите, файл - запишу на магнитофоне. Есть 2 штуки +2 со встроенными мафонами. Есть +3 с декой JVC TD-W7SD.
Спасибо! Кассету записал и выслал. Проверить качество записи не удалось, т.к. у моего компьютера, оказывается, нет аудиовхода :( А через микрофон не прочиталось. Магнитофон довольно паршивенький, на слух - много детонаций. Так что должен быть хороший тест с этой кассетой!
Для остальных - tzx-файл, который можно как испытывать непосредственно в эмуляторах, так и записать на живую кассету и потом грузить на реале или через PC и обработку. Вот. Там загрузчик в стандартном формате и много экранов в 8b/10b.

- - - Добавлено - - -


Привет... Мне, как фанату ленточных загрузок, стало интересно,
Добро пожаловать!

В общем, я сохранил то, что сохраняет твоя сохранялка (версия 130717, это последняя?).
Честно говоря, не помню уже. Но они все рабочие, некоторые только чуть хуже, не так строго выдерживают времянки.

И мне сразу не понравилось то, что у тебя неравномерно выдержаны фронты сигнала,
Что значит "неравномерно выдержаны фронты сигнала"?

в результате чего волна после выхода из эмулятора, и из звуковой карты, и после входа в другую звуковую карту, превращается во что-то вообще непотребное... И это без всяких магнитофонов.
Можешь выложить звуковой файл с этой записью на гуглодрайв или еще куда, и дать мне ссылку? Хочу посмотреть, что именно произошло с сигналом. Вообще, мой формат был испытан на нескольких магнитофонах и имел проблемы пока только на одном (Haywire).

Стандартный спектрумовский сигнал так же уродуется, но при этом остается читаемым.
А мой становится нечитаемым?

Я могу объяснить, почему эмуляторы твой контент могут прочитать. Поскольку эмулятору не известно, что придет на современный вход с АЦП хорошего разрешения, то, как вариант, по входящим данным считается скользящая средняя необходимой глубины, которую можно принять за середину, все что выше нее принимается за 0 для порта, все что ниже - за 1, ну или наоборот.
Это ты описываешь обработку сигнала эмулятором? Не факт, что именно описанный тобой способ там используется. По-моему ты описал работу фильтра высоких частот (ФВЧ) с двухуровневым квантователем, но не уверен.

В моем случае никакой цифровой обработки сигнала в эмуляторе не производилось. Я брал звуковой файл (в том числе файлы, присланные другими пользователями, оцифрованные с реальных кассет) и с помощью своей матлаб-утилиты "wav2tzx", переводил его в формат TZX. А этот файл уже скармливал эмулятору, который никаких скользящих средних или другой обработки сигнала не производил.

В результате, какой бы ужасной ни была волна, эмулятор, или утилита для выделения сигнала, без труда передаст нужный бит либо в виртуальный порт виртуального Спектрума, либо в файл образа кассеты. Но реальный Спектрум такое вряд ли сможет. У него середина фиксированная, никуда с этого значения не уедет.
Правильно ли я понял, что ты описываешь некий алгоритм расчета значения, по которому надо отличать в сигнале единицы от нулей? Что если сигнал выше некоторого порогового значения - то он будет воспринят как "1", а если ниже - то как "0"?

Если так, то не все так плохо, как ты описываешь. Расчет порогового значения скользящим средним - это то же самое, что фильтр высоких частот (ФВЧ). Если этот фильтр имеет низкую частоту среза (20Гц и ниже) - то он удалит постоянную составляющую из сигнала, а нулевой уровень окажется оптимальным, чтобы использовать его в качестве порогового значения.

Более того, она еще и не совпадает обычно с серединой, которую выдает магнитофон...
Обычно совпадает, потому что во всех магнитофонах постоянная составляющая не записывается и не воспроизводится. Все тракты сигнала содержат проходные конденсаторы, которые (совместно с резисторами) образуют ФВЧ с низкими частотами среза.

У моих Спектрумов при загрузке ни разу не было красно-голубых полос одинакового размера, т.е. один фронт у приходящей волны пилота всегда оказывался длиннее, второй - короче.
У меня обычно полосы были одинаковыми, но я имел счастье использовать спектрум с хорошим магнитофонным входом ("Орель БК-08"), где для квантования сигнала используется микросхема компаратора (554СА3). Вот в дешевых клонах, где вместо компаратора используется логический элемент, может быть такое, что квантование производится не по нулевому уровню, а со смещением. Стандартный формат таким не убивается, а вот мой, в зависимости от прочих искажений, может пострадать. Надо будет поизучать вопрос.

И дело не в громкости, ибо громкость увеличивала амплитуду сигнала относительно центра сигнала магнитофона, а центр разделения 0 и 1 порта Спектрума был иным.
При увеличении громкости величина смещения нуля относительно амплитуды сигнала уменьшается, а следовательно, симметрия порогового значения должна улучшаться. Другое дело, если там смещение составляет десятки процентов от максимально возможной амплитуды сигнала магнитофона - тогда повышать некуда.

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

В рамках одной звуковушки все более ли менее хорошо выглядит, ну и там отлично видно, что фронты сигнала ты по длительности не выдерживаешь.
Что значит "не выдерживаю фронты сигнала по длительности"? Что под этим имеется в виду?

К чему это приводит?! Тебе ведь известно, что прямоугольная волна, которую выдает Спектрум, после всех усилителей, процессов записей, процессов чтения, превращается в синус?
Нет, не превращается. Где-то прямоугольный сигнал искажается, но совсем в синус не переходит. Я при испытаниях обрабатывал сигнал фильтрами низких частот где-то 4 порядка с частотой среза 2000Гц. После этого от прямоугольника действительно мало что остается, но этого тем не менее достаточно для уверенной загрузки в новом формате. В теории должно грузиться, даже если убрать полностью все частоты выше 2000Гц без существенных фазовых искажений. Должно грузиться. Теорема Котельникова, однако.

Этот синус - это результат работы всего этого НЧ-фильтра, представленного в виде всех этих процессов, всей электроники, которую проходит сигнал... Ну там на пути сигнала всякие конденсаторы заряжаются, разряжаются... Математически можно представить тоже в виде скользящей средней по данным сигнала с определенной глубиной.
Со мной можно на эти темы разговаривать не на образном, а на строгом языке теории линейных систем и фильтров, и обработки сигналов. Пожалуйста, объясни точнее, что ты имеешь в виду. Тогда мы сможем проанализировать и точно выяснить, делают ли некоторые фильтры невозможной загрузку в предлагаемом мной формате.

Таким образом, когда ты не выдерживаешь равномерность волны, делая один фронт длиннее, а второй - короче,
Длительность фронтов спектрумом не контролируется. Фронт кусочно-постоянного сигнала, каким является сигнал с магнитофонного выхода - это процесс перехода его с одного уровня на другой. Длительность этого процесса обусловлена не программой, а характеристикой магнитофонного выхода, наличием ФНЧ, конечностью быстродействия микросхем.

Возможно, ты "длительностью фронтов" называешь на самом деле длительность нахождения сигнала на постоянном уровне, т.е. длительность участков между фронтами. Давай тогда использовать общепринятые в отрасли термины, а то тяжело.

ты как бы не даешь волне вернуться к противоположному... Эмм... Бортику. Уровень остается по большей части выше центра, затем за более равномерные колебания возвращается к центру, но у тебя уже часть данных прошла над центром Спектрума (ну та граница, разделяющая значения 0 и 1 для порта), и он там уже что-то пропустил,
Если я правильно понял твои образные объяснения - то на строгом языке это звучит как опасение, что в сигнале 8b/10b присутствует постоянная составляющая. Нет, постоянной составляющей сигнал 8b/10b не имеет, хотя разбаланс количества нулей и единиц может кратковременно достигать +-4, что выше, чем в сигнале Спектрума (там максимально 2).

Построй график скользящей средней по значениям генерируемой тобою неравномерной прямоугольной волны, и увидишь наглядно, о чем я говорю. Кстати, получается ни что иное, как НЧ-волна, которую как раз ты и порождаешь своими действиями...
Да, получается НЧ-волна (я достаточно хорошо представляю себе такие вещи, чтобы не проводить эксперимент). Это свидетельствует о том, что в сигнале 8b/10b содержится несколько больше низких частот, чем в сигнале стандартного формата. Хотя в сигнале стандартного формата тоже есть низкие частоты. Попробуй запиши на кассету файл с псевдослучайным содержимым (например, содержим ПЗУ) и проведи на нём описанный тобой эксперимент - тоже получится НЧ-волна.

Также хочу заметить, что скользящее среднее - это частный случай фильтра низких частот (ФНЧ). Поэтому для иллюстрации сказанного тобой выше можно пользоваться не только скользящим средним, но и другими ФНЧ с похожей АЧХ. Также можно использовать спектральный анализатор для определения того, сколько и каких частот содержится в сигнале. Я в этой теме, кажется, выкладывал спектрограммы сигналов как в формате 8b/10b, так и в стандартном.

Если магнитофон хороший, то он прилежно ее запишет, и потом проиграет... Если где-то усиление низов, тогда плохо совсем...
Вообще говоря, усиление низов должно убить и синклерский формат, если оно совсем уж чрезмерное. Хотя для синклерского формата характерно очень низкое содержание НЧ по сравнению со всеми другими форматами, которые я изучал, поэтому, с точки зрения "горба на низах", синклерский формат имеет преимущество. Так как меньше исходное содержание НЧ - то меньше будет и их содержание после усиления.

Но я думаю, что магнитофон все же должен соответствовать хотя бы некоторым минимальным требованиям, например, четвёртой (самой худшей) группе сложности по ГОСТ 24863-87. Там указана максимальная неравномерность АЧХ, а значит, ограничена и величина возможного "усиления по низам".

но вроде бы речь шла о надежном способе чтения, и чтоб никаких специализированных магнитофонов?!
Никаких специализированных. Способ уже проверялся на нескольких магнитофонах и работает. Я для определённости хочу потребовать соответствие магнитофона требованиям ГОСТ 24863-87 для четвёртой группы сложности. Любой формат можно убить чрезмерными искажениями, поэтому следует задаться каким-то определенным максимально допустимым их уровнем и испытывать на нём.

В общем, я вам предлагаю, прежде чем возиться с кассетами, для начала зафиксить этот момент... Всегда уравновешивать порт для каждого элемента данных. Дал длинный фронт, второй таким же длинным должен быть. Иначе, боюсь, не выйдет...
Если, как ты говоришь, "уравновешивать" (то есть использовать только последовательности кодированного сигнала вида "10" и "1100" - то получится синклерский стандартный формат, который в этих рамках уже нельзя улучшить. Но я верю, что в этом нет необходимости. Кроме Спектрума есть компьютеры, использовавшие для записи на кассету Манчестерский код (также известный под названием "фазовая модуляция"), а это уже шаг вперёд по эффективности. Код 8b/10b ещё более эффективный, и он показал работоспособность, по меньшей мере, на некоторых магнитофонах. Тот магнитофон, где формат не заработал - он ужасно убивает сигнал, по меньшей мере, при записи. Он точно не соответствует никакому ГОСТу; проблема только в том, что он встроен в Spectrum +2.

Ну или же стало бы возможным и без всяких алгоритмов удвоить скорость, передавая биты каждым фронтом волны...
Формат 8b/10b делает даже больше. Он передаёт биты каждым битовым интервалом, в течение которого может быть, а может и не быть изменения уровня сигнала (т.е. "фронта"). Так как частота кодированных битовых интервалов как на синклерском формате, так и на 8b/10b, составляет 4кГц - то передаётся 4 килобита в секунду. Для обеспечения заданных свойств кодированного сигнала (отсутствие постоянной составляющей и др.) каждым 8 полезным битам соответствует 10 кодированных бит (отсюда и название формата). Формат даёт скорость в 400 полезных байт в секунду, что в среднем в 2 с половиной раза выше, чем скорость стандартного формата на файлах, состоящих из 50% нулей и единиц. При этом скорость записи 8b/10b не зависит от содержания файла (у синклерского формата - зависит).

Spectramine
29.07.2018, 00:26
Это ты описываешь обработку сигнала эмулятором? Не факт, что именно описанный тобой способ там используется. По-моему ты описал работу фильтра высоких частот (ФВЧ) с двухуровневым квантователем, но не уверен.

В моем случае никакой цифровой обработки сигнала в эмуляторе не производилось. Я брал звуковой файл (в том числе файлы, присланные другими пользователями, оцифрованные с реальных кассет) и с помощью своей матлаб-утилиты "wav2tzx", переводил его в формат TZX. А этот файл уже скармливал эмулятору, который никаких скользящих средних или другой обработки сигнала не производил.
Я так понимаю, речь идет про способ разделения входного аналогового сигнала на 0/1 эмулятором. Можно брать фиксированную границу разделения, а можно делать её скользящей, подстраиваясь под текущие экстремумы сигнала, второй способ надежнее.

Barmaley_m
29.07.2018, 01:40
Я так понимаю, речь идет про способ разделения входного аналогового сигнала на 0/1 эмулятором.
Если речь идет о TZX-файлах - то там эмулятор ничего не разделяет, там сигнал уже квантован (т.е. может принимать только два уровня, 0 и 1). Квантование (т.е. "разделение") производится не эмулятором, а программой, которая подготавливает TZX-файл на основе либо wav-файла, либо непосредственно с аудиовхода.

Можно брать фиксированную границу разделения, а можно делать её скользящей, подстраиваясь под текущие экстремумы сигнала, второй способ надежнее.
Надёжнее? Ты уверен? Я думаю, что лучший способ - это ФВЧ с низкой частотой среза (типа 1-5Гц), а после - фиксированная граница разделения, равная нулю. Тем самым будет удален средний уровень сигнала, если он отличается от нуля, а после этого сигнал будет разделен на уровни оптимальным образом с точки зрения вероятности ошибки. Тебе что-нибудь говорит словосочетание "глазковая диаграмма"?

Spectramine
29.07.2018, 01:56
Если речь идет о TZX-файлах - то там эмулятор ничего не разделяет, там сигнал уже квантован (т.е. может принимать только два уровня, 0 и 1). Квантование (т.е. "разделение") производится не эмулятором, а программой, которая подготавливает TZX-файл на основе либо wav-файла, либо непосредственно с аудиовхода.
Я имел ввиду WAV файлы, или прямое чтение с входа звуковухи.


Надёжнее? Ты уверен?
Я основываюсь на своем опыте написания кода чтения WAV -файлов для эмулятора. Поскольку уровни сигнала плавают, и не только от файла к файлу, но и внутри одного файла, для более надежного их разделения стоит сделать плавающей и границу разделения. Предварительная обработка всего WAV файла перед его чтением может быть довольно тормозным процессом в случае больших файлов, а скользящая граница разделения позволяет квантовать данные на лету.

- - - Добавлено - - -

И да, в теории цифровой обработки сигналов я не силен.

Barmaley_m
29.07.2018, 02:22
Я основываюсь на своем опыте написания кода чтения WAV -файлов для эмулятора.
Окей. А у тебя остались тестовые файлы, на которых ты испытывал эффективность своего кода (т.е. надежность их считывания загрузчиком)? Давай попробуем сравнить оба предложенных метода.

Поскольку уровни сигнала плавают, и не только от файла к файлу, но и внутри одного файла, для более надежного их разделения стоит сделать плавающей и границу разделения.
Да вот не факт. Для простоты рассмотрим синус. Допустим, что его амплитуда плавает. Если мы будем разделять уровни строго по нулю - то, очевидно, независимо от амплитуды синуса, мы получим на выходе цифровой прямоугольный сигнал с одним и тем же периодом, фазой и скважностью 2.

Теперь допустим, что наш синус имеет некоторую неизвестную постоянную составляющую. Тогда мы пропустим его через ФВЧ. Тем самым постоянная составляющая будет ликвидирована, и на выходе снова будет прямоугольник с постоянной частотой, фазой и скважностью 2, независимо от амплитуды входного синуса.

Даже, если постоянная составляющая меняется во времени, ФВЧ ее устранит, если он имеет достаточно высокую частоту среза.

В случае, если входной сигнал не синус, а имеет сплошной спектр (что имеет место в случае записи на кассету данных в каком-либо формате) - то картина усложняется, и тут выбор может быть сделан в пользу того алгоритма, который даёт лучшие результаты на тестах. У тебя есть тестовый материал в виде различных записей данных с кассет?

cafedead
29.07.2018, 02:56
Вообще, мой формат был испытан на нескольких магнитофонах и имел проблемы пока только на одном (Haywire).

А мой становится нечитаемым?

На 27 странице к верхнему комментарию добавлял картинку. Там я примерно накидал, в чем беда.

С этих нескольких магнитофонов данные в реал загружались?



Это ты описываешь обработку сигнала эмулятором? Не факт, что именно описанный тобой способ там используется. По-моему ты описал работу фильтра высоких частот (ФВЧ) с двухуровневым квантователем, но не уверен.

Ну да, ФНЧ - это, в простом исполнении, скользящая средняя...



В моем случае никакой цифровой обработки сигнала в эмуляторе не производилось. Я брал звуковой файл (в том числе файлы, присланные другими пользователями, оцифрованные с реальных кассет) и с помощью своей матлаб-утилиты "wav2tzx", переводил его в формат TZX. А этот файл уже скармливал эмулятору, который никаких скользящих средних или другой обработки сигнала не производил.

В любом случае, это - идеальные условия. Реальность далека от идеала. Также, как и смотреть 2-х мегапиксельной камерой на мир, это не то же самое, что смотреть фотоэлементом с двумя состояниями.



Правильно ли я понял, что ты описываешь некий алгоритм расчета значения, по которому надо отличать в сигнале единицы от нулей? Что если сигнал выше некоторого порогового значения - то он будет воспринят как "1", а если ниже - то как "0"?

Правильно. У реала он выражается в некотором фиксированном значении напряжения, которое задается электронными компонентами. У эмулятора - например, скользящей средней, или с найденными экстремумами что-то можно городить, как здесь привели в пример.



У меня обычно полосы были одинаковыми, но я имел счастье использовать спектрум с хорошим магнитофонным входом ("Орель БК-08"), где для квантования сигнала используется микросхема компаратора (554СА3). Вот в дешевых клонах, где вместо компаратора используется логический элемент, может быть такое, что квантование производится не по нулевому уровню, а со смещением. Стандартный формат таким не убивается, а вот мой, в зависимости от прочих искажений, может пострадать. Надо будет поизучать вопрос.

Он не просто не убивается, а еще и выходит, что запись можно подразогнать. Что, у пилота прям одинаковые красно-голубые полосы были? Потрясающе.



Что значит "не выдерживаю фронты сигнала по длительности"? Что под этим имеется в виду?

Возможно, ты "длительностью фронтов" называешь на самом деле длительность нахождения сигнала на постоянном уровне, т.е. длительность участков между фронтами. Давай тогда использовать общепринятые в отрасли термины, а то тяжело.


Да, извини, именно длительность и имелась в виду. Пытался сокращать. Волна состоит из двух полу-волн, сл-но между одной сменой значения, и другой сменой должны быть выдержаны равные интервалы времени... А когда ты не выдерживаешь интервалы, меняя скважность, получаешь гуляние аналогового сигнала, порождаешь НЧ-волны. НЧ-волна, вероятнее всего, мешает прочесть соседние биты одно-битовому АЦП реала. Тем более, что ты стремишься и по скорости взять все возможное. Думаю, стоит умерить аппетиты, хотя бы для начала.



Да, получается НЧ-волна (я достаточно хорошо представляю себе такие вещи, чтобы не проводить эксперимент). Это свидетельствует о том, что в сигнале 8b/10b содержится несколько больше низких частот, чем в сигнале стандартного формата. Хотя в сигнале стандартного формата тоже есть низкие частоты. Попробуй запиши на кассету файл с псевдослучайным содержимым (например, содержим ПЗУ) и проведи на нём описанный тобой эксперимент - тоже получится НЧ-волна.

У тебя полу-волны разного размера, что приводит к порождению НЧ-волны. Глянь иллюстрацию, что я сверху накидал. Это волны-паразиты, мешающие считать данные.



Если, как ты говоришь, "уравновешивать" (то есть использовать только последовательности кодированного сигнала вида "10" и "1100" - то получится синклерский стандартный формат, который в этих рамках уже нельзя улучшить. Но я верю, что в этом нет необходимости. Кроме Спектрума есть компьютеры, использовавшие для записи на кассету Манчестерский код (также известный под названием "фазовая модуляция"), а это уже шаг вперёд по эффективности. Код 8b/10b ещё более эффективный, и он показал работоспособность, по меньшей мере, на некоторых магнитофонах. Тот магнитофон, где формат не заработал - он ужасно убивает сигнал, по меньшей мере, при записи. Он точно не соответствует никакому ГОСТу; проблема только в том, что он встроен в Spectrum +2.


Ну если веришь, тогда приготовься к тому, что предел разгона такой волны будет заметно ниже классической Турбо-загрузки, со всеми вытекающими выводами по надежности. Это просто здравый смысл. И что, что на каких-то компьютерах реализована для сохранения на ленте фазовая модуляция? Другие-компьютеры - другое железо.

Попробуй начать с более скромными показателями. Выяснишь, где косяки, и затем будешь уже искать пределы. На данный момент, заявленные тобой цифры запредельные, и ничего общего с надежностью точно иметь не могут.

Еще могу посоветовать немного переработать загрузчик, чтобы он, вместо самой загрузки, сохранял временные задержки приходящего потока данных, чтобы это можно было затем как-то проанализировать для разных связок магнитофон-реал, сравнить с эталоном... Процесс пойдет более продуктивно.

Успехов.

cafedead
29.07.2018, 05:04
Да вот не факт. Для простоты рассмотрим синус. Допустим, что его амплитуда плавает. Если мы будем разделять уровни строго по нулю - то, очевидно, независимо от амплитуды синуса, мы получим на выходе цифровой прямоугольный сигнал с одним и тем же периодом, фазой и скважностью 2.

Даже, если постоянная составляющая меняется во времени, ФВЧ ее устранит, если он имеет достаточно высокую частоту среза.


А где у тебя будет находиться "ноль"? Ну вот допустим приехали отчеты, и там цифры от 0 до -5000. А может быть от 1000 до -10000. Т.е. "ноль" надо как минимум отыскать. Также может быть сюда замешана более низкая частота... Самое простое и быстрое - считать скользящую среднюю.

Spectramine
29.07.2018, 11:38
Окей. А у тебя остались тестовые файлы, на которых ты испытывал эффективность своего кода (т.е. надежность их считывания загрузчиком)? Давай попробуем сравнить оба предложенных метода.

Да вот не факт. Для простоты рассмотрим синус. Допустим, что его амплитуда плавает. Если мы будем разделять уровни строго по нулю - то, очевидно, независимо от амплитуды синуса, мы получим на выходе цифровой прямоугольный сигнал с одним и тем же периодом, фазой и скважностью 2.

Теперь допустим, что наш синус имеет некоторую неизвестную постоянную составляющую. Тогда мы пропустим его через ФВЧ. Тем самым постоянная составляющая будет ликвидирована, и на выходе снова будет прямоугольник с постоянной частотой, фазой и скважностью 2, независимо от амплитуды входного синуса.

Даже, если постоянная составляющая меняется во времени, ФВЧ ее устранит, если он имеет достаточно высокую частоту среза.

В случае, если входной сигнал не синус, а имеет сплошной спектр (что имеет место в случае записи на кассету данных в каком-либо формате) - то картина усложняется, и тут выбор может быть сделан в пользу того алгоритма, который даёт лучшие результаты на тестах. У тебя есть тестовый материал в виде различных записей данных с кассет?

Тут на форуме выкладывались записи данных с кассет, обычно файлы довольно объемные, я их не храню. Не приведено аргументов, почему не стоит делать плавающей границу квантования, только некоторые соображения о использовании ФВЧ в случае, если входной сигнал синус, и общие слова. Чтобы говорить предметно, приведи форму сигнала, с которой при квантовании не справится плавающая граница, но справится ФВЧ.

Barmaley_m
29.07.2018, 12:17
А где у тебя будет находиться "ноль"? Ну вот допустим приехали отчеты, и там цифры от 0 до -5000. А может быть от 1000 до -10000.
Нет проблем. Я же говорил, что в первую очередь нужно обработать сигнал с помощью ФВЧ. После ФВЧ цифры будут находиться, в первом случае, между -2500 и +2500, а во втором случае - между -5500 и +5500, т.е. симметрично относительно нуля. В этом свойство ФВЧ: помимо подавления низких частот, он полностью устраняет из сигнала постоянную составляющую. После ФВЧ сигнал становится симметричным относительно нуля. Если сложить все его отсчеты на всем протяжении записи - то получится строго нуль.

В такой ситуации квантование (т.е. разделение уровней) по нулю обеспечивает оптимальные результаты.

Т.е. "ноль" надо как минимум отыскать. Также может быть сюда замешана более низкая частота... Самое простое и быстрое - считать скользящую среднюю.
Расчет скользящей средней - это частный случай ФНЧ. Запомним это. Теперь я опишу твой алгоритм формулами и покажу, что он эквивалентен описанному мной выше.

Пусть твой входной сигнал будет x[i], где i=1...N. Обозначим отфильтрованный скользящим средним сигнал как xf[i], а квантованный (цифровой) сигнал - как y[i]. Тогда квантование будет описано формулой:

y[i] = { 1 при x[i]>xf[i]; 0 при x[i]<xf[i] }

Перенесем в неравенствах xf[i] в левую часть. Получится:
y[i] = {1 при x[i]-xf[i]>0; 0 при x[i]-xf[i]<0}

Таким образом, у нас сравнивается с нулем некоторый сигнал x[i]-xf[i]. Обозначим его как w[i]. Что же это за сигнал? Он представляет собой разность исходного сигнала и того же сигнала, пропущенного через ФНЧ. Пусть ФНЧ имеет передаточную функцию H(z). Тогда, если обозначить z-преобразование входного, отфильтрованного и искомой разности сигналов как X(z) и XF(z) и W(z) - то получим:

XF(z) = X(z)*H(z) - это так выглядит фильтрация в z-преобразовании
W(z) = X(z)-X(z)*H(z) - в z-преобразовании сумма сигналов остаётся суммой
W(z) = X(z)*(1-H(z)) - вынесли X(z) за скобки

Таким образом, расчет разности исходного и отфильтрованного с помощью ФНЧ сигнала эквивалентен фильтрации исходного сигнала другим фильтром, который имеет передаточную функцию 1-H(z). Что же это за фильтр и какова его АЧХ?

На "постоянном токе" (при z=1) ФНЧ имеет коэффициент пропускания, близкий или равный единице. В случае скользящего среднего он строго равен единице. Но тогда, если H(1)=1, то 1-H(1)=0, то есть результирующий фильтр на постоянном токе имеет нуль. Запомним это.

Далее, на высоких частотах (при z стремящемся к -1) коэффициент передачи ФНЧ близок к нулю. Но тогда 1-H(z) будет стремиться к единице. То есть на высоких частотах такой фильтр будет пропускать сигнал без ослабления. Выглядит так, что результирующий фильтр - это ФВЧ, так как на низких частотах он полностью подавляет сигнал, а на высоких - пропускает. Но это и так известный факт, что 1-H(z) превращает ФНЧ в ФВЧ и наоборот. Что и требовалось доказать.

А теперь внимание. Поскольку в реалах магнитофонный вход обычно реализован в виде ФВЧ и последующего сравнения сигнала с нулём - то он производит такое же квантование, какое ты счёл правильным. И, поскольку как в реале, так и в эмуляторе применяется одна и та же обработка сигнала - то нет никаких препятствий тому, чтобы проверенный на эмуляторе кассетный формат вдруг перестал работать на реале. И это подтверждается результатами испытаний на реалах.

- - - Добавлено - - -

Вот еще ссылка на детальный анализ схемы "Орель БК-08" (http://zx-pk.ru/threads/3173-orel-bk-08.html?p=857568&viewfull=1#post857568), там есть раздел, посвященный магнитофонному входу. Чётко объяснено его устройство и работа.

cafedead
29.07.2018, 13:43
Barmaley_m, Да я знаю и сам, что это одно и то же... Я просто обратил внимание на твою фразу:

"Да вот не факт. Для простоты рассмотрим синус. Допустим, что его амплитуда плавает. Если мы будем разделять уровни строго по нулю - то, очевидно, независимо от амплитуды синуса, мы получим на выходе цифровой прямоугольный сигнал с одним и тем же периодом, фазой и скважностью 2."

Разумеется, с фильтром все встает на свои места. Но без фильтра твое утверждение не верное в части про скважность. И твой "Орель" - это частный случай, также как и загрузка через 16-битный АЦП в эмулятор, или в программу распознавания... Я об этом и написал первый пост. Ты исходил из идеальных условий, когда скважность оставалась оригинальная. Я обрисовал, почему это далеко не всегда не происходит, и что оригинальный загрузчик это стабильно читает. Ты сказал, что изучишь. Т.е. тебе нужно изучить влияние нарушенной скважности на твой алгоритм, и, коли ты хочешь все же кривыми полу-волнами информацию передавать, какую минимально короткую полу-волну, следующую сразу за длинной полу-волной, ты можешь пробить в порт, записать на кассету без потери ее читаемости АЦП реала. Я ожидаю, что ее предел будет ниже предела читаемой полу-волны турбо-загрузки, а ты, на данный момент, этот предел превысил.

Barmaley_m
29.07.2018, 14:34
Barmaley_m, Да я знаю и сам, что это одно и то же...
Окей, верю. Но в таком случае странно, зачем ты до моего объяснения противопоставлял обработку с помощью ФВЧ предложенному тобой алгоритму сравнения с выходом фильтра скользящего среднего. Нам ведь не нужны лишние беспредметные споры, не так ли?

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

Если при входном синусоидальном сигнале двоичный сигнал на бите 6 порта #FE имеет скважность, существенно отличную от 2, как в твоём случае - значит, при квантовании сигнал сравнивается не с нулём, а с каким-то другим значением. Такое может происходить в двух случаях. 1) схемотехника магнитофонного входа выполнена неграмотно; 2) какие-то детали магнитофонного входа неисправны (например, электролиты подсохли или вход микросхемы пробит). Покажи мне схему своего компьютера, и я тебе её проанализирую на предмет того, может ли она в рабочем состоянии сравнивать сигнал с существенно ненулевым уровнем, или она была неисправна.

И твой "Орель" - это частный случай, также как и загрузка через 16-битный АЦП в эмулятор, или в программу распознавания... Я об этом и написал первый пост. Ты исходил из идеальных условий, когда скважность оставалась оригинальная.
Это не идеальные, а вполне нормальные условия, когда магнитофонный вход компьютера выполнен добротно хотя бы на уровне схемотехники 80х.

Я обрисовал, почему это далеко не всегда не происходит, и что оригинальный загрузчик это стабильно читает.
Насчет стабильности - можно поспорить. Обещаю, я проведу тесты и покажу тебе результаты насчет стабильности.

Т.е. тебе нужно изучить влияние нарушенной скважности на твой алгоритм, и, коли ты хочешь все же кривыми полу-волнами информацию передавать, какую минимально короткую полу-волну, следующую сразу за длинной полу-волной, ты можешь пробить в порт, записать на кассету без потери ее читаемости АЦП реала. Я ожидаю, что ее предел будет ниже предела читаемой полу-волны турбо-загрузки, а ты, на данный момент, этот предел превысил.
Я понял твоё убеждение, что магнитофонный сигнал должен состоять только из последовательностей вида "10" или "1100". Действительно, такое ограничение, наложенное на сигнал, способствует устойчивости считывания к широкому кругу искажений.

Проблема в том, что такое кодирование имеет низкий кпд - около 34%, как я недавно считал. То есть, на один полезный бит информации приходится в среднем 3 битовых интервала в кодированном сигнале.

Можно повышать скорость записи путем укорачивания битового интервала. Получится так называемое "турбо". Но все знают, что такое турбо. Тут нечего обсуждать, и нечего улучшать. Я много хранил информации на кассетах в турбо-формате, когда у меня был реал с магнитофоном 4-й группы сложности "Легенда-404" в 1992-1993гг и знаю, что надежность такого хранения ниже, чем в формате стандартной скорости. И все это знают. Тут сказывается то, что турбо-формат использует расширенную полосу частот по сравнению со стандартным форматом. А там более высоки неравномерности АЧХ магнитофонного тракта.

Формат 8b/10b - это попытка повысить скорость не за счет укорачивания битового интервала (как в турбо), а за счет применения более оптимального кодирования. Потребная полоса частот при этом остается такой же, как у стандартного формата, а скорость возрастает в 2 с половиной раза. Заманчиво? Весьма. Цели поставлены такие:
1) идеал - при сохранении такой же надежности считывания, как у оригинального формата, повысить скорость. Испытания показали, что это невозможно, поэтому ставится более скромная цель:
2) при повышении надежности по сравнению с турбо-форматами, обеспечить сравнимую с ними скорость.

Ты привел возражения, почему это не должно работать, но пока что они чисто умозрительные, реальных испытаний ты не проводил. Смысл нарисованных тобой картинок и стоящие за этим опасения мне понятны, но это рисунок, а не точный расчет. В реальности все не так плохо. Я проводил множество тестов с различными искажениями сигнала в формате 8b/10b, и формат показал неплохую устойчивость. Постараюсь сгенерировать эти картинки заново и выложить здесь для тебя.

cafedead
29.07.2018, 17:16
Barmaley_m, С каким НУЛЕМ, опять? У одного Спектрума одна настройка, у другого Спектрума - другая. У магнитофона третья, да еще и громкость может меняться. И скорость может немного меняться. И все эти связки и настройки разнообразны. Вон при записи в описании 0 - это 0.75В, а 1 - -1.3В. Как-то шибко наивно ожидать при чтении такую же скважность.

Мои возражения не чисто умозрительные... Это просто здравый смысл... Если ты говоришь, что ТАК НАЗЫВАЕМОЕ турбо не надежна, у которой полу-волны все же равного размера, то твоя загрузка с неравными полу-волнами еще менее надежна по определению, тем более, ты не скромничаешь со скоростью, а полоса частот у тебя еще более расширена. Хотя не знаю, что там в турбо расширено, все так же две частоты для 0 и 1, просто они выше. Можно период 1 приблизить к периоду 0, например.

Да, заманчиво передавать информацию каждой полу-волной, но сможешь ты это делать на сниженной скорости, как ни крути. И, как вариант, понадобится разное кодирование для первой и второй полу-волн, чтобы оно хоть как-то читалось... Ну например, если у тебя была длинная предыдущая полу-волна, например, означающая 1, то значит будет удлиненная вторая полу-волна, где 0 - чуть короче, и 1 - чуть длиннее, например, хотя даже в этом случае невозможно будет заявить, что все прям вот надежнее не бывает... Но не так, как ты делаешь, что у тебя длинная полу-волна, а затем маленькая пипочка вниз... Ну так работать точно не станет.

Ну если нравится тебе считать, что везде скважность одинаковая, а всем остальным нужно отремонтировать свои устройства, и кассеты - на здоровье, твое право. Но только не надо тогда рассказывать про надёжность, ну не конек это твоего алгоритма... И говоря про электронику 80-х не стоит забывать, что Спектрум выпускался максимально дешевым, т.е. экономия была на всем.

Со своей стороны я уже все сказал, что хотел, еще в первом своем посте. Добавить нечего...

Barmaley_m
29.07.2018, 19:53
Я тут провёл небольшое исследование на тему оптимального соотношения нулей и единиц в стандартном кассетном формате.

Известно, что стандартный формат записывает бит "0" последовательностью кодированных бит "10", а бит "1" - последовательностью "1100", которая в 2 раза длиннее. Таким образом, файл, состоящий из одних нулей, будет загружен в 2 раза быстрее файла, состоящего из одних единиц (или #FF).

Разумеется, файл с нулями или FF-ами не несёт никакой информации. Обычно, если файл скомпрессирован или состоит из случайных данных - то количество нулевых бит в нём примерно равно количеству единиц. Таким образом, получается, что средняя скорость записи случайных данных равна среднему арифметическому между скоростями записи одних нулей и одних единиц.

Если изменить соотношение нулей и единиц в файле; скажем, сделать так, чтобы только 20% всех бит были равны единице - то средняя скорость записи возрастёт. Хотя останется неясным, сколько же информации можно передать таким способом. Я рассмотрел вопрос с точки зрения энтропии по Шеннону (https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D 0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%8D%D0%BD%D1 %82%D1%80%D0%BE%D0%BF%D0%B8%D1%8F).

Для двоичного сигнала энтропия (т.е. информационная ёмкость) каждого бита H0 = -p*log2(p)-(1-p)*log2(1-p), где p - вероятность того, что бит равен 1. Легко проверить, что при p=0.5 энтропия равна 1, а также то, что при этом p достигается максимальная информационная ёмкость сигнала.

При рассмотрении энтропии не полезного, а кодированного сигнала, записываемого на кассету в стандартном спектрумовском формате, нужно учесть, что нули и единицы имеют разную длительность. Длительность каждого кодированного бита равна в среднем 2+2*p, где за единицу измерения взят минимальный интервал между фронтами. Таким образом, энтропия кодированного сигнала на этом интервале равна H1=(-p*log2(p)-(1-p)*log2(1-p))/(2+2*p)

Для нахождения процентного соотношения нулей и единиц, при котором H1 достигает максимума, нужно найти производную H1 и приравнять её к нулю. Производная H1' = (-log2(p)+2*log2(1-p))/(2*(1+p)^2). Решая уравнение H1'=0, находим два корня, один из которых соответствует p>1, и потому не подходит, а второй корень равен p*=(3-sqrt(5))/2, что примерно равно 38.2%. Таким образом, когда примерно 38% всех бит в файле равны 1, а остальные равны 0, достигается максимальная энтропия на единицу времени кодированного сигнала и тем самым максимальная плотность записи в спектрумовском формате. Подставив значение p* в формулу для H1, находим, что H1*~=0.347, что несколько выше значения H1 при p=0.5, которое составляет 0.333.

Таким образом, оптимизация соотношение нулей и единиц в файлах стандартного формата позволяет повысить плотность записи информации, хотя лишь незначительно - на 4.1%.

Ввиду незначительности выигрыша, я не вижу смысла в разработке программной реализации. Но, чисто теоретически, она могла бы выглядеть так:
1) Компрессия файла наилучшим возможным образом
2) Обработка преобразованием, меняющим частоту нулевых и единичных бит. Длина файла при этом в среднем вырастет на 4.2%, однако загрузится такой файл на 4.1% быстрее, чем если сохранить исходную информацию без преобразования.
3) Сохранение обработанного файла
При загрузке обработка идет в обратной последовательности:
4) Загрузка
5) Преобразование, обратное проведенному на шаге 2)
6) Декомпрессия.

Полученный результат имеет ту ценность, что спектр кодированного сигнала наиболее близок к белому шуму при соотношении нулей и единиц, равному p*.
Привожу получившиеся картинки и исходный код программы для расчета. Программа работает под GNU Octave, также можно ее запускать на Matlab. С помощью программы можно поэкспериментировать и убедиться, что найденное соотношение кол-ва нулей и единиц действительно является оптимальным. Также для тех, кто еще не видел спектрального анализа сигналов, записанных в стандартном спектрумовском формате, в аттаче находится спектрограмма.

cafedead
30.07.2018, 12:33
Известно, что стандартный формат записывает бит "0" последовательностью кодированных бит "10", а бит "1" - последовательностью "1100", которая в 2 раза длиннее. Таким образом, файл, состоящий из одних нулей, будет загружен в 2 раза быстрее файла, состоящего из одних единиц (или #FF).

1) Компрессия файла наилучшим возможным образом
2) Обработка преобразованием, меняющим частоту нулевых и единичных бит. Длина файла при этом в среднем вырастет на 4.2%...

Есть ломанные игрушки, те, что с надписью "M1 LOADING". Они запакованы. Что касается преобразования... Можно использовать табличку преобразований из 256 значений (наверное, можно сократить), заменив наиболее часто встречающиеся в потоке значения с большим количеством единиц на значения с минимальным количеством единиц. Но это лишь возможность. Есть хорошие шансы, что понесенные расходы будут напрасными.

Еще можно сохранять не сами значения, а результат по "исключающему или" относительно предыдущего значения... Так для картинок, где может быть много одинаковых подряд значений, состоящих из единиц, можно получить больше нулей, и сл-но более быструю загрузку (например, заставка к игре "XCEL", состоящая из кучи единиц, загрузится точно быстрее)...

Barmaley_m
30.07.2018, 17:03
В сообщении выше я ошибся - выигрыш от оптимизации соотношения нулей и единиц составляет не 1.4%, как я писал ранее, а целых 4.1%. Подправил в сообщении выше. Впрочем, этот выигрыш тоже слишком мал для того, чтобы заморачиваться с преобразователем.

AzAtom
31.07.2018, 21:45
Конечно, оригинальный формат работал и на обычных советских кассетах, с обычной записью. Но у многих людей и с ним были проблемы.
Часто загрузка прерывалась. Тогда на магнитофоне подкручивал почти до максимума регулятор усиления и загрузка проходила хорошо. Позже, записав на PC, я увидел, в чём проблема - одна волна или полуволна оказывались с очень низким уровнем и в спеке не происходило смены 0-1 на входе с магнитофона.

- - - Добавлено - - -


как вариант, по входящим данным считается скользящая средняя необходимой глубины, которую можно принять за середину, все что выше нее принимается за 0 для порта, все что ниже - за 1, ну или наоборот.
Это и так делается фильтром высоких частот, встроенным в звуковую. Если подать на вход постоянный уровень, то на оцифровке уровень поднимется или опустится и затем опустится или поднимется до 0.

- - - Добавлено - - -


У реала он выражается в некотором фиксированном значении напряжения, которое задается электронными компонентами.
Конденсатор на входе убирает постоянную составляющую. Например, в моём клоне спека после конденсатора идёт усилитель на ЛН1 и сигнал "пляшет" около значения, которое этот усилитель считает границей между 0 и 1, далее сигнал идёт на ещё один усилитель на таком же элементе ЛН1 и, вроде, там организуется небольшой гистерезис, после второго усилителя сигнал уже прямоугольный и достаточно хорошо разделён на 0 и 1 без ложных срабатываний и искажений скважности. Последнее, конечно, зависит от изначально записанного сигнала, но на стандартной выгрузке проблем нет.

- - - Добавлено - - -


Что, у пилота прям одинаковые красно-голубые полосы были? Потрясающе.
На моём спеке - да, всё было одинаковой ширины.

haywire
31.07.2018, 22:31
Barmaley_m, Почту от Вас ещё не получал. Но записал Ваш tzx файл на кассету, и попытался загрузить. Первая картинка - это +2 через встроенный мафон, вторая - это +3 с той же деки, на которую это писалось. Basic грузится отлично, loader грузится отлично, как только попытка грузить нестандартный формат - мгновенно ошибка. Моя аппаратура - звуковая карта Lynx Studio E22 - аудиофильская звуковая карта, дека - JVC TD-W7SD - hi-fi дека топового уровня в отличном состоянии, прекрасно играет музыку, кассета That's MG-A100 - очень хорошая кассета типа 4, новая из пачки. Я это пишу для того, чтобы снять вопросы про несоответствие классу 4 аппаратуры СССР, аппаратура хорошая, лучше долго искать будете :-) В общем, что-то не так.
http://www.sanarin.ru/pic/tape_test/tape1.png
http://www.sanarin.ru/pic/tape_test/12.png

- - - Добавлено - - -

Вот видео

http://www.sanarin.ru/pic/tape_test/VID20180731222442.mp4

cafedead
01.08.2018, 01:26
Это и так делается фильтром высоких частот, встроенным в звуковую. Если подать на вход постоянный уровень, то на оцифровке уровень поднимется или опустится и затем опустится или поднимется до 0.


Вы, видимо, про фильтр низких частот?!! Ну это смотря чего откуда читается... Можно слушать, например, то, что генерирует открытый параллельно эмулятор, и тогда ничего никуда никаким входным фильтром не изменится, а задача, тем не менее, для эмулятора, или программы оцифровки состоит в том, чтобы "Прочитать частотную модуляцию", и справиться с этим лучше, чем это смог бы сделать реал с однобитовым АЦП, принимая во внимание любые возможные искажения, как, например, еще одна замешанная волна.



Конденсатор на входе убирает постоянную составляющую. Например, в моём клоне спека после конденсатора идёт усилитель на ЛН1 и сигнал "пляшет" около значения, которое этот усилитель считает границей между 0 и 1, далее сигнал идёт на ещё один усилитель на таком же элементе ЛН1 и, вроде, там организуется небольшой гистерезис, после второго усилителя сигнал уже прямоугольный и достаточно хорошо разделён на 0 и 1 без ложных срабатываний и искажений скважности. Последнее, конечно, зависит от изначально записанного сигнала, но на стандартной выгрузке проблем нет.


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

Это ведь не у меня, надеющегося на фильтры и чудо, что-то не работает... Это ведь не я заявляю о надежности, т.е., расшифрую, когда читается в большинстве возможных случаев, а не в каких-то частных ситуациях... Я свои мысли изложил не для того, чтобы поспорить... Использовать это, хотя бы изучить это, или вообще забить на это - дело автора. И если честно, мне все равно. Я уже для себя понял, что автор - это какой-то мечтатель, фанат матлаба и теорий. Это вовсе не плохо. Ну а у меня, будем считать, некое извращенное понимание надежности...

6587965880

Ну не будет вот такое читаться через аналоговые преобразования, сколько вы тут ни бейтесь... Это утопия. Ну разве что современный АЦП + программа распознавания с улучшайзерами, или эмулятор. Нужно хотя бы отдаленно выдерживать волны... А тут полу-волна в 2 и даже в 3 раза короче соседней полуволны. И таких целый ряд. Ну это не серьезно. Полу-волны должны быть длиннее, для более длинной - такие же более длинные обратные полу-волны соизмеримого размера для 0 и 1... Тогда, возможно, что-то и получится.



звуковая карта Lynx Studio E22 - аудиофильская звуковая карта, дека - JVC TD-W7SD - hi-fi дека топового уровня в отличном состоянии, прекрасно играет музыку, кассета That's MG-A100 - очень хорошая кассета типа 4, новая из пачки.


Просто огонь... -)

AzAtom
01.08.2018, 09:34
Уровень 0 на оцифровке можно брать между прошлым и текущим max min в пределах ожидаемого периода. Так не пробовали детектировать? Ещё можно вновь вычисленный уровень 0 не устанавливать сразу, а постепенно приближаться к нему в течение 2-3 периодов.

haywire
01.08.2018, 10:50
Уровень 0 на оцифровке можно брать между прошлым и текущим max min в пределах ожидаемого периода. Так не пробовали детектировать? Ещё можно вновь вычисленный уровень 0 не устанавливать сразу, а постепенно приближаться к нему в течение 2-3 периодов.

Может быть, и можно. Но от реального спектрума этого добиться не возможно. Его 1бит АЦП как работает, так и работает, и ничего с этим не сделать.

cafedead
01.08.2018, 12:03
Уровень 0 на оцифровке можно брать между прошлым и текущим max min в пределах ожидаемого периода. Так не пробовали детектировать? Ещё можно вновь вычисленный уровень 0 не устанавливать сразу, а постепенно приближаться к нему в течение 2-3 периодов.

Быстрее и проще скользящую среднюю считать, и с этой величиной сравнивать значения... Это и есть "постепенно приближаться к нему в течение 2-3 периодов". Ну да не суть... Я о том и говорю, что на эмуляторе, или при оцифровке можно сделать много чего, и делается... Поэтому основываться лишь на том, что вот у тебя в эмулятор, или в программу оцифровки, читалось - ну это странно. Это идеальные условия. Так же как и тесты только на идеальных клонах...

goodboy
01.08.2018, 12:31
вспомнил как в своё время несколько кассет оцифровал под эмулем на амиге.
там вообще сигнал с магнитофона подавался на кнопку `огонь` в порт джойстика.
без всяких аналоговых фильтров

Barmaley_m
01.08.2018, 19:48
Но записал Ваш tzx файл на кассету, и попытался загрузить. Первая картинка - это +2 через встроенный мафон, вторая - это +3 с той же деки, на которую это писалось.
Привет. Спасибо за тесты. Пара уточняющих вопросов, а то я не совсем понял, что на чем писалось и читалось.

1) Запись была проведена один раз на деке?
2) Загрузка проводилась для первой картинки через встроенный мафон +2?
3) Для второй картинки, загрузка проводилась в +3 с внешнего магнитофона через кабель? Внешний магнитофон (дека) - это та, на которой писалось?

haywire
01.08.2018, 20:01
Привет. Спасибо за тесты. Пара уточняющих вопросов, а то я не совсем понял, что на чем писалось и читалось.

1) Запись была проведена один раз на деке?
2) Загрузка проводилась для первой картинки через встроенный мафон +2?
3) Для второй картинки, загрузка проводилась в +3 с внешнего магнитофона через кабель? Внешний магнитофон (дека) - это та, на которой писалось?


Да, всё так.

Barmaley_m
01.08.2018, 20:01
Ну ничего, давайте и на это забьем. Ну подумаешь... Слушайте, а у меня были самые убогие клоны, да и магнитофоны не лучше, и при записи в результате вообще такой шум шел между сигналами, что я вообще поражался, как оно это грузило... Но конечно, мы ведь здесь не говорим о надежности, мы будем представлять себе идеальную систему, где никаких посторонних шумов нет, никаких искажений нет, ноль - это ноль, а волны могут быть кривыми, что также не повлияет ни на что... Но, друзья, так вы ни к чему не придете. Впрочем, тут, видимо, получают удовольствие от самого процесса обмена кассетами... -)

Это ведь не у меня, надеющегося на фильтры и чудо, что-то не работает... Это ведь не я заявляю о надежности, т.е., расшифрую, когда читается в большинстве возможных случаев, а не в каких-то частных ситуациях... Я свои мысли изложил не для того, чтобы поспорить...
Что-то не наблюдается. Ты вроде говорил, что всё сказал. Я и не стал отвечать, чтобы не разводить здесь флейм. Но, похоже, что ты не удовлетворен. Чего ты хочешь?

Я уже для себя понял, что автор - это какой-то мечтатель, фанат матлаба и теорий. Это вовсе не плохо. Ну а у меня, будем считать, некое извращенное понимание надежности...
Вот откуда столько агрессии? Особенно в сторону человека, который тебя лично не трогает? Не мешай людям работать. Мы здесь разбираемся, почему система не работает у отдельно взятого человека (у остальных она заработала на реальных магнитофонах без всяких аудиофильских приборов). Поняв причины неполадок, мы либо их устраним, либо убедимся, что это невозможно. Твоё участие в этом процессе неконструктивно. Твои обоснования причин, почему формат не должен работать, несостоятельны и опровергаются как практикой, так и дополнительными вычислительными тестами, которые я на днях провел и собираюсь оформить и выложить на форум.

cafedead
01.08.2018, 20:30
Поняв причины неполадок, мы либо их устраним, либо убедимся, что это невозможно. Твоё участие в этом процессе неконструктивно. Твои обоснования причин, почему формат не должен работать, несостоятельны и опровергаются как практикой, так и дополнительными вычислительными тестами, которые я на днях провел и собираюсь оформить и выложить на форум.

Да я и не тебе адресовал это сообщение. Чем я тебе "мешаю работать"? Я тебе подсказал:
1) откуда НЧ волна берется,
2) вариант, как в теории можно сделать: если первая полу-волна длинная, то вторая должна быть тоже длинная, +- для 0 и 1,
3) как можно отследить, в чем ошибка: с помощью отладочного загрузчика, сохраняющего отчет о временных интервалах...

Подсказал, чтобы вы не заморачивались с кассетами, не устранив некоторые моменты, и сократили время на поиск проблем. Картинки приложил, время потратил. Тебе это не помогло? Это скорее у тебя какая-то неадекватная реакция на, замечу, конструктив, и какая-то агрессия.

Без всяких аудиофильских приборов? А, т.е. звуковушка, и магнитофон должны быть из помойного ведра взяты, а вот у Спектрума должен быть самый лучший порт из всех существующих портов?! Ну, ты извини меня в очередной раз, но это опять частный случай.

Дополнительные вычислительные тесты тоже в матлабе посчитал?! Ууу, боюсь... В общем, я всё.

Barmaley_m
01.08.2018, 21:28
Да, всё так.
Отлично. У +2, как я понял, нет магнитофонного входа?

Я подозреваю, что дело в магнитофонном усилителе (в случае +2) или входе (в случае +3). Не мог бы ты провести еще два небольших теста? А именно:
1) Записать кассету на ПОНИЖЕННОМ уровне, децибел так на 10? И попробовать еще раз на +3? Если у магнитофонного входа или усилителя на каком-то этапе наступает перегрузка - то это может привести к нелинейным искажениям, а при низком уровне сигнала, может быть, можно избежать перегрузки. Шумы, конечно, повысятся, но они не так страшны.

2) Подключить аудиокарту компа непосредственно к +3, минуя магнитофон? Если сразу пойдут ошибки - то покрутить уровень сигнала на выходе звуковухи?

haywire
01.08.2018, 22:05
Сейчас попробую, конечно всё это, но заранее уверен в неуспехе. Вот почему.


> Если у магнитофонного входа или усилителя на каком-то этапе наступает перегрузка - то это может привести к нелинейным искажениям, а при низком уровне сигнала, может быть, можно избежать перегрузки.

Уровень громкости - настроен. Кассеты - грузятся, хорошо грузятся. Никакой перегрузки там 100% нет, канал настраивался. -10Дб (правильно я понял ?) - слишком много ИМХО, спектрум просто не услышит пилоттона. Но попробую, конечно же.


> 2) Подключить аудиокарту компа непосредственно к +3, минуя магнитофон? Если сразу пойдут ошибки - то покрутить уровень сигнала на выходе звуковухи?

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

Barmaley_m
01.08.2018, 22:23
Если у магнитофонного входа или усилителя на каком-то этапе наступает перегрузка - то это может привести к нелинейным искажениям, а при низком уровне сигнала, может быть, можно избежать перегрузки.

Уровень громкости - настроен. Кассеты - грузятся, хорошо грузятся. Никакой перегрузки там 100% нет, канал настраивался.
Воот! На кассете перегрузки нет, это понятное дело. Я думаю, что перегрузка может наступать уже в схеме магнитофонного входа (или усилителя воспроизведения) Спектрума. Не исключено, что синклерский формат устойчив к последствиям перегрузки, а 8b10b - нет.

-10Дб (правильно я понял ?) - слишком много ИМХО, спектрум просто не услышит пилоттона. Но попробую, конечно же.
Спасибо! -10дБ - это навскидку. С одной стороны, хороший шанс, что это устранит возможную перегрузку, а с другой стороны - что сигнал будет еще "услышан". Был бы я на месте с осциллографом - быстро бы разобрался.

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

Я не знаю ни одной программы для компьютера, умеющий проигрывать tzx в форме синусоиды. Есть программа k7zx, которая умеет генерировать сигнал пилообразной формы, он грузится значительно лучше прямоугольной, но Ваш .tzx файл она прочитать не может.
Ни в коем случае не надо! Пусть будет прямоугольник и только прямоугольник. С ним шансы на загрузку наилучшие. Я могу еще подготовить wav-файл с отфильтрованным сигналом - будет похоже на "синусоиду". Сейчас пришлю.

haywire
01.08.2018, 22:45
Ну, в общем уменьшение уровня ни к чему не привело. Уменьшал шажками до тех пор, пока не стал нечитаем загрузчик. Картина абсолютно такая же : всё что, на стандартном алгоритме - грузится, дальше мгновенно ошибка.

- - - Добавлено - - -

А подключение компьютера напрямую к звуковой карте дало результат : загрузились все картинки.

Barmaley_m
01.08.2018, 22:58
Ну, в общем уменьшение уровня ни к чему не привело. Уменьшал шажками до тех пор, пока не стал нечитаем загрузчик.
Спасибо, Haywire! Хоть результаты на твоей технике по большей части отрицательные, но я тебе очень благодарен, что проводишь испытания.

А подключение компьютера напрямую к звуковой карте дал результат : загрузились все картинки.
Ну что ж, прогресс есть :) А как ты генерировал сигнал на компьютере? Прямоугольниками или каким-то другим способом? Менял ли уровень, влияло ли это на надежность загрузки?

Я подготовил для тебя (и остальных, кто пожелает попробовать) отфильтрованный wav-файл. Фильтр реально жесткий: начинает резать от 2кГц, полное подавление уже на 3кГц. После него остаются почти одни только синусоиды :) Полученный wav-файл в эмуляторе загрузился, так что теперь надежда на твою технику! Если испытывать через кассету - то давай тогда со средним уровнем записи, где-то посередине между тем, которым ты раньше пользовался, и тем, где загрузчик перестает читаться.

https://drive.google.com/open?id=16K6WJpQFkdBpkzIwj3llxENAT416zSYV

haywire
01.08.2018, 23:16
Да, генерировал сигнал на компьютере эмулятором. Прямоугольниками. Уровень не менял, он стандартный собственно.

Отфильтрованный файл не грузится никак - ни с компьютера, ни с кассеты. Симптомы те же (стандартные блоки грузятся, на нестандартных - ошибка), игры с громкостью результатов не дают.

Barmaley_m
02.08.2018, 00:28
haywire, понял, спасибо! Интересные результаты.

Я все же хочу точно выяснить, какой именно вид искажений мешает новому формату загружаться на твоём оборудовании. То ли это линейные искажения (т.е. неравномерности АЧХ), то ли какие-то нелинейные, и где конкретно они возникают. Результаты этих исследований могут выйти далеко за рамки спектрумовских кассет. Скажем, если удастся точно определить, какой фактор является критическим - то это может помочь создать эффективные системы передачи сигналов по кабелям. Нынче в системах кодирования на кабелях (HDMI и т.п.), насколько я знаю, никто не увлекается форматами наподобие синклерского. Подобные вещи считаются устаревшими. А преимущества налицо.

Буду пока готовить результаты вычислительных экспериментов по неравномерности АЧХ (сравнение для разных форматов), а также думать, какие еще испытания можно провести. Наверное, надо мне разжиться реалом и магнитофоном, чтобы самому проводить подобные испытания, вооружившись осциллографом.

Spectramine
02.08.2018, 01:17
Я подготовил для тебя (и остальных, кто пожелает попробовать) отфильтрованный wav-файл. Фильтр реально жесткий: начинает резать от 2кГц, полное подавление уже на 3кГц. После него остаются почти одни только синусоиды :) Полученный wav-файл в эмуляторе загрузился

Грузится в Fuse и ZXSpin, выдает ошибку загрузки на нестандартных блоках в SpecEmu и ZXMAK2.

upd. в ZXMAK2 грузится, надо отключить ускорение (Traps) в окне Tape. В SpecEmu отключение ускорения не помогает.

goodboy
02.08.2018, 01:27
Для остальных - tzx-файл, который можно как испытывать непосредственно в эмуляторах, так и записать на живую кассету и потом грузить на реале или через PC и обработку. Вот. Там загрузчик в стандартном формате и много экранов в 8b/10b.
а как он был создан ?

Barmaley_m
02.08.2018, 01:48
а как он был создан ?
Сначала были созданы wav-файлы, соответствующие стандартным и нестандартным блокам.Для стандартных я сначала создал .tap-файл с помощью ZX-Blockeditor и преобразовал его какой-то из утилит в wav. Нестандартные wav-файлы создавались прилагаемой программой на языке C. Она может создавать не только wav-, но и tzx-файлы, однако эти вариации формата tzx не поддерживаются большинством эмуляторов, и поэтому в них мало пользы. Поэтому я создавал wav.

Потом wav-файлы были склеены в звуковом редакторе. Под конец wav-файл был преобразован с помощью прилагаемой утилиты wav2tzx на Матлабе в тот файл, который я выкладывал.

Грубо говоря, все эти утилиты создают "идеальный" tzx-файл в формате 8b10b без каких-либо линейных или нелинейных искажений. Скорость может слегка отличаться от номинальной, но загрузчики это с лёгкостью компенсируют. Насколько я помню, в выкладывавшейся сохранялке 8b10b на Z80 Assembler были какие-то косяки. Я отложил их исправление до тех пор, пока не будет подтверждена работоспособность формата как такового.

Для испытаний устойчивости формата к искажениям можно создавать искажения в звуковом редакторе, а потом с помощью wav2tzx.m преобразовывать получившийся файл в tzx и грузить в эмуляторе. Собственно, так я и проверил, что после фильтрации файл еще грузится.

AzAtom
08.08.2018, 14:46
haywire, может, записать обратно с кассеты на комп и отправить wav Бармалею для разбирательств искажений?

Barmaley_m
09.08.2018, 00:43
haywire, может, записать обратно с кассеты на комп и отправить wav Бармалею для разбирательств искажений?
Привет, AzAtom. Хорошая идея. Можно было бы посмотреть, какой сигнал идет с ленты.

AzAtom
10.08.2018, 09:35
Barmaley_m, для проверки я бы сделал так. Первым блоком записать не загрузчик нового формата, а "логический осциллограф", пишущий состояние порта магнитофона в память побитово. Следующий блок запись в новом формате. По заполнении памяти "осциллограф" ждёт нажатия клавиши и выгружает содержимое памяти в стандартном формате.
Потом на PC можно загрузить полученную осциллограмму, масштабировать к исходному сигналу с новым форматом и сравнить уровни и искажения.

cafedead
10.08.2018, 13:30
Barmaley_m, для проверки я бы сделал так. Первым блоком записать не загрузчик нового формата, а "логический осциллограф", пишущий состояние порта магнитофона в память побитово. Следующий блок запись в новом формате. По заполнении памяти "осциллограф" ждёт нажатия клавиши и выгружает содержимое памяти в стандартном формате.
Потом на PC можно загрузить полученную осциллограмму, масштабировать к исходному сигналу с новым форматом и сравнить уровни и искажения.

Я ему уже несколько страниц назад предлагал сам загрузчик немного переписать, чтобы после пилота, вместо самого блока, просто задержки писались в память между каждой сменой значения порта (из его аналога LD-EDGE)... Это не сложно. Потом ему могли бы эту отладочную информацию скинуть, сравнив которую с эталоном, можно было бы что-то понять. "Осциллограф" писать вроде не очень эффективно, но из той же оперы.


Еще могу посоветовать немного переработать загрузчик, чтобы он, вместо самой загрузки, сохранял временные задержки приходящего потока данных, чтобы это можно было затем как-то проанализировать для разных связок магнитофон-реал, сравнить с эталоном... Процесс пойдет более продуктивно.

Он на меня наорал, и заявил, что я ему "мешаю работать", и мои предложения не конструктивны...


Чем я тебе "мешаю работать"? Я тебе подсказал:
1) откуда НЧ волна берется,
2) вариант, как в теории можно сделать: если первая полу-волна длинная, то вторая должна быть тоже длинная, +- для 0 и 1,
3) как можно отследить, в чем ошибка: с помощью отладочного загрузчика, сохраняющего отчет о временных интервалах...

Еще раз повторил.

Barmaley_m
10.08.2018, 23:25
Barmaley_m, для проверки я бы сделал так. Первым блоком записать не загрузчик нового формата, а "логический осциллограф", пишущий состояние порта магнитофона в память побитово. Следующий блок запись в новом формате. По заполнении памяти "осциллограф" ждёт нажатия клавиши и выгружает содержимое памяти в стандартном формате.
Потом на PC можно загрузить полученную осциллограмму, масштабировать к исходному сигналу с новым форматом и сравнить уровни и искажения.
Подобный анализ уже проводился. Мне раньше Haywire присылал оцифровки со встроенного магнитофона. А там в схеме Spectrum +2 так сделано, что фактически на выход "Ear" поступает сигнал с магнитофона после компаратора, т.е. практически цифровой. Я пытался их грузить в эмуляторе и проводил другую обработку. Анализ показал, что гуляет продолжительность интервалов между фронтами в широких пределах, делая загрузку невозможной. Но выяснить причины, почему гуляет длительность, на основе этих записей не представляется возможным. Даже нельзя сказать, линейные это искажения (главным образом) или нет.

Еще есть на Спектруме старая программа под названием, кажется, Tape Signal Analyzer, она в реальном времени выводит распределение длительности между фронтами. Когда идет пилоттон, четко видно одну полосу, когда идут данные в стандартном формате - то видно две. Когда идут данные в формате 8b/10b - то видно 4 или 5 полос, если запись хорошая. А если такая, какие присылал Haywire - то каша. Некоторая каша наблюдается и в записях Haywire стандартного формата. Но по каким-то причинам там гуляет не каждый интервал между фронтами, а каждый второй.

Я мог бы продвинуться дальше, если будет какой-то доступ к аналоговым сигналам до усиления с насыщением. Еще вариант - как-то померить АЧХ тракта встроенного магнитофона с учетом того, что там усилители нелинейные (имеется в виду АЧХ до насыщения усилителя). Это можно было бы сделать тест-сигналами специальной формы. Я думал над этим, но конкретного метода измерения АЧХ пока не разработал.

haywire
11.08.2018, 10:53
Вот оцифровка кассеты, которую я писал.

http://www.sanarin.ru/pic/tape_test/Untitled1.wav

Barmaley_m
11.08.2018, 11:36
Вот оцифровка кассеты, которую я писал.
Спасибо! После пропускания этой записи через матлаб-утилиту wav2tzx (выкладывал выше (http://zx-pk.ru/threads/21336-novyj-bolee-effektivnyj-kassetnyj-format.html?p=974189&viewfull=1#post974189)), у меня всё прекрасно загрузилось на эмуляторе. Последний экран только был обрезан, но до самого обрыва записи грузился хорошо.

В паузах tzx-файла отчетливо прослушивается наводка 50Гц, но когда начинается блок данных - то она становится не слышна. Скорость немного плавает, как и должно быть на любом магнитофоне. Но загрузчик справляется.

Так что проблема здесь не с реальным магнитофоном, как потирали руки некоторые, а с чем-то другим. Подытожим, что же мы имеем с твоим оборудованием:
1) Встроенный магнитофон, реал, запись-воспроизведение - не грузится
2) Запись на встроенном магнитофоне, оцифровка на PC - не грузится
3) Внешний магнитофон, запись с компа, реал - не грузится
4) Линейный выход компа, реал - грузится
5) Линейный выход компа, реал, запись обработана линейно-фазовым ФНЧ - не грузится
6) Внешний магнитофон, запись и воспроизведение на PC, потом эмулятор - грузится.

Отсюда предположение, что в твоей системе магнитофонный вход реала вносит какие-то существенные искажения. Ладно, будем думать дальше.

haywire
11.08.2018, 14:52
Barmaley_m, вашу кассету получил. Не грузится, и не должна. Она посыпалсь - пропуски звука. Сейчас кассеты типа FE использовать не надо, половина из них для записи уже не пригодна.

cafedead
11.08.2018, 18:21
Еще есть на Спектруме старая программа под названием, кажется, Tape Signal Analyzer, она в реальном времени выводит распределение длительности между фронтами. Когда идет пилоттон, четко видно одну полосу, когда идут данные в стандартном формате - то видно две. Когда идут данные в формате 8b/10b - то видно 4 или 5 полос, если запись хорошая. А если такая, какие присылал Haywire - то каша. Некоторая каша наблюдается и в записях Haywire стандартного формата. Но по каким-то причинам там гуляет не каждый интервал между фронтами, а каждый второй.
Я тебе довольно подробно объяснил, почему так происходит, и даже зарисовал. Разумеется, это схематично, и иногда кусочки волн все же попадают в нижнюю часть графика, и фиксируются смены значений порта... Вот и будут твои гуляющие интервалы. Ну перечитай ты все еще раз, и как-то, не знаю, попытайся осмыслить написанное, вместо каких-то обид, споров, и простыней текста.

65825

- - - Добавлено - - -




Так что проблема здесь не с реальным магнитофоном, как потирали руки некоторые, а с чем-то другим.

Это ты про себя, видимо? Нужно вещи своими именами называть, как ты и просил. Да, проблема с чем-то другим, а именно: с твоим порождающим искажения способом сохранения данных без уравновешивания волн, и без учета существующих в аналоговом мире ограничений, а также с твоим нежеланием, или неспособностью даже из имеющихся данных сделать адекватные выводы.

Очевидно, проблема с реальным железом была исключена изначально, поскольку стандартные блоки у человека грузились без проблем. А ты на 32-й странице додумался до этого? Да ты - гений.


Подобный анализ уже проводился. Мне раньше Haywire присылал оцифровки со встроенного магнитофона. А там в схеме Spectrum +2 так сделано, что фактически на выход "Ear" поступает сигнал с магнитофона после компаратора, т.е. практически цифровой. Я пытался их грузить в эмуляторе и проводил другую обработку. Анализ показал, что гуляет продолжительность интервалов между фронтами в широких пределах, делая загрузку невозможной. Но выяснить причины, почему гуляет длительность, на основе этих записей не представляется возможным. Даже нельзя сказать, линейные это искажения (главным образом) или нет.

Это не "подобный анализ", а вообще не то, что тебе тут порекомендовали, и о чем я ранее писал. Тебе нужно было записать ожидаемый эталонный сигнал с задержками между сменами значений порта, например, таким же измененным загрузчиком, который у тебя в твоей связке правильно все грузит, и затем сравнивать с этим то, что тебе прислали. Визуально цифры задержек сравнивать. Что там у тебя "не представляется возможным"? В чем проблема? И какое вообще значение имеет схема какой-то конкретной модели для тебя и твоей задачи?!