8.4.Блок коррекции ошибок. Интерполяция и приглушение
После того, как информация, поступившая от демодулятора, записана в буферную память, начинается процесс ее деперемежения, совмещенный с процедурой устранения детонаций, а также обнаружение и коррекция ошибочных символов. При этом декодирование и деперемежение осуществляются в порядке, обратном тому, что был при кодировании и перемежении (рисунки 7 и 8).
Следует подчеркнуть, что здесь и далее все сигналы управления, в том числе и для операций с ЗУПВ, формируются на основе стабильной тактовой частоты Fт = 4,3218 МГц, вырабатываемой кварцевым генератором. О той тактовой частоте F˜т, которая была выделена из считанного с диска информационного сигнала и зависела от скорости вращения диска, теперь можно забыть раз и навсегда.
Механизм всех трех этапов деперемежения заключается в том, что нужные символы извлекаются из памяти в требуемом порядке и используются в процессе декодирования, после чего вновь записываются в ту же память, но в другие ячейки.
Это повторяется до тех пор, пока не будут выполнены все операции двух этапов декодирования и трех этапов перемежения. После окончания процедуры будет восстановлен первоначальный порядок следования символов – такой, каким он был на выходе АЦП.
Декодирование на каждом из этапов С1 и С2 заключается в том, что благодаря наличию в кодовых словах проверочных символов, можно определить, есть ли в кодовых словах ошибки и какие именно символы ошибочны. Такая процедура требует целого ряда довольно сложных и громоздких вычислений. Но, когда положение ошибки определено, она достаточно легко корректируется.
Однако, используемые коды С1 и С2 способны обнаружить не более четырех и исправить
не более двух ошибочных символов. Если ошибок больше двух, но не более четырех, то декодер может обнаружить только сам факт их наличия, но ни локализовать, ни, тем более, исправить их не в состоянии. В этом случае все символы кодового слова отмечаются указателями ненадежности или, что то же самое, указателями стирания. После того, как эти символы вместе с указателями стирания подвергнутся процедуре очередного этапа перемежения, они перераспределяются между другими кодовыми словами другого этапа декодирования и могут быть откорректированы на этом этапе, если, конечно, в этом кодовом слове не окажется ошибок больше, чем он в состоянии исправить.
Поскольку декодеров всего два, то исправлять стирания, как правило, приходится только декодеру С2, так как декодеру С1 получать их неоткуда – он их может только производить. Декодер С2 может как исправлять стирания, так и производить их, или же оставлять без изменения указатели стираний, полученные от декодера С1. В зависимости от схемотехники микросхемы, совокупность операций, которые могут выполнять декодеры С1 и С2, может сильно отличаться друг от друга. Такая совокупность операций называется стратегией декодирования.
Как уже говорилось, процесс декодирования кодов С1 и С2 требует большого количества вычислений и сложного анализа, а значит, громоздких схем с большим количеством элементов. Поэтому некоторые фирмы-производители с целью удешевления микросхем, включающих в себя декодеры С1 и С2, при их разработке использовали упрощенные стратегии декодирования. Например, декодер С1 может корректировать только одну ошибку вместо двух, а декодер С2 – только стирания, и не корректировать ошибок вовсе. Но это касается, в основном, старых моделей проигрывателей CD, микросхемы для которых проектировались еще в начале восьмидесятых годов. В последующих разработках использовались все более сложные стратегии, где стирания вырабатываются еще на этапе декодирования канального кода EFM, когда обнаруживались 14-разрядные символы, не попадающие во множество, которому соответствуют какие-то 8-разрядные символы, что однозначно указывает на их ошибочность. При этом уже оба декодера – и С1 и С2 – работают со стираниями и могут корректировать до двух ошибочных символов, а также проводят сложный анализ количества и положений как стираний, так и ошибок, обнаруженных самостоятельно.
Разница между упрощенными и суперсложными стратегиями выражается в количестве символов на выходе декодера CIRC, отмеченных указателями стирания (ненадежности). Чем сложнее стратегия, тем меньше будет таких символов и тем меньше будет отсчетов, нуждающихся в маскирующих процедурах. Маскирование хотя и эффективный способ, но все-таки неточный, поэтому лучше его избегать.
Но вернемся к преобразованию потока информации после завершения процедур коррекции ошибок и деперемежения в декодере CIRC. Восьмиразрядные символы вновь объединяются в 16-разрядные отсчеты, а те, в свою очередь, разделяются на две последовательности – правого и левого стереоканалов. Теперь их можно подавать на ЦАП для преобразования в аналоговую форму. Но те из отсчетов, которые включают в себя символы, отмеченные указателями стирания, сразу направлять в ЦАП не стоит, так как в звучании фонограммы будут слышны потрескивания и щелчки. Чтобы избежать этого, такие отсчеты заменяются интерполяциями – средним арифметическим от значений соседних неискаженных отсчетов (рис.9). В большинстве случаев значение интерполяции очень близко к истинному значению искаженного отсчета и на слух незаметно. Только на высоких частотах серии интерполяций могут ощущаться людьми с хорошим слухом как едва уловимые искажения.
Интерполяция бывает разная. Та, которая используется для маскирования ошибок в цифровой звукотехнике, называется интерполяцией первого порядка. При ее вычислении принимаются во внимание только по одному отсчету, соседнему с искаженным (рис.9). Но интерполяция может быть и более высоких порядков. Например, если используется интерполяция N-го порядка, то при расчете величины искаженного отсчета будут учитываться N предшествующих ему правильных отсчетов и N следующих за ним. Конечно, здесь вычисленное значение будет более точным, чем при интерполяции первого порядка.
Подобные способы маскирования эффективны только при наличии одиночных ошибок. Однако нередки случаи, когда искаженными оказываются несколько отсчетов подряд. Интерполяцией их маскировать нельзя. Если оставить все как было, то в этом месте фонограммы будет слышен громкий треск. Если заменить искажения «нулями», то будут слышны два громких щелчка – в начале и в конце серии. В первых экспериментальных моделях проигрывателей CD для маскирования таких серий использовался еще один вид интерполяции – интерполяция нулевого порядка, когда взамен искаженных значений вставлялось значение последнего правильного отсчета , а последний искаженный вычислялся по методу линейной интерполяции (рис.9). Такой способ маскирования еще называется удержанием.
Однако способ этот чересчур уж неточный. Поэтому впоследствии для подобных случаев был разработан другой способ маскирования – приглушение (muting). Если искаженными оказываются много отсчетов подряд, то они заменяются значением последнего правильного плавно уменьшающегося до нуля по косинусоидальному закону (рис.10). При достаточно длинных сериях искажений для этого отводится 128 периодов частоты дискретизации. После этого, за 128 периодов до первого правильного отсчета, сигнал начинает плавно возрастать по тому же косинусоидальному закону до величины этого неискаженного отсчета. Если количество искажений меньше 256, то на уменьшение и увеличение отводится по половине их общего числа.
На слух такие плавные переходы, даже при достаточно большой их длине, воспринимаются как кратковременные замирания звука, без неприятных ощущений в виде тресков и щелчков. Короткие же не ощущаются вовсе в силу инерционности человеческого слуха.
Кроме интерполяции, удержания и приглушения, для маскирования могут использоваться также механизмы общего масштабирования, ослабления и замирания.
Общее масштабирование состоит в том, что уровень сигнала после последнего правильного отсчета начинает уменьшаться по линейному закону до уровня 0 дБ. Также по линейному закону уровень сигнала возрастает до нормального перед первым правильным отсчетом.
Ослабление сигнала состоит в уменьшении масштаба сигнала на –12 дБ.
Замирание аналогично приглушению и общему масштабированию, но здесь в течение 128 тактов масштаб сигнала уменьшается или увеличивается на 0,07 дБ за каждый такт.
