Что значит "без примеров"? Ты тему вообще читал? Haywire выкладывал файлы. После этого шло их обсуждение.
Вид для печати
Что значит "без примеров"? Ты тему вообще читал? Haywire выкладывал файлы. После этого шло их обсуждение.
Последние файлы записаны с выхода Спектрума, т.е. после компаратора. Оригинальная (аналоговая) АЧХ при этом не сохраняется. Нужно качать файлы, записанные через другой магнитофон, которые появлялись ранее в этой же теме.
Не совсем понимаю, зачем стараться получить какую-то особенную АЧХ на магнитофонном выходе. Ведь записавшись и воспроизведясь сигнал может претерпеть широчайшие и невиданные изменения АЧХ и так же ФЧХ. А стало быть, упор надо делать не на то, чтобы получить какую-то специфическую АЧХ, а наоборот, чтобы быть толератным к широким диапазоном ее искажения. Единственное, избавить сигнал от постоянки, но это в предложенных вариантах и так есть.
В том-то и дело, что именно не может сигнал претерпеть "широчайшие и невиданные изменения АЧХ и ФЧХ". Если бы это было так - то загрузить любой широкополосный сигнал было бы невозможно ни в каком формате. Искажения АЧХ и ФЧХ (это также называется термином "линейные искажения") допускаются в некоторых пределах, но начиная с определенной величины загрузка станет невозможной. Да это и логично. Кому нужен магнитофон с АЧХ, прыгающей на десятки децибел в пределах звукового диапазона частот? На нем и музыку нормально не послушаешь, не то что программы грузить.
Скажем, в ГОСТ 24863-87 ("Магнитофоны бытовые. Общие технические условия") для малогабаритных магнитофонов четвертой группы сложности (то есть самых худших магнитофонов, приемлемых для категории "бытовые") установлено следующее:
коэффициент передачи в области 250-4000Гц должен находиться между 0 и -4дБ. Т.е., если принять за средний уровень -2дБ - то отклонение должно быть не более +-2дБ;
нижняя пропускаемая частота с ослаблением не более -7дБ - не более 80Гц
верхняя пропускаемая частота с ослаблением не более -7дБ - не менее 8000Гц
Можно было бы разрабатывать формат для применения на магнитофонах, удовлетворяющих хотя бы этим минимальным требованиям из процитированного стандарта, но кто же виноват, что магнитофон ZX Spectrum +2 (по своей природе или в связи с техническим состоянием экземпляра Haywire) далеко не вписывается в эти допуски, и при этом синклерский формат на нем грузится.
Я пытаюсь получить не "особенную АЧХ" (АЧХ магнитофонного тракта вообще неподконтрольна программисту), а особенный спектр сигнала для записи на магнитофон. Зачем?
Линейные искажения, какими являются выбросы или провалы в АЧХ, имеют интересную особенность. Они могут усиливать или ослаблять имеющиеся спектральные составляющие сигнала, но не могут добавить новые, которых в сигнале нет. Также искажениям подвергаются только те спектральные составляющие, которые лежат в области, где АЧХ неравномерна.
Отсюда простая идея: удалить из сигнала составляющие, которые лежат в области с неравномерной АЧХ тракта магнитофона. Пусть магнитофон пытается исказить сигнал на этих частотах, но если в нашем сигнале таких частот нет - то ничего ему исказить не удастся.
Невозможно быть толерантным к широким диапазонам искажения АЧХ. Синклерский формат оказался толерантным к тем искажениям, которые имеются на магнитофоне Haywire. Думаю, что можно подобрать такую конфигурацию искажений на других частотах, которая, не превышая по величине имеющиеся у Haywire искажения, сможет убить и синклерский формат. Единственная возможность защитить сигнал от неравномерности АЧХ - это иметь узкополосный сигнал, в пределе - на одной частоте. Но такой сигнал не несет полезной информации.
---------- Post added at 18:20 ---------- Previous post was at 16:35 ----------
Появилась еще одна идея.
Нужно измерить АЧХ тракта магнитофона Haywire.
Традиционный способ мог бы заключаться в записи на кассету тест-сигнала, с последующей его оцифровкой и обработкой. Однако мы не можем оцифровать аналоговый сигнал с этого магнитофона, так как сигнал доступен только на выходе компаратора. Также сам тест-сигнал в нашем случае не может быть произвольным, а должен генерироваться Z80 с его однобитным "ЦАП".
Думаю, что даже в этих условиях можно что-то сделать. Раз неравномерность АЧХ существенным образом проявляется на записи данных в разных форматах, в виде искажения длительности импульсов - то на основе этих искажений длительности должно быть возможным сделать какие-то конкретные выводы об АЧХ, особенно если подобрать тест-сигнал нужным образом.
Например, если записывать на кассету короткие импульсы, а потом измерять их длительность при загрузке - то можно оценить частоту среза по ВЧ. Но это лишь грубые прикидки. Должен быть более систематический подход.
Есть тут кто-нибудь, кто достаточно силен в теории, чтобы реализовать подобную схему измерений? Обрабатывать сигнал при воспроизведении не обязательно на Спектруме, достаточно и оцифровать его с выхода компаратора, а обработку вести на PC с применением мощных методов, таких как преобразование Фурье и т.д. Я мог бы и сам этим заняться, но это займет время, так что содействие могло бы помочь ускорить дело.
Все, что ты приводишь в пример (ГОСТ'Ы, рациональные доводы о том, кому нужны такая АЧХ) - это все теория, оторванная от практики.
Я, когда писал униеверсальную читалку, перелопатил сотни реальных записей, и самое общее, что можно сказать - это практически непредсказуемая АЧХ, со спадом почти любой крутизны в сторону высоких (хотя бывает и наоборот), причем не то, что на 10, бывает и на 20дб и более. Причина - всевозможные искажения сложенных между собой трактов всей цепочки магнитофонов, на которых это переписывалось, так же особенности и истрепанности пленки, так же неправильные режимы записи, так же сточенные головки, и так же неподстроенные головки (что совсем часто встречается).
Опираться в построении устойчивого формата на одну только отстраненную от практики теорию, а так же специфический магнитофон уважаемого Haywire, на мой взгляд, просто абсурдная идея.
---------- Post added at 22:40 ---------- Previous post was at 22:35 ----------
Помимо линейных искажений, есть еще и нелинейные, такие, как насыщение (дисторшн).
Сигнал, полученный на выходе среднестатистического спектрума - это меандр с целой кучей гармоник, от которых не избавиться.
Как удалить из меандра гармоники? Как сделать синус?
Где найти гарантированную область равномерной АЧХ?
На мой взгляд, это фантастика.
Я не делаю универсальную читалку, тем более на ZX, где нет возможности применять сколько-нибудь сложные методы обработки сигналов в реальном времени. Эти записи, о которых ты говоришь - они в таком виде читались на реале? Или данные удалось извлечь только после обработки сигнала эквалайзерами и т.д.?
Кстати, можешь дать ссылку на свою читалку? Интересно посмотреть, если она настолько продвинутая.
Ну вот почему ты постоянно пытаешься повесить ярлык отстраненности от практики? Тут на протяжении всей темы в основном практика идет - люди проводят испытания, и я провожу. На том, что доступно. По результатам практических испытаний ведутся дальнейшие разработки. Куда тебе еще практики-то?
Знаешь, хорошо, конечно, иметь огромную статистику и парк магнитофонов и реалов для испытаний. Но в моем распоряжении всего этого нет. Я пытаюсь получить наилучший результат в тех условиях, что имеются. Это и отличает человека от робота: последний работает только в известных заранее условиях, а человек иногда может выкрутиться и тогда, когда все обстоятельства против него. Вот ты, например, занимаешься сейчас неконструктивной критикой, а мог бы вместо этого предложить свои ресурсы для решения проблем, с которыми столкнулся проект.
Что касается специфического магнитофона ув. Haywire - то это единственный из магнитофонов, участвовавших в испытаниях, который работал с синклерским форматом и отказал со всеми моими форматами. Разве не логично в таком случае добиться устойчивой работы нового формата сначала на этом, наиболее проблемном из доступных для испытаний магнитофонов, а потом уже идти дальше?
У тебя есть конкретные причины считать, что на магнитофоне Haywire именно этот вид искажений вносит существенный вклад в общую картину?
Меандр - это прямоугольный сигнал на постоянной частоте, а у нас шумоподобный, широкополосный битовый сигнал. Слово "гармоника" в этом контексте не имеет никакого смысла. Спектром битового сигнала возможно управлять в некоторой степени. Я это продемонстрировал несколькими сообщениями ранее, прислав образец спектра. Прислать тебе сам сигнал, чтобы ты посмотрел его спектр и убедился?
Я ставлю цели поскромнее. Задача - сделать такой формат, который бы не убивался такими искажениями, которыми не убивается синклерский. Если неравномерности АЧХ в какой-то области или какие-то иные искажения убивают синклерский формат - то мне нет дела до того, будет ли мой формат работать в таких условиях. Будет - хорошо. Нет - и ладно.
Да, многие записи читались.
Ссылки прямой у меня нет, но на форуме где-то тут проскакивала. Кажется, newart владеет информацией.
---------- Post added at 01:50 ---------- Previous post was at 01:48 ----------
Эти испытания и практика на очень узком количестве реальных магнитофонов. Практически только на одном.
Это хорошо, что ты пытаешься получить лучшее, но при этом почему-то сильно привязываешься именно к единственному варианту от Haywire.
---------- Post added at 01:53 ---------- Previous post was at 01:50 ----------
Целый период - это уже частота. Да даже если б был не целый - свойства, по которым прямоугольный сигнал раскладывается на гармоники - сохраняются. По факту - стандартный спектрумовский сигнал - это двухчастотный сигнал с кучей гармоник, обусловленных его прямоугольной формой и модулированностью.
Пришли. Правда, я не совсем понимаю, что за сигнал ты хочешь прислать. Спектры стандартного спектрумовского сигнала я много раз видел.
---------- Post added at 01:54 ---------- Previous post was at 01:53 ----------
Т.е. цель сделать такой же по устойчивости формат? Но при этом большей плотности?
В таком случае у тебя есть шанс помочь проекту. Пришли мне несколько таких убитых записей, которые читались без обработки. Я попытаюсь по записям понять характер искажений и буду тестировать свои форматы на похожих искажениях.
Это же твой проект. Ты разве его не релизил где-то, хотя бы в теме на форуме?
Ты специально отрицаешь очевидные вещи? Мне уже надоело повторять. Испытывалось на нескольких магнитофонах. Прочитай тему с начала. На одном не заработало, но те магнитофоны, на которых заработало, нельзя исключать из статистики.
Я уже объяснял причины, по которым сосредоточил сейчас внимание на этом магнитофоне. Тебе они непонятны? Если тебе кажется, что я "слишком сильно" сосредоточился на этом магнитофоне - то потрудись объяснить, почему, с твоей точки зрения, это неправильно.
Сигнал записи на магнитофон непериодический, хоть в синклерском формате, хоть в любом другом. Если бы он был периодический - то информацию нес бы только первый период сигнала, а второй и последующий не несли бы, т.к. повторяли бы еще раз то, что уже загружено.
И что же это за свойства, которые ты имеешь в виду?
Что такое вообще "разложение на гармоники"? Разложение в ряд Фурье? Но в ряд Фурье можно разложить только периодическую функцию (сигнал). Тогда его спектр будет дискретным, и в нем будет пик на основной частоте и ее гармониках. В случае же непериодической функции (сигнала) разложение в ряд Фурье невозможно и, соответственно, не имеют смысла такие термины, как "гармоники".
Непериодический сигнал можно разложить в интеграл Фурье; также существуют и другие способы оценки его спектра. В общем случае такой сигнал имеет непрерывный спектр, т.е. содержит колебания не на дискретном наборе частот, а на их континууме.
Вот тебе спектр спектрумовского сигнала на записи ПЗУ (т.е. более-менее случайных данных). На рисунке 1 спектр от 0 до 22050Гц, на рис. 2 - его часть от 0 до 2000 с небольшим Гц (та часть, где содержится полезная информация; все, что выше, может быть безболезненно удалено фильтром). Покажи мне тут двухчастотность и гармоники.
Да.
Вот что лично я увидел интересного в этих спектрах - это то, насколько сильно в них подавлены низкие частоты. Так, уровень на 200Гц подавлен на 16.5дБ по сравнению со средним уровнем в основном диапазоне частот, где находится сигнал (800-2000Гц). Неудивительно, что такой сигнал устойчив к горбам АЧХ на низких частотах.
А вот тебе сгенерированный моей программой двухуровневый сигнал со спектром, заданным АЧХ фильтра Кауэра 3 порядка. Попробуй вычисли его спектр с помощью какого-нибудь звукового редактора, например.
Barmaley_m, загрузчик commodore
источник
может будет полезно?
Ребята, может, оживим тему немного? Надо сделать еще один рывок и понять, почему формат не работал на магнитофоне Haywire.
Перечитал старые сообщения. Похоже, я был слишком категоричен и отказывался от реальных испытаний, считая, что причины искажений понятны, а на самом деле это не так. Хочу попробовать выяснить конкретно по магнитофону Haywire - что там именно за искажения. Возникают ли они при записи или при считывании. И проявляются ли они на других экземплярах Spectrum +2.
Требуется помощь клуба. Обладатели Spectrum +2 со встроенными магнитофонами, включая Haywire - отзовитесь! Я вышлю вам кассету с записью в новом формате, ваша задача будет вставить ее в магнитофон и попробовать загрузить.
+2 есть
А практический смысл есть в этом новом формате? Хотя бы с позиций ретрогейминга и т.п. Или спорт в чистом виде?
- - - Добавлено - - -
Имею в виду, что найдётся хоть один человек, который будет переделывать загрузчики к играм? А если и найдётся, то с кассеты обычно грузят поностальгировать, услышать "те самые" звуки. А тут звуки не те самые )
Привет... Мне, как фанату ленточных загрузок, стало интересно, поэтому я перечитал почти всю эту вашу тему... В общем, я сохранил то, что сохраняет твоя сохранялка (версия 130717, это последняя?). И мне сразу не понравилось то, что у тебя неравномерно выдержаны фронты сигнала, в результате чего волна после выхода из эмулятора, и из звуковой карты, и после входа в другую звуковую карту, превращается во что-то вообще непотребное... И это без всяких магнитофонов.
Стандартный спектрумовский сигнал так же уродуется, но при этом остается читаемым.
Я могу объяснить, почему эмуляторы твой контент могут прочитать. Поскольку эмулятору не известно, что придет на современный вход с АЦП хорошего разрешения, то, как вариант, по входящим данным считается скользящая средняя необходимой глубины, которую можно принять за середину, все что выше нее принимается за 0 для порта, все что ниже - за 1, ну или наоборот. В результате, какой бы ужасной ни была волна, эмулятор, или утилита для выделения сигнала, без труда передаст нужный бит либо в виртуальный порт виртуального Спектрума, либо в файл образа кассеты. Но реальный Спектрум такое вряд ли сможет. У него середина фиксированная, никуда с этого значения не уедет. Более того, она еще и не совпадает обычно с серединой, которую выдает магнитофон... У моих Спектрумов при загрузке ни разу не было красно-голубых полос одинакового размера, т.е. один фронт у приходящей волны пилота всегда оказывался длиннее, второй - короче. И дело не в громкости, ибо громкость увеличивала амплитуду сигнала относительно центра сигнала магнитофона, а центр разделения 0 и 1 порта Спектрума был иным. Более того, частотная модуляция предполагает, что в случае чего может быть пойман вообще противоположный фронт волны, и без проблем данные начнут читаться с него...
В рамках одной звуковушки все более ли менее хорошо выглядит, ну и там отлично видно, что фронты сигнала ты по длительности не выдерживаешь. К чему это приводит?! Тебе ведь известно, что прямоугольная волна, которую выдает Спектрум, после всех усилителей, процессов записей, процессов чтения, превращается в синус? Что это такое, по-твоему? Такой ровненький синус, повторяющий контуры волны? Ну отдаленно конечно повторяет, спору нет... Для волн, у которых фронты одинаковы по длительности. Этот синус - это результат работы всего этого НЧ-фильтра, представленного в виде всех этих процессов, всей электроники, которую проходит сигнал... Ну там на пути сигнала всякие конденсаторы заряжаются, разряжаются... Математически можно представить тоже в виде скользящей средней по данным сигнала с определенной глубиной. Таким образом, когда ты не выдерживаешь равномерность волны, делая один фронт длиннее, а второй - короче, ты как бы не даешь волне вернуться к противоположному... Эмм... Бортику. Уровень остается по большей части выше центра, затем за более равномерные колебания возвращается к центру, но у тебя уже часть данных прошла над центром Спектрума (ну та граница, разделяющая значения 0 и 1 для порта), и он там уже что-то пропустил, или твой алгоритм посчитал, что скорость не соответствует... Построй график скользящей средней по значениям генерируемой тобою неравномерной прямоугольной волны, и увидишь наглядно, о чем я говорю. Кстати, получается ни что иное, как НЧ-волна, которую как раз ты и порождаешь своими действиями... Если магнитофон хороший, то он прилежно ее запишет, и потом проиграет... Если где-то усиление низов, тогда плохо совсем... Зато какая-то мыльница, у которой отрезаны низкие частоты, возможно, не заметит такое, но вроде бы речь шла о надежном способе чтения, и чтоб никаких специализированных магнитофонов?!
В общем, я вам предлагаю, прежде чем возиться с кассетами, для начала зафиксить этот момент... Всегда уравновешивать порт для каждого элемента данных. Дал длинный фронт, второй таким же длинным должен быть. Иначе, боюсь, не выйдет... Ну или же стало бы возможным и без всяких алгоритмов удвоить скорость, передавая биты каждым фронтом волны... Соответственно, если хотите, чтобы любой бит информации был одинаковой длительности, то нужно, например, ноль представить как две волны, по длительности суммарно равные волне единицы.
Что касается практического применения... Мне кажется, смысла нет возиться с этим, разве что действительно как чисто спорт, ну или для собственного развития, и лучшего понимания процессов передачи данных... Тем более сегодня времена эмуляторов. Для эмуляторов такие форматы, предполагающие несколько размеров волны для "00", "01", "10" и "11", не сильно удобны... Сложно будет с перехватом и распознанием такого писка налету, в результате, придется формировать длинные TZX-файлы, неэффективно сохраняющие данные. На мой взгляд, хоть какой-то практический смысл был бы в однобитовых турбо-загрузчиках с коррекцией ошибок налету.
Я записывал игры на кассету в своем модифицированном формате - каждый бит записывался не двумя полупериодами/фронтами, как в оригинале, а одним, причем длины полупериодов были вдвое укорочены, таким образом, скорость в целом была в 4 раза выше. Читалось хорошо, правда 1) у меня в магнитофоне был встроен цифровой усилитель сигнала записи; 2) работало только на хороших кассетах - с красной/черной пленкой (BASF, Sony и подобные), на серых советских пленках не работало. Читаемость была выше, чем у обычного формата с записью бита двумя полупериодами с учетверенной скоростью.
Несколько лет назад я пытался оцифровать свои записи, часть оцифровал, потом надоело. В своей программе оцифровки пришлось перейти от подсчета времени ниже/выше уровня нуля к подсчету времени между экстремумами уровня сигнала в WAV файле, плюс делать восстановление информации по контрольной сумме в редких случаях, когда длина полупериода была сомнительной. А, и фильтровать сверхкороткие полупериоды.
Не плохо. Но с уверенностью могу предположить, что на другом реале и с другим магнитофоном не прочитали бы ничего. Опять же конкретно на вашей связке читаемость вашего формата была выше, но в среднем по палате, по всем Спектрумам и всем магнитофонам в хозяйстве, читаемость выше именно у спектрумовского загрузчика. Исследований я не проводил... Просто по картинке волны сужу. Думаю, британцы при разработке все провели. В любом случае, если уравновесить волну как следует задним фронтом, сделать его таким же по длительности, возрастает стабильность сигнала в целом, не говоря уж о возможности подхвата заднего фронта. Можно пробовать давить частоту выше, чем с кривыми полу-волнами.
Нет, я для чтения пользовался несколькими магнитофонами, проблем с чтением не было. Насчет другого реала не скажу, у меня был только Орель БК-08, но при оцифровке на PC вытаскивал почти всё.
На стандартной скорости да, я имел ввиду учетверенную скорость обычного формата с двумя полупериодами на бит - такой формат был уже слабо пригоден к использованию, даже с цифровым усилителем записи, при той же плотности записи, что у моего формата.
Ну причем здесь оцифровка на PC? И сколько же у вас было полупериодов на бит?
Набросал вот иллюстрацию... Кое-где притянул за уши, кое-где приврал, кое-где подогнал, но суть происходящего должна быть понятна.
Вложение 65825
Оцифровка при том, что считать данные в этом формате получилось и на другом компьютере - PC. Если бы всё было совсем плохо с форматом, считать данные на PC бы не получилось - невозможно было бы отличить 0 от 1. А так получилось, хоть и не без ухищрений.
Полупериодов на бит в моем формате - один. То есть весь формат построен на неравных полупериодах, причем полупериоды ещё и сокращены вдвое по сравнению со стандартным спектрумовским кодированием (а поскольку один бит у меня - один фронт, в целом получается в 4 раза быстрее). И всё читалось. Конечно, с учетом цифрового усилителя записи на записывающем магнитофоне, и хороших кассет. Но читалось, и с разными магнитофонами, правда, с подстройкой головки.
- - - Добавлено - - -
Вот именно этим мой формат и занимался - передавал биты каждым фронтом волны. Удваивая скорость, да. Плюс еще одно удвоение за счет укорачивания фронтов вдвое.
Ну я уже объяснил, почему считывание данных на любом компьютере PC не имеет никакого значения. Это не имеет ничего общего с однобитным АЦП реального Спектрума. Где там у вас чего читалось с полупериодом на бит - сильно частный случай. А в PC - на здоровье, грузите что угодно, и расшифровывайте как угодно, тем более с ухищрениями, что само за себя уже говорит о надежности. Но к рассматриваемой теме это все не относится. Иначе в формате еще меньше смысла, чем даже было заявлено автором изначально.
Ну вот да, и надежность никакая... Будем реалистами.
Надежность была на высоте в заданной конфигурации - заводской Орель БК-08, магнитофон Весна с доработкой - цифровым усилителем записи (читал и с других магов), и кассеты с качественной пленкой. Если бы надежность была никакая, я бы этот формат не использовал, остановился бы на обычном турбо, скорее всего. Но мне захотелось проверить, будет ли работать вот так. И оказалось, что вполне работает. И причем даже спустя много лет данные с кассет считать реально. Так что надежность вполне приличная. Как я уже упомянул, она оказалась выше (намного), чем на учетверённой скорости обычного формата, с двумя фронтам на бит - такой формат не вытягивал даже с цифровым усилителем и качественной пленкой.
Конечно, оригинальный формат работал и на обычных советских кассетах, с обычной записью. Но у многих людей и с ним были проблемы.
На многих ретрокомпьютерах на магнитофонах использовалась фазовая модуляция для записи данных. Она также предполагает разные длины соседних фронтов (зато фиксированную длину бита на ленте). Разработчики Спектрума вполне могли остановиться на ней.
Ну и я не утверждал, что широтно-импульсная модуляция так же надежна, как частотная. Нет - но она вполне может использоваться при некоторых условиях (цифровом усилении сигнала при записи, например, или коррекции ошибок). А судя по вашим словам её вообще использовать не получится.
Ну у нас речь про реальный "Спектрум", а не про другие ретро-компьютеры, вероятно, с другим железом. Поэтому действительно не получится. В алгоритме же коррекции ошибок, как я понимаю, нет, и пока не предвидится, или с этого стоило бы начать, а не с безудержного разгона кривых волн. Сплошные фантазии какие-то на тему.
У меня получилось, так что не "сплошные фантазии какие-то на тему". Возможно, и у других получилось бы, или получится. Другое дело, что сейчас в этом смысла нет.
- - - Добавлено - - -
Я могу сделать модифицированный вариант стандартного ПЗУ Спектрума 48, с ШИМ вместо ЧМ на стандартных частотах, с которым любой обладатель реала, позволяющего впечатывать в нижнее окно памяти страницу ОЗУ (а это Орель, Робик, Скорпионы, +2А/+3), может сделать ШИМ-записи программ и потестить их читаемость на его железе. Это альтернативный обычным турбо-записям вариант ускорения загрузки в два раза.
Спасибо! Кассету записал и выслал. Проверить качество записи не удалось, т.к. у моего компьютера, оказывается, нет аудиовхода :( А через микрофон не прочиталось. Магнитофон довольно паршивенький, на слух - много детонаций. Так что должен быть хороший тест с этой кассетой!
Для остальных - tzx-файл, который можно как испытывать непосредственно в эмуляторах, так и записать на живую кассету и потом грузить на реале или через PC и обработку. Вот. Там загрузчик в стандартном формате и много экранов в 8b/10b.
- - - Добавлено - - -
Добро пожаловать!
Честно говоря, не помню уже. Но они все рабочие, некоторые только чуть хуже, не так строго выдерживают времянки.
Что значит "неравномерно выдержаны фронты сигнала"?
Можешь выложить звуковой файл с этой записью на гуглодрайв или еще куда, и дать мне ссылку? Хочу посмотреть, что именно произошло с сигналом. Вообще, мой формат был испытан на нескольких магнитофонах и имел проблемы пока только на одном (Haywire).
А мой становится нечитаемым?
Это ты описываешь обработку сигнала эмулятором? Не факт, что именно описанный тобой способ там используется. По-моему ты описал работу фильтра высоких частот (ФВЧ) с двухуровневым квантователем, но не уверен.
В моем случае никакой цифровой обработки сигнала в эмуляторе не производилось. Я брал звуковой файл (в том числе файлы, присланные другими пользователями, оцифрованные с реальных кассет) и с помощью своей матлаб-утилиты "wav2tzx", переводил его в формат TZX. А этот файл уже скармливал эмулятору, который никаких скользящих средних или другой обработки сигнала не производил.
Правильно ли я понял, что ты описываешь некий алгоритм расчета значения, по которому надо отличать в сигнале единицы от нулей? Что если сигнал выше некоторого порогового значения - то он будет воспринят как "1", а если ниже - то как "0"?
Если так, то не все так плохо, как ты описываешь. Расчет порогового значения скользящим средним - это то же самое, что фильтр высоких частот (ФВЧ). Если этот фильтр имеет низкую частоту среза (20Гц и ниже) - то он удалит постоянную составляющую из сигнала, а нулевой уровень окажется оптимальным, чтобы использовать его в качестве порогового значения.
Обычно совпадает, потому что во всех магнитофонах постоянная составляющая не записывается и не воспроизводится. Все тракты сигнала содержат проходные конденсаторы, которые (совместно с резисторами) образуют ФВЧ с низкими частотами среза.
У меня обычно полосы были одинаковыми, но я имел счастье использовать спектрум с хорошим магнитофонным входом ("Орель БК-08"), где для квантования сигнала используется микросхема компаратора (554СА3). Вот в дешевых клонах, где вместо компаратора используется логический элемент, может быть такое, что квантование производится не по нулевому уровню, а со смещением. Стандартный формат таким не убивается, а вот мой, в зависимости от прочих искажений, может пострадать. Надо будет поизучать вопрос.
При увеличении громкости величина смещения нуля относительно амплитуды сигнала уменьшается, а следовательно, симметрия порогового значения должна улучшаться. Другое дело, если там смещение составляет десятки процентов от максимально возможной амплитуды сигнала магнитофона - тогда повышать некуда.
Можно здесь подробнее, что имеется в виду? Если речь идет об инверсии сигнала - то мой формат устойчив к инверсии, будет грузить.
Что значит "не выдерживаю фронты сигнала по длительности"? Что под этим имеется в виду?
Нет, не превращается. Где-то прямоугольный сигнал искажается, но совсем в синус не переходит. Я при испытаниях обрабатывал сигнал фильтрами низких частот где-то 4 порядка с частотой среза 2000Гц. После этого от прямоугольника действительно мало что остается, но этого тем не менее достаточно для уверенной загрузки в новом формате. В теории должно грузиться, даже если убрать полностью все частоты выше 2000Гц без существенных фазовых искажений. Должно грузиться. Теорема Котельникова, однако.
Со мной можно на эти темы разговаривать не на образном, а на строгом языке теории линейных систем и фильтров, и обработки сигналов. Пожалуйста, объясни точнее, что ты имеешь в виду. Тогда мы сможем проанализировать и точно выяснить, делают ли некоторые фильтры невозможной загрузку в предлагаемом мной формате.
Длительность фронтов спектрумом не контролируется. Фронт кусочно-постоянного сигнала, каким является сигнал с магнитофонного выхода - это процесс перехода его с одного уровня на другой. Длительность этого процесса обусловлена не программой, а характеристикой магнитофонного выхода, наличием ФНЧ, конечностью быстродействия микросхем.
Возможно, ты "длительностью фронтов" называешь на самом деле длительность нахождения сигнала на постоянном уровне, т.е. длительность участков между фронтами. Давай тогда использовать общепринятые в отрасли термины, а то тяжело.
Если я правильно понял твои образные объяснения - то на строгом языке это звучит как опасение, что в сигнале 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 не зависит от содержания файла (у синклерского формата - зависит).
Если речь идет о TZX-файлах - то там эмулятор ничего не разделяет, там сигнал уже квантован (т.е. может принимать только два уровня, 0 и 1). Квантование (т.е. "разделение") производится не эмулятором, а программой, которая подготавливает TZX-файл на основе либо wav-файла, либо непосредственно с аудиовхода.
Надёжнее? Ты уверен? Я думаю, что лучший способ - это ФВЧ с низкой частотой среза (типа 1-5Гц), а после - фиксированная граница разделения, равная нулю. Тем самым будет удален средний уровень сигнала, если он отличается от нуля, а после этого сигнал будет разделен на уровни оптимальным образом с точки зрения вероятности ошибки. Тебе что-нибудь говорит словосочетание "глазковая диаграмма"?
Я имел ввиду WAV файлы, или прямое чтение с входа звуковухи.
Я основываюсь на своем опыте написания кода чтения WAV -файлов для эмулятора. Поскольку уровни сигнала плавают, и не только от файла к файлу, но и внутри одного файла, для более надежного их разделения стоит сделать плавающей и границу разделения. Предварительная обработка всего WAV файла перед его чтением может быть довольно тормозным процессом в случае больших файлов, а скользящая граница разделения позволяет квантовать данные на лету.
- - - Добавлено - - -
И да, в теории цифровой обработки сигналов я не силен.
Окей. А у тебя остались тестовые файлы, на которых ты испытывал эффективность своего кода (т.е. надежность их считывания загрузчиком)? Давай попробуем сравнить оба предложенных метода.
Да вот не факт. Для простоты рассмотрим синус. Допустим, что его амплитуда плавает. Если мы будем разделять уровни строго по нулю - то, очевидно, независимо от амплитуды синуса, мы получим на выходе цифровой прямоугольный сигнал с одним и тем же периодом, фазой и скважностью 2.
Теперь допустим, что наш синус имеет некоторую неизвестную постоянную составляющую. Тогда мы пропустим его через ФВЧ. Тем самым постоянная составляющая будет ликвидирована, и на выходе снова будет прямоугольник с постоянной частотой, фазой и скважностью 2, независимо от амплитуды входного синуса.
Даже, если постоянная составляющая меняется во времени, ФВЧ ее устранит, если он имеет достаточно высокую частоту среза.
В случае, если входной сигнал не синус, а имеет сплошной спектр (что имеет место в случае записи на кассету данных в каком-либо формате) - то картина усложняется, и тут выбор может быть сделан в пользу того алгоритма, который даёт лучшие результаты на тестах. У тебя есть тестовый материал в виде различных записей данных с кассет?
На 27 странице к верхнему комментарию добавлял картинку. Там я примерно накидал, в чем беда.
С этих нескольких магнитофонов данные в реал загружались?
Ну да, ФНЧ - это, в простом исполнении, скользящая средняя...
В любом случае, это - идеальные условия. Реальность далека от идеала. Также, как и смотреть 2-х мегапиксельной камерой на мир, это не то же самое, что смотреть фотоэлементом с двумя состояниями.
Правильно. У реала он выражается в некотором фиксированном значении напряжения, которое задается электронными компонентами. У эмулятора - например, скользящей средней, или с найденными экстремумами что-то можно городить, как здесь привели в пример.
Он не просто не убивается, а еще и выходит, что запись можно подразогнать. Что, у пилота прям одинаковые красно-голубые полосы были? Потрясающе.
Да, извини, именно длительность и имелась в виду. Пытался сокращать. Волна состоит из двух полу-волн, сл-но между одной сменой значения, и другой сменой должны быть выдержаны равные интервалы времени... А когда ты не выдерживаешь интервалы, меняя скважность, получаешь гуляние аналогового сигнала, порождаешь НЧ-волны. НЧ-волна, вероятнее всего, мешает прочесть соседние биты одно-битовому АЦП реала. Тем более, что ты стремишься и по скорости взять все возможное. Думаю, стоит умерить аппетиты, хотя бы для начала.
У тебя полу-волны разного размера, что приводит к порождению НЧ-волны. Глянь иллюстрацию, что я сверху накидал. Это волны-паразиты, мешающие считать данные.
Ну если веришь, тогда приготовься к тому, что предел разгона такой волны будет заметно ниже классической Турбо-загрузки, со всеми вытекающими выводами по надежности. Это просто здравый смысл. И что, что на каких-то компьютерах реализована для сохранения на ленте фазовая модуляция? Другие-компьютеры - другое железо.
Попробуй начать с более скромными показателями. Выяснишь, где косяки, и затем будешь уже искать пределы. На данный момент, заявленные тобой цифры запредельные, и ничего общего с надежностью точно иметь не могут.
Еще могу посоветовать немного переработать загрузчик, чтобы он, вместо самой загрузки, сохранял временные задержки приходящего потока данных, чтобы это можно было затем как-то проанализировать для разных связок магнитофон-реал, сравнить с эталоном... Процесс пойдет более продуктивно.
Успехов.
А где у тебя будет находиться "ноль"? Ну вот допустим приехали отчеты, и там цифры от 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", там есть раздел, посвященный магнитофонному входу. Чётко объяснено его устройство и работа.
Barmaley_m, Да я знаю и сам, что это одно и то же... Я просто обратил внимание на твою фразу:
"Да вот не факт. Для простоты рассмотрим синус. Допустим, что его амплитуда плавает. Если мы будем разделять уровни строго по нулю - то, очевидно, независимо от амплитуды синуса, мы получим на выходе цифровой прямоугольный сигнал с одним и тем же периодом, фазой и скважностью 2."
Разумеется, с фильтром все встает на свои места. Но без фильтра твое утверждение не верное в части про скважность. И твой "Орель" - это частный случай, также как и загрузка через 16-битный АЦП в эмулятор, или в программу распознавания... Я об этом и написал первый пост. Ты исходил из идеальных условий, когда скважность оставалась оригинальная. Я обрисовал, почему это далеко не всегда не происходит, и что оригинальный загрузчик это стабильно читает. Ты сказал, что изучишь. Т.е. тебе нужно изучить влияние нарушенной скважности на твой алгоритм, и, коли ты хочешь все же кривыми полу-волнами информацию передавать, какую минимально короткую полу-волну, следующую сразу за длинной полу-волной, ты можешь пробить в порт, записать на кассету без потери ее читаемости АЦП реала. Я ожидаю, что ее предел будет ниже предела читаемой полу-волны турбо-загрузки, а ты, на данный момент, этот предел превысил.
Окей, верю. Но в таком случае странно, зачем ты до моего объяснения противопоставлял обработку с помощью ФВЧ предложенному тобой алгоритму сравнения с выходом фильтра скользящего среднего. Нам ведь не нужны лишние беспредметные споры, не так ли?
Фильтр есть всегда, поскольку тракты как записи, так и воспроизведения любого магнитофона развязаны по постоянному току. Там всегда сигнал идет через конденсатор, то есть, ФВЧ. Аналогично, конструкция магнитофонных входов всех реалов имеет развязывающий конденсатор, поэтому, даже если входной сигнал с магнитофона имел какую-то постоянную составляющую - она будет подавлена.
Если при входном синусоидальном сигнале двоичный сигнал на бите 6 порта #FE имеет скважность, существенно отличную от 2, как в твоём случае - значит, при квантовании сигнал сравнивается не с нулём, а с каким-то другим значением. Такое может происходить в двух случаях. 1) схемотехника магнитофонного входа выполнена неграмотно; 2) какие-то детали магнитофонного входа неисправны (например, электролиты подсохли или вход микросхемы пробит). Покажи мне схему своего компьютера, и я тебе её проанализирую на предмет того, может ли она в рабочем состоянии сравнивать сигнал с существенно ненулевым уровнем, или она была неисправна.
Это не идеальные, а вполне нормальные условия, когда магнитофонный вход компьютера выполнен добротно хотя бы на уровне схемотехники 80х.
Насчет стабильности - можно поспорить. Обещаю, я проведу тесты и покажу тебе результаты насчет стабильности.
Я понял твоё убеждение, что магнитофонный сигнал должен состоять только из последовательностей вида "10" или "1100". Действительно, такое ограничение, наложенное на сигнал, способствует устойчивости считывания к широкому кругу искажений.
Проблема в том, что такое кодирование имеет низкий кпд - около 34%, как я недавно считал. То есть, на один полезный бит информации приходится в среднем 3 битовых интервала в кодированном сигнале.
Можно повышать скорость записи путем укорачивания битового интервала. Получится так называемое "турбо". Но все знают, что такое турбо. Тут нечего обсуждать, и нечего улучшать. Я много хранил информации на кассетах в турбо-формате, когда у меня был реал с магнитофоном 4-й группы сложности "Легенда-404" в 1992-1993гг и знаю, что надежность такого хранения ниже, чем в формате стандартной скорости. И все это знают. Тут сказывается то, что турбо-формат использует расширенную полосу частот по сравнению со стандартным форматом. А там более высоки неравномерности АЧХ магнитофонного тракта.
Формат 8b/10b - это попытка повысить скорость не за счет укорачивания битового интервала (как в турбо), а за счет применения более оптимального кодирования. Потребная полоса частот при этом остается такой же, как у стандартного формата, а скорость возрастает в 2 с половиной раза. Заманчиво? Весьма. Цели поставлены такие:
1) идеал - при сохранении такой же надежности считывания, как у оригинального формата, повысить скорость. Испытания показали, что это невозможно, поэтому ставится более скромная цель:
2) при повышении надежности по сравнению с турбо-форматами, обеспечить сравнимую с ними скорость.
Ты привел возражения, почему это не должно работать, но пока что они чисто умозрительные, реальных испытаний ты не проводил. Смысл нарисованных тобой картинок и стоящие за этим опасения мне понятны, но это рисунок, а не точный расчет. В реальности все не так плохо. Я проводил множество тестов с различными искажениями сигнала в формате 8b/10b, и формат показал неплохую устойчивость. Постараюсь сгенерировать эти картинки заново и выложить здесь для тебя.
Barmaley_m, С каким НУЛЕМ, опять? У одного Спектрума одна настройка, у другого Спектрума - другая. У магнитофона третья, да еще и громкость может меняться. И скорость может немного меняться. И все эти связки и настройки разнообразны. Вон при записи в описании 0 - это 0.75В, а 1 - -1.3В. Как-то шибко наивно ожидать при чтении такую же скважность.
Мои возражения не чисто умозрительные... Это просто здравый смысл... Если ты говоришь, что ТАК НАЗЫВАЕМОЕ турбо не надежна, у которой полу-волны все же равного размера, то твоя загрузка с неравными полу-волнами еще менее надежна по определению, тем более, ты не скромничаешь со скоростью, а полоса частот у тебя еще более расширена. Хотя не знаю, что там в турбо расширено, все так же две частоты для 0 и 1, просто они выше. Можно период 1 приблизить к периоду 0, например.
Да, заманчиво передавать информацию каждой полу-волной, но сможешь ты это делать на сниженной скорости, как ни крути. И, как вариант, понадобится разное кодирование для первой и второй полу-волн, чтобы оно хоть как-то читалось... Ну например, если у тебя была длинная предыдущая полу-волна, например, означающая 1, то значит будет удлиненная вторая полу-волна, где 0 - чуть короче, и 1 - чуть длиннее, например, хотя даже в этом случае невозможно будет заявить, что все прям вот надежнее не бывает... Но не так, как ты делаешь, что у тебя длинная полу-волна, а затем маленькая пипочка вниз... Ну так работать точно не станет.
Ну если нравится тебе считать, что везде скважность одинаковая, а всем остальным нужно отремонтировать свои устройства, и кассеты - на здоровье, твое право. Но только не надо тогда рассказывать про надёжность, ну не конек это твоего алгоритма... И говоря про электронику 80-х не стоит забывать, что Спектрум выпускался максимально дешевым, т.е. экономия была на всем.
Со своей стороны я уже все сказал, что хотел, еще в первом своем посте. Добавить нечего...