[an error occurred while processing this directive]
Так как восстанавливать, я, вроде, написал в последнем абзаце. Попробую еще раз и понятнее (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено homekvn 23 июня 2006 г. 17:29
В ответ на: Ответ: Прямо в точку, насчет дискретизации для хранения данных отправлено sergant1 23 июня 2006 г. 16:19

Обозначим принимаемый на частоте Fs сигнал как s[n]. Этот сигнал Вы пропускаете через банк фильтров, состоящий из только понижающих каскадов. В результате имеем:

s0[n] = s[n];
s1[n] = сигнал s0[n], пропущенный через НЧКаскад1;
s2[n] = сигнал s1[n], пропущенный через НЧКаскад2;
...
s6[n] = сигнал s5[n], пропущенный через НЧКаскад6;

где все каскады НЧКаскадК - одинаковы и имеют в своем составе ФНЧ (скорее КИХ-фильтр порядка примерно от 7 до 40, в зависимости от того, какое подавление возможных высоких частот Вам нужно), а также прореживатель, который существует только на бумаге, а на деле же интегрирован в фильтр.

Очевидно, что сигнал s[0] - это оригинальный сигнал, s1[n] - сигнал с пониженной вдвое частотой дискретизации, ... s6[n] - cигнал с пониженной в 64 раза частотой дискретизации.

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

a1[n] = сигнал s0[n], пропущенный через ВЧКаскад1;
a2[n] = сигнал s1[n], пропущенный через ВЧКаскад2;
...
a5[n] = сигнал s4[n], пропущенный через ВЧКаскад5.

Сигнал a1[n], который мы пропустим через некий амплитудный детектор, будет ответственен за выдачу ответа о возможности понижения частоты вдвое (т.е. за взятие в качестве очередного, отсчета сигнала s1[n]);

Сигнал a2[n], который мы пропустим через некий амплитудный детектор, вкупе с сигналом a1[n] будет ответственен за выдачу ответа о возможности понижения частоты еще вдвое (т.е. за взятие в качестве очередного, отсчета сигнала s2[n]), и т.д.

Далее, по результатам работы анализатора Вы берете и передаете в канал связи либо отсчет сигнала s0[n] (если детектор дал отрицательный ответ), либо отсчет сигнала s1[n] (если детектор сказал, что понижать частоту можно). Если Вы отправляете в канал связи отсчет сигнала s0[n], то (при условии, что на предыдущей стадии частота дискретизации была той же) вы два младшие бита его (которые, надеюсь, для Вас мало что значат, если их испортить) зануляете, снабжая, тем самым, данный посылаемый отсчет флагом "частота дискретизации та же, что и для предыдущего отсчета". Если же Вы принимаете решение о посылке в канал связи отсчета сигнала s1[n], то (при условии, что предыдущим посланным отсчетом был отсчет сигнала s0[n-1]), Вы снабжаете данный меткой "частота дискретизации понизилась вдвое" путем установки младших двух битов посылаемого отсчета в состояние 01.

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

Таким образом Вы посылаете всякий раз в канал связи отсчет одного из сигналов s0[n], s1[n], ..., s6[n]. При этом выбранный порядковый номер каскада банка фильтров не может от одного посылаемого отсчета к другому больше, чем на единицу.

При приеме (восстановлении) сигнала Вы строите обратный интерполирующий банк фильтров. И работаете по следующему принципу:

y[n] = сигнал y1[n], пропущенный через ИНЧКаскад1, либо сигнал y0[n].
y1[n] = сигнал y2[n], пропущенный через ИНЧКаскад2, либо сигнал y1[n].
y2[n] = сигнал y3[n], пропущенный через ИНЧКаскад3, либо сигнал y2[n].
...
y5[n] = сигнал y6[n], пропущенный через ИНЧКаскад6, либо сигнал y5[n].

ИНЧКаскад - это интерполирущее звено, в котором в начале к каждому отсчету добавляется ноль, а затем выполнятется НЧ-фильтрация, точно таким же фильтром, как и при довнсемплинге. Вам лишь надо решить, в какой из отводов направить текущий отсчет x[n] сигнала, принятого из канала связи. А направить его надо либо в текущий отвод, использованный на предыдущем шаге, сделав присваивание уK[n] = x[n] (если младшие два бита x[n] равны 00; либо в отвод yK-1[n] (если младшие два бита равны 10 - повышаем частоту); либо в отвод уK+1[n] (если младшие два бита равны 01 - понижаем частоту).

При интерполяции есть одна вещь, которую надо сделать аккуратно. Но о ней пока не пишу.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru