Мегаобучалка Главная | О нас | Обратная связь


Организация циклического буфера



2018-07-06 727 Обсуждений (0)
Организация циклического буфера 0.00 из 5.00 0 оценок




Во многих задачах цифровой обработки сигналов используется хранение в памяти программы массива из N последних цифровых отсчетов, накопленных за постоянный интервал времени. Дискретные значения аналогового сигнала X(t) из АЦП могут поступать на вход циклического буфера процессора, если в программе пользователя указаны параметры буфера и порт, к которому подключен аналого-цифровой преобразователь. На рис. 8 показано десять цифровых значений Х, постепенно заполняющих четыре ячейки буфера памяти. При поступлении нового отсчета в буфере изменяется содержимое одной 16-разрядной ячейки памяти и сохраняется N-1 предыдущих значений.

 

 
 

 

 


Рис. 8. Заполнение циклического буфера длиной N = 4

Рассмотрим применение циклического буфера для программной реализации фильтра с конечной импульсной характеристикой (КИХ) четвертого порядка. После заполнения буфера первыми четырьмя числами Х1, Х2, Х3, Х4 рассчитывается свертка Y = k1∙X1 + k2∙X2 + k3∙X3 +k4∙X4,

где k1, k2, k3, k4 – постоянные коэффициенты фильтра.

Чтобы выполнить свертку из четырех произведений и трех сумм в программе на языке ассемблера необходимо указать с помощью косвенной адресации номера ячеек буфера, в которых хранятся числа Х

Y = k1∙x(0) + k2∙x(1) + k3∙x(2) + k4∙ x(3).

При чтении из памяти индексы массива x для расчета Y меняются в следующем порядке: 0, 1, 2, 3. Генератор адреса DAG при следующем обращении к массиву x автоматически повторит цикл перебора индексов, независимо от того, какая будет выполняться команда в программе – чтение или запись. Следующая команда алгоритма – запись числа Х5 в ячейку памяти буфера. Поскольку следующим индексом цикла адреса является 0, то Х5 запишется в буферный элемент массива х(0). Затем следует новый цикл расчета выходного сигнала фильтра с продолжением перебора индекса при чтении переменных из памяти Y = k2∙x(1) + k3∙x(2) + k4∙ x(3) + k1∙x(0),

т.е. Y = k2∙X2 + k3∙X3 +k4∙X4 + k1∙Х5.

Самый старый отсчет Х1 из буфера удален, три значения Х2, Х3 и Х4 сохранились без изменения. Порядок перебора индексов 1, 2, 3, 0 при расчете Y отличается от того, который был ранее. После записи Х6 в ячейку х(1) расчет выходного сигнала выполняется с перебором индексов 2, 3, 0, 1

Y = k3∙x(2) + k4∙ x(3) + k1∙x(0) + k2∙x(1) = k3∙X3 +k4∙X4 + k1∙Х5 + k2∙X6.

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

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

Одновременная выборка двух операндов k и Х в сигнальном процессоре осуществляется по двум независимым шинам: шине данных памяти программ и шине данных памяти данных. Кроме того, имеются отдельные шина адреса памяти программ и шина адреса памяти данных. Таким образом, МАС может получать входные данные по каждой шине данных одновременно. Для задания длины циклического буфера в программе можно использовать только регистры L0 – L7, указателя адреса – регистры I0 – I7, шага изменения адреса – регистры М0 – М7.

В листинге 1 приведен фрагмент программы вычисления одного значения выходного сигнала КИХ-фильтра N-го порядка по следующему алгоритму:

- выборка коэффициента из циклического буфера коэффициентов;

- обновление указателя адреса буфера коэффициентов;

- выборка отсчета из циклического буфера входного сигнала;

- обновление указателя адреса буфера входного сигнала;

- умножение коэффициента на отсчет;

- добавление нового слагаемого к промежуточному результату;

- переход в начало цикла программы, если просуммированы не все произведения.

 
 
Листинг 1. Расчет фильтра с циклической буферизацией ADSP – 21xx Пример ассемблерного кода: М1, М5 = 1 ; L0, L4 = N ; MR = 0, MX0 = DM (I0, M1), MY0 = PM (I4, M5) ; CNTR = N – 1 ; DO convolution UNTIL CE ; Convolution : MR = MR + MX0 * MY0 (SS), MX0 = DM (I0, M1), MY0 = PM (I4, M5) ; MR = MR + MX0 * MY0 (RND) ; IF MV SAT MR ;  

 

 


Буфер коэффициентов использует память программ (РМ), буфер входного сигнала – память данных (DM). Перед выполнением программы коэффициенты и отсчеты входного сигнала должны находиться в ячейках РМ и DM соответственно. Указателем адреса памяти циклического буфера коэффициентов является регистр I4, циклического буфера входного сигнала – I0. Область адресов памяти для организации буферов в программе определять не нужно, так как эту задачу решает операционная система пакета проектирования Visual DSP++ на этапе компоновки (Linker).

Первые команды во второй и третьей строках листинга задают параметры буферов. Модификаторы адреса М1 и М5 равны единице (шаг изменения адреса). В регистрах L0, L4 задается длина буфера, равная порядку фильтра (L0 = N, L4 = N). Команды четвертой строки очищают регистр MR и заполняют первым значением Х из памяти данных и первым значением k из памяти программ.

Затем в программе реализуется свертка данных Х и коэффициентов k. Для этого в следующей строке листинга переменная CNTR определяет количество циклов: CNTR = N–1. Регистр CNTR используется в качестве счетчика циклов умножения со сложением в устройстве МАС. Для выполнения цикла не требуется дополнительных команд по проверке условия его завершения. Выход из цикла выполнятся процессором автоматически при выполнении условия CNTR = 0 после N–1 проходов. Начало цикла определено меткой Convolution после оператора DO UNTIL, окончание – первой точкой с запятой.

Результат вычислений заносится в регистр MR. Многофункциональная команда MR = MR + MX0 * MY0 (SS), MX0 = DM (I0, M1), MY0 = PM (I4, M5) выполняется за один машинный цикл (13,3 нС). Последние две строки программы умножают, суммируют N-ый раз и проверяют окончательный результат в регистре MR на переполнение с помощью бита MV. Заключительная команда умножения с накоплением выполняется с включенным режимом округления RND до старших 24 разрядов регистра MR. В случае переполнения (MV=1) процессор командой SAT запишет в регистр MR максимально возможное число для формата, принятого в программе.

Благодаря такому подходу, при накоплении результата используются преимущества регистра MR 40-разрядной точности. Насыщение происходит только в том случае, если вычисление заключительного результата привело к переполнению 32 младших значащих разрядов регистра MR.

Ограничение на число звеньев фильтра, реализующего программу КИХ-фильтрации в реальном масштабе времени, определяется, прежде всего, длительностью процессорного цикла, частотой дискретизации и требуемым объемом других вычислений. Программа КИХ-фильтра, представленная в примере, требует общего количества циклов N+5 для фильтра с числом звеньев N. Для DSP-процессора ADSP-2189M, обладающего быстродействием 75 MIPS, реализация фильтра с числом звеньев 100 требует 13,3 нс*100 + 5*13,3 нс = 1,4 мкс. Это соответствует максимально возможной частоте дискретизации 714 кГц, ограничивая, таким образом, ширину полосы частот обрабатываемого сигнала несколькими сотнями килогерц.

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

 



2018-07-06 727 Обсуждений (0)
Организация циклического буфера 0.00 из 5.00 0 оценок









Обсуждение в статье: Организация циклического буфера

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (727)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)