я кстати достаточно много кассет из середины 90х оцифровал именно с +2мафона.
makeTZX почти всё распознал без проблем.
Вид для печати
я кстати достаточно много кассет из середины 90х оцифровал именно с +2мафона.
makeTZX почти всё распознал без проблем.
Тут интересен вопрос, как пойдут мои форматы на других +2 магнитофонах. То есть, вот этот горб на низких частотах - он характерен для всех +2 магнитофонов или только для того экземпляра, которым владеет haywire, из-за плохого технического состояния / загрязненной головки?
Что мне сделать, чтобы доказать, что всё у меня с техникой нормально ? Этих голов куча в ящике лежит, я даже не знаю, что надо делать, чтобы загрязнить её настолько, чтобы с неё лента начала соскакивать. C кассет cопли не отслаиваются, они новые, специально упаковку по такому случаю открыл.
У тебя с техникой ненормально. Даже магнитофон 4й группы сложности по ГОСТу не дает такой неравномерности АЧХ, чтобы так убить запись. Это было видно по присланным файлам. То, что на нем грузится синклерский формат, говорит лишь об исключительной устойчивости формата к таким искажениям. Могу даже предположить, что загрузка идет на пределе этой устойчивости. Это как с левыми CD-R и DVD-R: они вроде бы читаются после записи, но лишь за счет коррекции ошибок на пределе возможностей алгоритма. И тогда любые дополнительные искажения приведут к неисправимым ошибкам чтения. Тогда как на болванках хорошего качества изначальный уровень ошибок низкий, и тем самым имеется некоторый запас по накоплению исправимых ошибок в будущем вследствие старения и износа дисков и приводов.
Вопрос только в том, имеют ли все +2 магнитофоны такую неравномерность АЧХ по своей природе, или же это именно твой магнитофон дает такие искажения вследствие плохого технического состояния.
Между делом, я тут экспериментировал по созданию формата записи с еще одним нулем в спектре сигнала на низких частотах, чтобы уменьшить чувствительность его к выбросам АЧХ на низах. Пока получилось создать нуль на 250Гц и ее нечетных гармониках, но лишь ценой огромной избыточности формата (6b->16b). Кроме того, нечетные гармоники подавлять не нужно, а наоборот вредно, т.к. от этого усиливаются низкие частоты. Буду думать дальше.
---------- Post added at 15:18 ---------- Previous post was at 15:11 ----------
Кстати говоря, турбированные форматы (с повышенной битовой скоростью) должны в таких условиях грузиться надежнее, так как у них в спектре сигнала присутствует меньше низких частот, на которых в твоем магнитофоне присутствует горб.
Я думаю, что просто не совсем правильно цифровать со спектрумовского аудио выхода - там звук после компаратора + какой-то феерической аналоговой цепи, представляющей из себя толи усилитель, толи ослабитель, толи улучшайзер, никогда не понимал, зачем там все эти тразисторы напаяны. А вот откуда правильно брать сигнал для оцифровки - этого я не знаю. Магнитофоны у меня есть ещё штуки 3, могу поменять, но уверен, что это пустая трата времени.
Я смотрел схему в ZX Spectum +2 Service Manual.pdf (гуглится). Там стоит усилитель на транзисторе, а после него - усилитель на операционнике. Конденсаторы в этих цепях обеспечивают развязку по постоянному току (подавление постоянной составляющей), а также некоторый эффект ФНЧ. Ввиду малой емкости этих конденсаторов подавление высоких частот там не должно быть особенно сильным. Кроме того, в цепи обратной связи операционного усилителя конденсатор подключен параллельно с резистором, что также ослабляет ФНЧ-эффект от этого конденсатора. По-видимому, коэффициент усиления каскада на операционнике столь велик, что в большей части диапазона входного сигнала этот каскад находится в насыщении, т.е. работает как компаратор. Аналоговый сигнал в этой цепи, возможно, присутствует на входе операционника, если только транзисторный усилитель тоже не входит в насыщение. Если есть осциллограф - можно попробовать туда "заглянуть". Других транзисторов на пути аналогового сигнала нет - сигнал с выхода операционника поступает на звуковой выход компьютера через смесительные цепи. Они содержат конденсаторы, что дает дополнительный нуль на постоянной составляющей.
Откуда там взяться выбросу на низких частотах - пока не вижу. Может быть, что этот выброс дает тракт записи магнитофона. Это тем более вероятно потому, что сигнал, оцифрованный другим магнитофоном, выглядел очень плохо. Как вариант для проверки - произвести запись на другом магнитофоне, подготовив csw-файл с помощью моей программы-конвертора, а потом попробовать его загрузить на твоем Спектруме. Еще один вопрос. Ты головку магнитофона крутишь, или она у тебя выставлена на заводе?
---------- Post added at 16:46 ---------- Previous post was at 16:36 ----------
Хотя нет, не заглянешь ты туда осциллографом. Усилительный каскад на ОУ имеет токовый вход, т.е. на линейном участке характеристики там напряжение всегда постоянное, а когда ОУ входит в насыщение - то напряжение меняется, но это тем более делает запись сигнала оттуда невозможной.
Тут, чтобы записать аналоговый сигнал, надо разорвать цепь, выпаять конденсатор C317, и тогда с того его вывода, который соединен с коллектором транзистора, можно будет снять сигнал. Вероятно, его потребуется еще и усилить с помощью ОУ. Но пока что я не думаю, что это необходимо. Лучше всего было бы провести описанный выше эксперимент, записав сигнал на другом магнитофоне.
Мой спектрум не грузится с внешнего магнитофона, только с того, который в него встроен. Головку - не помню, крутил или нет. Всё ОК с ней, гарантирую.
Вы тут выкладывайте свои файлы и оцифровки. А то беседуете между собой, а предмета разговора не видно.
Я предлагаю записать кассету на внешнем магнитофоне с PC, а потом вставить эту кассету во встроенный магнитофон и попробовать с нее загрузить файл в одном из моих форматов (1b/2b или 8b/10b).
Если крутил - то может быть попробовать ее покрутить еще раз, добиваясь наилучшей возможной настройки к кассете, которая записана наиболее правильным образом? Есть такая программа "Tape head", еще в 1992г, помню, у меня была. Она измеряет время между фронтами сигнала и выводит на экран в виде скроллирующегося графика. Получается что-то типа тех гистограмм, которые я строил по логам эмулятора. Нужно добиться, чтобы две вертикальные полосы (они соответствуют интервалам между фронтами в один или два битовых периода) были как можно более узкими. При плохой настройке головки высокие частоты обычно зарубаются, и это сказывается на нестабильности интервалов между фронтами: полосы будут расплываться.
Это тоже невозможно к сожалению. Мой магнитофон умеет записывать только с радио и компакт-дисков, но болванки не читает, и входа для записи у него нет. Через пару недель или позже приедет нормальная кассетная дека, если будет актуально, помучаю её, но сейчас такой возможности пока нет. Есть возможность загрузиться через самодельный девайс - Bluetooth-"кассету", но это будет явно не то, что надо.Цитата:
Я предлагаю записать кассету на внешнем магнитофоне с PC
Что значит правильным ? Пишет и читает одна и та же голова.Цитата:
Если крутил - то может быть попробовать ее покрутить еще раз, добиваясь наилучшей возможной настройки к кассете, которая записана наиболее правильным образом?
Если найду - попробую.Цитата:
Есть такая программа "Tape head"
Нашел программу, о которой говорил: Tape signal analyser. В ней есть два режима анализа, и оба очень полезные.
Первый режим - Tape tester. В нем измеряются некоторые параметры импульсов, приходящих на порт магнитофона. Параметры можно выбирать клавишами 1-5. Для наших целей, главным образом, нужны параметры 1 и 2. При анализе загрузки стандартного формата также может пригодиться параметр 3.
Если запустить на воспроизведение кассету - то на экране начнет отображаться измеренная длительность импульсов, приходящих на порт магнитофона. При хорошем качестве сигнала в синклерском формате должны появиться две вертикальные полосы, соответствующие разной длительности импульсов для лог. "0" и "1". Когда сигнал качественный - полосы будут жирные и узкие. Можно проверить на эмуляторе. Когда АЧХ неравномерная, головка расстроенная, или запись плохая - полосы будут расплываться. Например, на файлах в синклерском формате, которые прислал haywire, у меня в режиме "1" полосы нормальные получились, а в режиме "2" они настолько размыты, что между ними нельзя провести четкую грань. Для синклерского формата это не страшно, а мои форматы убивает. Но любопытно. Получается, что длительность импульсов гуляет только в состоянии лог. "0". Буду еще разбираться.
Если же подсунуть этой программе кассету в формате 8b/10b - то в режимах "1" и "2" можно будет наблюдать четыре четкие полосы. Это соответствует тому, что в записи встречаются последовательности одинаковых бит длиной до 4 (иногда бывают и 5, но очень редко). Разумеется, загрузка будет невозможна, если искажения сигнала таковы, что четыре полосы на этом графике окажутся неразделимы.
С помощью этой программы уже можно крутить головку, добиваясь, чтобы сигнал приобрел вид двух четких полос, на синклерском формате.
Выход из первого режима - по CS/Break. Второй режим работы - "Spectrum analyzer" - также любопытный. Хотя, строго говоря, это не спектральный анализатор, а построитель гистограмм длительности интервалов между фронтами. На синклерском формате должно быть две горизонтальных полосы - опять же, можно проверить на эмуляторе. На формате 8b/10b должно быть четыре полосы. В записи от Haywire на синклерском формате между двух обычных полос появляется дополнительный пик. На формате 8b/10b в записях от haywire вообще все сливается, хотя должно быть четыре полосы. Выход из "спектрального анализатора" - клавиша Q.
Да работают отлично фирменные кассеты. Абсолютно убитые экземпляры, на которые жалко смотреть, и которые во времена актуальности явно не отличались качеством, работают.Цитата:
Я имею в виду, какая-нибудь кассета, записанная на лучшем известном тебе магнитофоне. Фирменная, например.
И это, я вот что вспомнил. У меня же на тюнере выставлено усиление низких частот +6db. Из-за этого мог быть завал НЧ на записи.
А ты запусти программу Tape Signal Analyser и посмотри на сигнал. Может быть, его можно улучшить путем подстройки/очистки головки, если, конечно, ты рискнешь этим заниматься.
Ох-ох. Вскрываются интересные подробности! Это что за тюнер? Тот, через который ты цифровал сигнал в присланных ранее записях? Можешь убрать усиление НЧ и отключить прочие эквалайзеры, ревербераторы, хорусы и системы шумоподавления и сделать еще одну запись сигнала в моих форматах (8b/10b и 1b/2b)?
Тюнер - Beholder H8. Хороший тюнер, ест RGBs, это единственное изделие в классе с такой способностью. Есть у него возможность добавить усиление по частотам, я воспользовался возможностью, сохранил, и забыл. Это, конечно, моя ошибка, но не грузится не по этой причине. Как раньше цифровал - не помню. Возможно, через тюнер, возможно, к звуковой карте подключал. Завтра переделаю, что смогу и если смогу.
Спасибо. Делай как сможешь - будем разбираться.
Продолжаю теоретические наработки по созданию кода с подавленными низкими частотами. Удалось добиться промежуточной цели - создать нули на 0 и 250Гц в битовой последовательности. Сгенерировал последовательность длиной 16000 бит, в которой закодировано 13652 бит случайных данных. Избыточность кода получается около 15%, что даже лучше, чем у кода 8b/10b. Правда, этот код переменной длины и вообще на каждом шаге кодирует дробное число бит, поэтому для практической реализации это не подходит. Только как теоретически достижимый максимум.
Привожу картинку со спектром полученной битовой последовательности и вав-файл с ее записью. Кому интересно - можете лично убедиться в наличии указанных спектральных нулей при использовании только двух уровней сигнала!
К сожалению, нуль на 250Гц получился узкий, и он не дает большого подавления в своей окрестности, что было, собственно, целью его создания. Придется или смещать его в область более низких частот, или добавлять еще нули.
Подкидываю идею для более оптимального формата.
В основе лежит кодирование комбинации бит фронтами сигнала разной длительности.
Т.е. в простейшем случае это:
00 - |--------|_______|
01 - |------|_____|
10 - |----|___|
11 - |--|__|
В сложном случае можно кодировать даже по 3 бита одним периодом сигнала, но это усложнит программу и увеличит требования к стабильности АЧХ и скорости тракта.
Т.к. в следствие разброса АЧХ длительность считываемых периодов никогда не будет строго соответствовать записанным, то после синхронизирующего пилоттона должна идти пачка комбинаций бит 00, 01, 10, 11 для замера эталонной длительности для данной записи. Так же должна быть постоянная подстройка длительности эталонов в течение всей записи из-за вероятной нестабильности АЧХ тракта, качества пленки и, самое главное, нестабильной скорости.
Так же, перед записью можно просканировать блок кода, для определения, какие комбинации встречаются чаще всего, и присвоения им самого короткого периода. И так далее.
Titus, хорошая идея. Надо будет попробовать. В этом коде автоматически получается баланс по постоянному току и, возможно, сохраняются преимущества синклерского формата по устойчивости к неравномерности АЧХ. Эталонную длительность замерять, думаю, нет необходимости. Начальную скорость записи можно померить по пилоттону. А адаптацию к меняющейся скорости производить путем накопления средней длительности периодов сигнала, и соответственно ей выставлять пороги детектирования. Для этого хорошо подходит простейший ФНЧ первого порядка на 16-битовом регистре: y[i] = x[i]+255*y[i-1]/256, где x[i] - измеренная длительность последнего периода, high(y[i]) - среднее значение длительности за последнее время.
---------- Post added at 13:52 ---------- Previous post was at 13:50 ----------
Хотя, с другой стороны, если длительность периода для комбинации "00" будет по времени в 2 раза длиннее (или короче) длительности для "11" - то получим тот же самый синклерский формат по скорости.
---------- Post added at 14:14 ---------- Previous post was at 13:52 ----------
Научился управлять шириной спектральных нулей в битовой последовательности. Правда, уширение нулей дается ценой резкого увеличения избыточности кода. Но зато удается добиться более высокого подавления на НЧ без введения дополнительных нулей. Здесь должна быть какая-то фундаментальная закономерность. Подозреваю, что максимальная информационная емкость последовательности должна быть равна площади под ее спектром, деленной на площадь под спектром того же сигнала без спектральных ограничений. То есть, нули мы добавляем или просто частоты давим - любые эти действия приводят к повышению избыточности. Если, допустим, вообще почти начисто подавить половину спектра сигнала ниже 1кГц - то максимальная информационная емкость должна по идее упасть вдвое. Буду еще кумекать. Жутко интересно!
Друзья, вы велисапед же изобретаете. Ну чесслово. Причем наощупь.
Есть теоретически обоснованные и математически доказанные модели для всей этой кухни. Но для этого надо прочесть учебник для ВУЗов "Шувалов В.П. Передача дискретных сообщений", "Зюко, А.Г.; Кловский, Д.Д.; Назаров, М.В. и др.
Теория передачи сигналов: Учебник для вузов", и чего-нибудь сверху по теории информации.
Это я не к тому что я тут такой дАртаньян а вы все тупые. Просто после прочтения учебников многое становится понятно и не надо будет вслепую тыкаться и впустую неудачные варианты изобретать. А сразу изобрести вариант который в данных конкретных условиях будет теоретически обоснован и практически применим.
Формат форума не позволяет мне читать тут за это лекции (да и за 15 лет у меня подстерлось многое из головы), а лень и отсутствие свободного времени - написать свой загрузчик.
Учебник это прекрасно если сесть и начать сначала теоретизировать. Тут другая ситуация - есть готовый уже формат но в каких-то ситуациях он не прокатывает. Можно конечно и учебник почитать, но лучше сразу подсказать в чем загвоздка.
Для того чтобы понимать в чем загвоздка нужно знать теорию. Иначе получится как с первым вариантом загрузчика, когда "гладко было на бумаге".
Для начала нужно хорошо понимать где в принципе могут лежать грабли и какие именно. Понимание расположения граблей может позволить не упираться попусту рогом в частности навроде нюансов в реализации входных цепей.
На реальной ленте в реальном кассетном магнитофоне (который сейчас поди неубитый найди еще) самая большая проблема это нестабильность движения ленты и выпадения сигнала. С АЧХ (и завалом фронтов) там выше 250 Гц и примерно до 6000 Гц как правило проблем нету вообще никаких (при условии что исправная лента используется и магнитофон в принципе звуки издавать способен). Ну еще если магнитофон в части звуковоспроизводящего тракта неисправен приходится иногда подымать уровень сигнала, что влечет за собой отчаянное ухудшение отношения сигнал/шум, но это отдельная песня я думаю. В любом случае загрузить стандартную спековскую запись удается на любых дровах, при условии что она была правильно и на неубитую ленту записана и лентопротяжный механизм воспроизводящего магнитофона внушает своими параметрами доверие. Исправность звуковоспроизводящего тракта практически поуху, главное чтобы "звук был".
Большинство "наглядных" примеров показывающих "вот глядите, тут в записи целый импульс пропал" это не проблема тракта, это проблема системы головка-лента (либо при воспроизведении но чаще при записи). Либо "эффект змейки", либо выпадения сигнала из-за пыли, осыпания, козявок налипших на ленту и представляющих из себя концентрат продуктов пыли и осыпания, паразитной амплитудной модуляции и пр. Поверьте человеку который уже лет как 20 занимается магнитной записью звука. Причем "на ухо" запись может выглядеть идеально, так как ухом уверенно нельзя фиксировать подобные "косяки" продолжительностью менее 30 мс.
Поэтому все форматы где на полутора-двух битовых интервалах нет возвращения к нулю на бытовом магнитофоне потенциальные трупы, и что-то полезное можно сделать только из манчестера. Иначе просто встает дилемма скорость против синхронизации (кстати тут есть парадокс, повышение символьной скорости начинает нивелировать детонацию, так как размеры деталей ЛПМ вполне себе конечны и гуляния скорости соответственно тоже, и на медленном битовом потоке синхронизацию ловить труднее чем на быстром, но при этом восстановление потерянной синхронизации занимает больше времени ессно). Либо нужно искусственно синхроимпульсы в сигнал вонзать.
Собсно вышеприведенные книжки (если их правильно осознать) и дают верное понимание в какую сторону двигаться перспективно, а в какую нет.
В моем понимании, не меняя в архитектуре ничего единственная верная дорога - на стандартном или манчестеровском формате просто увеличивать символьную скорость, а неизбежные выпадения сигнала компенсировать добавляя простейший корректирующий код (выпадения как правило короткие, 8-16 бит максимум, где можно малой кровью обойтись).
Увеличение символьной скорости на спекки в три раза даст полосу примерно до 7 кГц по моим умозрительным прикидкам, причем АЧХ тракта особенно в этих рамках погоды делать не будет даже на самом дрянном магнитофоне, но начнут очень сильно роялить выпадения, которые можно бодать только корректирующими кодами.
Поверьте человеку, который проанализировал сотни кассет с записями для Спекки, и сделал универсальную программу, которая вытаскивает практически любые 'убитые' записи - я знаю практику предмета обсуждения)
Сфера магнитной записи звука вообще, и практика считывания кассет с записями для Спекки - вовсе не одно и то же.
---------- Post added at 21:46 ---------- Previous post was at 21:31 ----------
Кстати, к слову о кодировании длительностью, которое я предложил выше (4 ширины фронта), можно попробовать средний вариант с 3-мя видами фронтов. Фактически почти не потеряем в скорости относительно варианта с 4-мя видами, однако придется добавить немножко перекодирования из троичной системы счисления в двоичную.
Таким образом, при двоичной системе кодирования нам на байт нужно 8 периодов, при четверичной 4 периода, а при троичной... 5.05 периода.
Есть на иппее такая хреновина.
Вот только она рид-онли.
Выпадения сигнала - это, конечно, хорошо, но они не являются причиной, почему в конкретном случае магнитофона Haywire мои форматы не грузились.
Защиты от выпадения сигнала оригинальный синклерский формат не дает. Поскольку надежность этого формата до сих пор всех устраивала, я не вижу смысла решать эти надуманные проблемы в своих проектируемых форматах. По крайней мере, на данном этапе разработки.
Ну вот в синклерском формате манчестер не применяется - и ничего, живет. Чем он так хорош, этот манчестер? По сути дела то же самое, что и второй экспериментальный формат 1b/2b, который я просил опробовать Haywire: для записи одного полезного бита используется два битовых интервала.
"Возвращение к нулю" в контексте спектрумовского магнитофонного интерфейса реализовать в принципе невозможно, т.к. поддерживаются только два уровня сигнала.
Я не везде в этой теме сыпал теоретическими терминами, чтобы сообщения были всем понятны, но теоретическая подготовка у меня присутствует. Если есть сомнения - прошу указать на конкретные ошибки.
А почему? Ты разве уже разобрался, почему именно коды 8b/10b и 1b/2b не пошли? Я вот думаю, что на магнитофоне Haywire даже манчестерский код не пойдет. Там явные проблемы с АЧХ в низкочастотной области, а она манчестерским кодом не подавляется.
Размышлял над возможностями борьбы с существенной неравномерностью АЧХ в низкочастотной области, которая, предположительно, имеется в магнитофонной системе Haywire. На сегодняшний день я считаю, что проблему можно решить путем создания такого кода, чтобы кодированный сигнал имел минимальную энергию в области низких частот, где присутствуют искажения.
Мои попытки создать для подавления низких частот нули в спектре битовой последовательности не привели к желаемому результату, поскольку получаемые спектральной нули дают низкое подавление в своей окрестности. Если же менять параметры кодера таким образом, чтобы нули имели большую "ширину" - то это приводит к существенному уменьшению эффективности кода, его информационной емкости.
Сейчас я временно оставил в стороне вопросы собственно построения кода, а обратился к решению более фундаментальной задачи: как получить битовую последовательность с заданными спектральными свойствами. И вот результаты, полученные на настоящий момент.
Во-первых, при создании нулей в спектре битовой последовательности теми методами, которые я это делал, создаются не только нули, но и полюсы - около тех же частот. Иными словами, я как бы пропустил белый шум через фильтр, который имеет на некоторой частоте нуль, но на ней же (на некотором расстоянии внутри единичной окружности z-плоскости) имеет и полюс. Чем ближе этот полюс к окружности - тем больше он нейтрализует влияние нуля в своей окрестности, тем "у'же" будет нуль и тем меньше будет подавление спектральных компонентов в его окрестности. Одновременно растет информационная емкость полученного кода. Но тогда и польза от спектрального нуля в деле подавления низких частот нивелируется.
Аналогичным образом полюс образуется и при подавлении постоянной составляющей. Наименее эффективные коды, такие как манчестерский или приведенный мною в этой теме 1b/2b, дают широкий нуль на постоянной составляющей, подавляя попутно низкие частоты, а более эффективные коды, такие как 8b/10b и некоторые другие, которые я испытывал в своей "лаборатории", наоборот, дают на постоянной составляющей узкий нуль. Такие коды также характеризуются большей чувствительностью к колебаниям базового уровня при прохождении через канал, не имеющий связи по постоянному току.
Сегодня я провел ряд вычислительных экспериментов, которые показывают, что для успешной записи на магнитофон нет необходимости подавлять до нуля постоянную составляющую. Достаточно и того, чтобы обеспечить некоторую неравномерность спектра кодированного сигнала, так чтобы низкие частоты (включая постоянную сост.) были подавлены по сравнению с основной полосой частот, которая занимается сигналом.
Я нашел в интернете статью, в которой приводится метод генерации битовых последовательностей с заданным спектром типа "все полюсы": "Generating Binary Processes with All-Pole Spectra", Petros Boufounos. Иными словами, спектр полученных последовательностей является отфильтрованным белым шумом, причем применяемый (косвенно) фильтр может иметь только полюсы в своей передаточной функции. Таким фильтром нельзя создать нуль на постоянной составляющей или какой-либо другой частоте, но это и не требуется. К сожалению, на коэффициенты фильтра накладываются довольно жесткие ограничения. Создавая фильтры путем ручной вариации коэффициентов и наблюдения полученной АЧХ, я смог создать лишь около 8дБ неравномерности в частотной области. Этого уже достаточно для того, чтобы такой сигнал можно было записать на магнитофон и достоверно считать, как я убедился путем пропускания полученной последовательности через ФВЧ с частотой среза 50Гц. Но все же хотелось бы больше. В статье говорится, что условия накладываемые на коэффициенты фильтра, являются достаточными, но не необходимыми. Таким образом, есть шанс получить фильтры с более подходящими характеристиками.
С практической точки зрения я планирую поступить следующим образом. Сделать сохранялку и загрузчик без какого-либо кодирования, которые сохраняют или загружают произвольный битовый поток. Подготавливать кодовые последовательности на Матлабе и тестировать их на спеке. Надеюсь, Haywire снова сможет предоставить свою технику для таких испытаний. Тем самым надеюсь выяснить, какие ограничения на спектр кодированного сигнала являются достаточными, чтобы он грузился с магнитофона Haywire.
Barmaley_m, кстати, ты случаем не видел защищенное кодирование в играх?
Точно не вспомню, надо поискать, но была загрузка совершенно по звуку отличающаяся... то ли сохранялка в каком-то Boulder Dash... начинала загружаться без пилота... звук глухой какой-то был.
---
upd нашел
Изобрел новый метод генерации битовых последовательностей, спектр которых является продуктом фильтрации белого шума, причем фильтр теперь может содержать не только полюсы (как это было в статье, на которую я ранее давал ссылку), но и нули, причем на любых частотах независимо друг от друга. Порядок фильтра также особо ничем не ограничен. Это позволяет реализовывать фильтры Кауэра (эллиптические) с очень резким спадом АЧХ. Также можно, по желанию, подавлять до нуля постоянную составляющую, хотя в этом, как я недавно выяснил, нет особой необходимости.
Вот спектр полученной мной сегодня битовой последовательности на базе фильтра Кауэра 3 порядка. Фильтры нечетного порядка имеют нуль на постоянной составляющей. Кому как, но меня впечатлило!
Информационная емкость этой последовательности составляет примерно 0.5475, т.е. на 1000 записанных на кассету бит будет в среднем 548 полезных. Метод генерации, однако, очень медленный: даже PC считает долго, а на Спектруме применять этот метод и вовсе невозможно, даже если кодировать/декодировать данные не в реальном времени. Но ничего, не в один день Москва строилась, решать проблемы будем постепенно.
Честно - не могу понять, чего ты этим хочешь сказать) Слишком много теории, причем, не совсем из той сферы, которой надо бы. Да и никаких конкретных примеров кодирования.
Titus, ситуация заключается в следующем. На магнитофоне Haywire имеют место сильные неравномерности АЧХ в области низких частот. То ли это высокий горб, то ли, как мне теперь кажется, это может быть провал. Возможно, ФВЧ, образованные в тракте магнитофона проходными конденсаторами, дают относительно высокую частоту среза. Может быть, в районе 250Гц. То есть все составляющие кассетного сигнала ниже этой частоты существенно ослабляются, а на постоянной составляющей - подавляются полностью.
С точки зрения приема сигнала, подавление на НЧ и горб на НЧ имеют примерно одинаковый эффект. Они приводят тому, что сигнал как бы "едет на волне", т.е. его огибающая совершает колебания с некоторой низкой частотой. В английской терминологии это называется "baseline wander" - "гуляние базовой линии". Эти колебания приводят к тому, что на границе соседних бит сравнение уровня сигнала с нулем происходит каждый раз в разном месте фронтов между битами. А эти фронты имеют конечную длительность вследствие ограниченной полосы пропускания со стороны ВЧ. И тем большую длительность, чем ниже частота среза по ВЧ. Детектирование фронтов по разным уровням, таким образом, приводит к дрожанию измеренных интервалов времени между фронтами - то, что и убивало мой загрузчик на основе ФАПЧ.
Иными словами, у нас полоса задавлена с обеих сторон, и оба этих ограничения усиливают неблагоприятное влияние друг друга.
В случае горба на НЧ, усиливается НЧ-составляющая полезного сигнала и переходит в "волны". В случае провала на НЧ, эта же составляющая вычитается из сигнала. Так как до вычитания сигнал был ровный, то после вычитания опять-таки появляются "волны".
Снизить амплитуду "волн" можно путем создания такого сигнала, который бы имел малую мощность на низких частотах. В этом случае вычитание из сигнала его НЧ-компонент не приведет к образованию больших "волн" потому, что эти НЧ-компоненты изначально были малы. Аналогичным образом, добавление к сигналу его же усиленной НЧ-компоненты ("горб на НЧ") также не приведет к образованию больших "волн" потому, что эта НЧ-компонента изначально была мала.
Собственно говоря, многие коды как раз и строятся с целью уменьшить эффект Baseline wander. Для этого обычно подавляется постоянная составляющая кодированного сигнала. В коде 8b/10b, как и в других блочных кодах, этому уделяется значительное внимание. С точки зрения спектра, на постоянной составляющей создается нуль, влияние которого также распространяется на низкие частоты в окрестности. Они подавляются, что и уменьшает "волны", однако во многих книгах говорится о необходимости полного подавления п.с., что, с моей точки зрения на данный момент, является ошибочным. "Волны" создает не постоянная составляющая, а низкие частоты в ее окрестности, поэтому давить нужно в первую очередь их. Наличие же в сигнале постоянной составляющей небольшой амплитуды приведет всего лишь к небольшому смещению уровня сравнения сигнала с нулем. Но величина этого смещения и амплитуда "волн" от НЧ оказываются одного порядка, поэтому незачем давить п.с., если НЧ не подавлены. А если НЧ подавлены, то и п.с. обычно подавлена (хоть, может быть, и не до нуля) из-за того, что применяемые фильтры имеют плавную АЧХ. Фильтры не всегда применяются явно (как, например, в коде 8b/10b), но они всегда есть в системе, их просто нужно увидеть, посмотрев на систему под нужным углом.
Таким образом, на данный момент я вижу решение задачи в том, чтобы создать битовый код с подавленными НЧ в кодированном сигнале. Это сложная задача, потому что сигнал у нас битовый, имеющий только два уровня. Как управлять спектром такого сигнала? Это невозможно осуществить методами, которые применяются в ЦОС для сигналов с большим количеством уровней. Там-то все просто. Фильтр применил - и дело в шляпе. В случае двоичной последовательности применение явных фильтров невозможно, и приходится конструировать системы, в которых неявно содержится фильтр с нужной АЧХ.
Так вот, мне бы хотя бы для начала научиться получать битовые последовательности с нужным спектром, а потом уже пытаться придумать код на их основе.
Уже пробегали в этой теме куски записи. Только они мало помогают: встроенный магнитофон ZX Spectrum +2 не имеет аналогового выхода. Более того, там даже негде в схеме подключиться, чтобы снять аналоговый сигнал: входной усилитель воспроизведения на транзисторе имеет токовый выход, а за ним сразу идет операционник с высоким коэффициентом усиления, так что он работает как компаратор. Тут, чтобы снять сигнал, надо разрывать связь между транзистором и компаратором и вставлять в нее новый, ненасыщенный каскад на операционнике. Кто это будет делать?
Выкладывались записи после компаратора, но там уже от оригинальной АЧХ остаются только следы в виде дрожания фронтов сигнала. Если же кассету считать и оцифровать на другом магнитофоне - то там ситуация вообще очень печальная, даже на оригинальном формате ZX иногда теряются импульсы, т.е. искажения сигнала невосстановимые. Только что посмотрел усредненный спектр этой аналоговой записи - уровень 200Гц выше уровня 1400Гц на 20дБ. Что это, как не горб?
Честно, без каких-либо примеров - все это сферические кони в вакууме)