Оценка временных параметров
Как уже было отмечено ранее, сигнальный процессор в разработанном фильтре работает на тактовой частоте fCPU_CLK=100 МГц, следовательно, один такт процессора составит:
Частота синхронизации АЦП и ЦАП установлена равной fCLKX=2 МГц. Обработка и передача 16-битового значения в АЦП и ЦАП происходит за 22 такта с момента перехода сигнала BFSX последовательного порта процессора на низкий уровень [9]. Следовательно, полное время обработки одного отсчета составит:
Временная диаграмма для приема 16-битового значения из АЦП ADS8320 приведена на рис.18. Для ЦАП диаграмма практически аналогична, за исключением других названий сигналов, имеющих тот же смысл.
Рис. . Временная диаграмма работы АЦП
Частота дискретизации в соответствии с заданием равняется fd=48000 Гц. С такой частотой возникает прерывание таймера процессора, по которому инициируется прием нового отсчета и выдача уже готового. По приближенной оценке выполнение обработчика прерывания от таймера составляет либо 6 тактов (в самом начале работы фильтра, когда выходные данные еще не готовы), либо 7 тактов (когда производится вывод результатов из первого буфера), либо 9 тактов (когда производится вывод результатов из второго буфера). Таким образом, на обработку прерывания от таймера процессор затрачивает то tINTmin до tINTmax времени:
Через время tSAMPLE после начала приема очередного отсчета с АЦП (то есть фактически с момента вызова обработчика прерывания от таймера) порт McBSP1 процессора вызывает прерывание BRINT1, сигнализирующее о получении нового отсчета. Обработка прерывания от порта длится минимум 8 тактов и максимум 10 тактов (только при приеме последнего, 512-го отсчета для второго буфера приемника). То есть обработка прерывания будет длиться 10 тактов только в одном случае из 1024-х, и разница во времени не очень значительна, поэтому за время обработки этого прерывания примем величину в 8 тактов, или:
Для порта McBSP0 прерывание при передаче данных не используется, здесь программе достаточно записать данные в выходной регистр этого порта, и он самостоятельно, параллельно с работой основной программы передаст данные на ЦАП.
Так как каждый отсчет процессор получает и передает на выход с частотой fd=48000 Гц, то интервал между получением или передачей очередного отсчета составит
Из этого времени тратится на обработку прерывания от таймера максимум tINTmax=90 нс и на обработку прерывания от порта McBSP1 tBRINT1=80 нс. Остальное время программа свободно может обрабатывать полученные данные, то есть на обработку ей дается:
Так как программа обрабатывает сигнал блоками по 512 отсчетов и используется два буфера-приемника, то она должна успевать проводить все расчеты по фильтрации одного блока до окончания приема другого. Время на получение одного блока из 512 отсчетов составит:
Тогда, учитывая время tCALCmin, которое предоставлено основной программе на расчеты за период приема одного отсчета, полное время, за которое программа должна успевать фильтровать один блок, составит:
Чтобы проверить работоспособность спроектированного цифрового фильтра относительно скорости выполнения расчетов, необходимо определить максимальное время, реально требуемое программе на обработку одного кадра данных, и сравнить его с рассчитанным значением tCALCmax – максимально допустимым временем обработки.
По приблизительным подсчетам на вычисление прямого 1024-точечного БПФ (работа функции BPF()) требуется tBPFтакт=91456 тактов, а на вычисление обратного БПФ той же размерности требуется tOBPFтакт=100674 тактов. Время вычисления этих преобразований составит:
На расчет ядра высокочастотного фильтра (функция HighPassFilter()) из 511 точек затрачивается приблизительно tFILTERтакт=10223 такта. То есть время синтеза ядра фильтра из 511 точек для заданной частоты среза fc составит:
Максимальное время (при необходимости пересчета ядра фильтра) в тактах, затрачиваемое на выполнение команд программы при обработке одного кадра данных, без учета времени выполнения вызываемых процедур BPF() и Filter(), составляет tCMDтакт=22034 тактов. Кроме этого, при обработке одного кадра в 512 отсчетов (при условии пересчета ядра фильтра) необходимы вызовы процедур: 1 раз Filter(), 2 раза BPF() для прямого БПФ и 1 раз BPF() для обратного БПФ. Тогда общее максимальное время обработки одного кадра сигнала составит:
При сравнении с полученным ранее максимально допустимым временем обработки одного 512-точечного кадра данных tCALCmax=11.48 мс видно, что этого времени более чем достаточно для того, чтобы программа фильтрации успевала провести вычисления до того, как поступят новые данные. Почти 4-ю часть этого времени главная функция программы будет находиться в ожидании поступления новых данных.
После момента сброса процессора программе требуется некоторое время для инициализации, поэтому данные начнут считываться с АЦП не сразу. Общее время для выполнения различных команд инициализации составляет tINITтакт=73 такта или в секундах:
За время обработки одного 512-точечного кадра данных tFRAME_CALC=3.16 мс будет получено следующее количество новых отсчетов (а значит и вызовов прерываний от таймера и последовательного порта):
Тогда задержка готовности выходных данных после начала их обработки составит:
Задержка выхода фильтра относительно входа составит:
|