Проектирование КИХ-фильтров в системе визуально-имитационного моделирования Matlab/Simulink с использованием Altera DSP Builder

PDF версия
В статье продолжается рассмотрение методологии объектно-ориентированного проектирования цифровых устройств обработки сигналов с использованием пакета расширения Altera DSP Builder ver. 12.1 системы визуально-имитационного моделирования Matlab/Simulink (версия 8.0.0.783 (R2012b)) для реализации в базисе ПЛИС Cyclone фирмы Altera.

Рассмотрим вариант проектирования КИХ-фильтра с помощью транспонированной формы, которую можно считать разновидностью параллельного фильтра.

Уравнение фильтрации запишем в следующем виде: y = C0x0+C1x1++C2x2+C3x3. Предположим, что коэффициенты фильтра известны: C0 = –2, C1 = –1, C2 = 7 и C3 = 6. На рис. 1 показана транспонированная реализация дискретного фильтра (direct transposed form II) на четыре отвода. Транспонированная схема позволяет эффективно распараллелить вычисления и поэтому применяется наиболее часто. Например, в САПР ПЛИС Xilinx ISE 14.4 функция FIR Compiler v6.3, входящая в состав генератора параметризированных ядер XLogiCORE IP [4], поддерживает такие структуры фильтров (рис. 2). Они получили название Transpose Multiply-Accumulate architecture (транспонированная структура, основанная на операциях умножения и накопления). В работе [4] рассматривается проектирование односкоростного систолического КИХ-фильтра с конвейеризацией (прямая форма).

Транспонированная форма КИХ-фильтра на четыре отвода

Рис. 1. Транспонированная форма КИХ-фильтра на четыре отвода

Генератор параметризированных ядер XLogiCORE IP FIR Compiler v6.3 САПР ПЛИС Xilinx ISE 14.4. Выбор архитектуры фильтра и настройка секций ЦОС-блоков

Рис. 2. Генератор параметризированных ядер XLogiCORE IP FIR Compiler v6.3 САПР ПЛИС Xilinx ISE 14.4. Выбор архитектуры фильтра и настройка секций ЦОС-блоков

При реализации фильтра в транспонированной форме можно одновременно реализовать все операции умножения, но для получения результата фильтрации необходимо дождаться окончания выполнения всех операций сложения. Такие фильтры предполагают использование аппаратных умножителей, входящих в состав ЦОС-блоков ПЛИС.

Мегафункция fir_compiler_v13_1 САПР ПЛИС Altera Quartus II поддерживает структуры фильтров на последовательной и параллельной распределенной арифметике, модификацию последовательной арифметики (Multibit Serial Structure, несколько КИХ-фильтров на последовательной распределенной арифметике, объединенных склеивающей логикой) и структуры с использованием аппаратных умножителей (Multicycle variable, MCV).

Генератор параметризированных ядер Xilinx XLogiCORE IP FIR Compiler v5.0 предлагает на выбор три структуры фильтров: прямую форму систолического КИХ-фильтра, в котором операции умножения и сложения выполняются параллельно с конвейеризацией; транспонированную и на распределенной арифметике [5]. В отличие от мегафункции Altera fir_compiler_v13_1 функция Xilinx FIR Compiler v5.0 в автоматическом режиме определяет, какая структура фильтра на распределенной арифметике наиболее эффективна (последовательная или параллельная) для конкретной серии ПЛИС в зависимости от соотношения частоты взятия входных отсчетов fs и частоты тактирования системы fclk.

Cтруктуры КИХ-фильтров на основе распределенной арифметики обладают рекордным быстродействием, которое не снижается с ростом числа отводов. Такие решения особенно эффективны в низкобюджетных сериях ПЛИС, где существует недостаточное число встроенных аппаратных ЦОС-блоков.

Рассмотрим КИХ-фильтр транспонированной формы с перегружаемыми коэффициентами (обозначения сигналов, используемых в проекте, указаны на рис. 1). Исходный VHDL-код позаимствуем из работы [6]. Первый оператор process используется для загрузки коэффициентов фильтра и дискретных значений сигнала. При Load_x, равном логическому нулю, происходит последовательная загрузка коэффициентов фильтра в регистр с (далее последующий сдвиг), а при Load_x, равном логической единице, происходит загрузка сигнала, подлежащего фильтрации, в регистр x. Второй оператор process формирует сумму произведений (SOP). Для первого отвода фильтра устанавливается y<=a(0). Третий оператор process формирует произведения (p). Входной сигнал x_in и коэффициенты фильтра c_in представляются с 9‑битной точностью (W1), произведения (сигнал p, W2 = 2W1) вычисляются с точностью 18 бит, суммирование (сигнал a, W3 = W2+log2(L), где L = 4, L — число отводов фильтра) осуществляется с точностью 19 бит с учетом возможного переполнения по формуле 9+9+log2(4)–1 = 19. Внутренние сигналы c, p и a представляют собой матрицы разной размерности. Комментарии сохранены в оригинальном обозначении [6] для удобства копирования пользователем, если он захочет реализовать такой проект.

На рис. 3 показан проект КИХ-фильтра на четыре отвода в САПР Quartus II ver.13.1 с применением кода языка VHDL (пример 1), а на рис. 4 представлена импульсная характеристика. Последовательно загружаются коэффициенты –2, –1, 7 и 6, далее подается единичный импульс на вход data, и на следующем такте синхроимпульса на выходе фильтра наблюдаем импульсную характеристику.

Проект КИХ-фильтра на четыре отвода в САПР Quartus II ver.13.1 с использованием кода языка VHDL (пример 1)

Рис. 3. Проект КИХ-фильтра на четыре отвода в САПР Quartus II ver.13.1 с использованием кода языка VHDL (пример 1)

Функциональное моделирование (импульсная характеристика КИХ-фильтра) с использованием встроенного векторного редактора

Рис. 4. Функциональное моделирование (импульсная характеристика КИХ-фильтра) с использованием встроенного векторного редактора

LIBRARY ieee; -- Using predefined packages
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_signed.ALL;
-- --------------------------------------------------------
ENTITY fir_gen IS ------> Interface
GENERIC (W1 : INTEGER := 9; -- Input bit width
W2 : INTEGER := 18;-- Multiplier bit width 2*W1
W3 : INTEGER := 19;-- Adder width = W2+log2(L)–1
W4 : INTEGER := 11;-- Output bit width
L : INTEGER := 4 -- Filter length
);
PORT ( clk : IN STD_LOGIC; -- System clock
reset : IN STD_LOGIC; -- Asynchron reset
Load_x : IN STD_LOGIC; -- Load/run switch
x_in : IN STD_LOGIC_VECTOR(W1-1 DOWNTO 0);
-- System input
c_in : IN STD_LOGIC_VECTOR(W1-1 DOWNTO 0);
-- Coefficient data input
y_out : OUT STD_LOGIC_VECTOR(W4-1 DOWNTO 0));
END fir_gen; -- System output
-- --------------------------------------------------------
ARCHITECTURE fpga OF fir_gen IS
SUBTYPE SLVW1 IS STD_LOGIC_VECTOR(W1-1 DOWNTO 0);
SUBTYPE SLVW2 IS STD_LOGIC_VECTOR(W2-1 DOWNTO 0);
SUBTYPE SLVW3 IS STD_LOGIC_VECTOR(W3-1 DOWNTO 0);
TYPE A0_L1SLVW1 IS ARRAY (0 TO L-1) OF SLVW1;
TYPE A0_L1SLVW2 IS ARRAY (0 TO L-1) OF SLVW2;
TYPE A0_L1SLVW3 IS ARRAY (0 TO L-1) OF SLVW3;
SIGNAL x : SLVW1;
SIGNAL y : SLVW3;
SIGNAL c : A0_L1SLVW1 ; -- Coefficient array
SIGNAL p : A0_L1SLVW2 ; -- Product array
SIGNAL a : A0_L1SLVW3 ; -- Adder array
BEGIN
Load: PROCESS(clk, reset, c_in, c, x_in)
BEGIN ------> Load data or coefficients
IF reset = '1' THEN -- clear data and coefficients reg.
x <= (OTHERS => '0');
FOR K IN 0 TO L-1 LOOP
c(K) <= (OTHERS => '0');
END LOOP;
ELSIF rising_edge(clk) THEN
IF Load_x = '0' THEN
c(L-1) <= c_in; -- Store coefficient in register
FOR I IN L-2 DOWNTO 0 LOOP -- Coefficients shift one
c(I) <= c(I+1);
END LOOP;
ELSE
x <= x_in; -- Get one data sample at a time
END IF;
END IF;
END PROCESS Load;
SOP: PROCESS (clk, reset, a, p)-- Compute sum-of-products
BEGIN
IF reset = '1' THEN -- clear tap registers
FOR K IN 0 TO L-1 LOOP
a(K) <= (OTHERS => '0');
END LOOP;
ELSIF rising_edge(clk) THEN
FOR I IN 0 TO L-2 LOOP -- Compute the transposed
a(I) <= (p(I)(W2-1) & p(I)) + a(I+1); -- filter adds
END LOOP;
a(3) <= p(3)(W2-1) & p(3); -- First TAP has
END IF; -- only a register
y <= a(0);
END PROCESS SOP;
-- Instantiate L multipliers
MulGen: FOR I IN 0 TO L-1 GENERATE
p(i) <= c(i) * x;
END GENERATE;
y_out <= y(W4-1 DOWNTO 0);
END fpga;

Пример 1. VHDL-код КИХ-фильтра транспонированной формы на четыре отвода

Если применяется САПР Quartus II ver.12.1 без поддержки встроенного векторного редактора или симуляция на уровне регистровых передач (RTL-симуляция) с использованием инструмента ModelSim-Altera, необходимо предварительно разработать испытательный стенд на языке VHDL. Для этого следует зайти в меню Processing/Start/Start Test Bench Template Writer и создать шаблон испытательного стенда. В нашем случае появится файл с именем проекта fir_gen с расширением vht, который в дальнейшем нужно отредактировать в ручном режиме. На рис. 5 показаны настройки САПР Quartus II меню EDA Tool Settings/Simulation для RTL-симуляции. Выбираем инструмент симуляции (ModelSim). Указываем выходной формат нетлиста (VHDL) для симуляции и каталог. Более подробно ознакомиться с системой цифрового моделирования ModelSim-Altera на примере проектирования систолических КИХ-фильтров в базисе ПЛИС можно в работе [7].

Настройки САПР Quartus II, меню EDA Tool Settings/Simulation

Рис. 5. Настройки САПР Quartus II, меню EDA Tool Settings/Simulation

Пример 2 демонстрирует испытательный стенд для функционального моделирования импульсной характеристики КИХ-фильтра в системе цифрового моделирования ModelSim-Altera. На рис. 6 показано функциональное моделирование в системе ModelSim-Altera.

Функциональное моделирование (импульсная характеристика) в системе цифрового моделирования ModelSim-Altera

Рис. 6. Функциональное моделирование (импульсная характеристика) в системе цифрового моделирования ModelSim-Altera

-- ************************************************************
-- This file contains a Vhdl test bench template that is freely editable to
-- suit user's needs. Comments are provided in each section to help
-- the user fill out necessary details.
-- ************************************************************
-- Generated on "10/08/2015 15:29:30"

-- Vhdl Test Bench template for design : fir_gen
--
-- Simulation tool : ModelSim-Altera (VHDL)
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY fir_gen_vhd_tst IS
END fir_gen_vhd_tst;
ARCHITECTURE fir_gen_arch OF fir_gen_vhd_tst IS
-- constants
-- signals
SIGNAL c_in : STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL clk : STD_LOGIC;
SIGNAL Load_x : STD_LOGIC:= '0';
SIGNAL reset : STD_LOGIC:= '1';
SIGNAL x_in : STD_LOGIC_VECTOR(8 DOWNTO 0);

SIGNAL y_out : STD_LOGIC_VECTOR(10 DOWNTO 0);
COMPONENT fir_gen
    PORT (
    c_in : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    clk : IN STD_LOGIC;
    Load_x : IN STD_LOGIC;
    reset : IN STD_LOGIC;
    x_in : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    y_out : OUT STD_LOGIC_VECTOR(10 DOWNTO 0)
    );
END COMPONENT;
BEGIN
    i1 : fir_gen
    PORT MAP (
-- list connections between master ports and signals
    c_in => c_in,
    clk => clk,
    Load_x => Load_x,
    reset => reset,
    x_in => x_in,
    y_out => y_out
    );
clk_process : PROCESS
BEGIN
        clk <= '0';
        wait for 40 ns;
        clk <= '1';
        wait for 40 ns;
END PROCESS clk_process;

res_process : process
begin
        wait for 20 ns;
        reset <= '0';
end process res_process;
ld : PROCESS
BEGIN
Load_x <= '0';
wait for 320 ns;
Load_x <= '1';
wait;
END PROCESS ld;
coef : process
     begin
        c_in <= "000000000";
        wait for 20 ns;
        c_in <= "111111110";
        wait for 60 ns;
        c_in <= "111111111";
        wait for 80 ns;
        c_in <= "000000111";
        wait for 80 ns;
        c_in <= "000000110";
    wait;          
    END process coef;
delta : process
     begin
        x_in <= "000000000";
        wait for 320 ns;
        x_in <= "000000001";
        wait for 80 ns;
     x_in <= "000000000";     
    wait;          
    END process delta;
END fir_gen_arch;

Пример 2. Испытательный стенд для функционального моделирования КИХ-фильтра в системе цифрового моделирования ModelSim-Altera

Проект может быть размещен в базис ПЛИС серии Cyclone III EP3C5F256C6, он занимает логических ячеек — 69, аппаратных умножителей с размерностью операндов 99 — 4, рабочая частота в наихудшем случае с использованием TimeQuest-анализа для модели slow 1100mV 85C оценивается величиной 196,7 МГц.

 

Проектирование фильтров Добеши с использованием мегафункции FIR Compiler САПР Altera Quartus II

Вейвлет-преобразование одномерного сигнала s(t) состоит в его разложении по базису, сконструированном из обладающей определенными свойствами солитоноподобной функции посредством масштабных изменений и переносов [8, 9]:

Формула

где a — масштаб анализа; b — сдвиг вейвлета по времени; W(a,b) — коэффициенты вейвлет-преобразования или двумерный массив амплитуд вейвлет-преобразования; t — время; R — множество действительных чисел; ψ — локализованная по времени и частоте, быстростремящаяся к нулю, двухпараметрическая вейвлет-функция; звездочка над ψ обозначает комплексное сопряжение. Варьируя значения параметров a и b, можно получить вейвлет-спектр (time-scale spectrum (масштабно-временной спектр) или wavelet spectrum). Вейвлет-преобразование обеспечивает двумерную развертку сигнала s(t), при этом частота и координата рассматриваются как независимые переменные.

На практике КИХ-фильтры с небольшим числом отводов могут быть использованы для проектирования фильтров Добеши второго порядка [6]. Для получения информации о вейвлетах Добеши необходимо в командной строке Matlab набрать waveinfo(‘db’). Вейвлеты Добеши dbN относятся к ортогональным вейвлетам с компактным носителем. В системе Matlab вейвлеты Добеши задаются конечно-импульсной характеристикой — набором весовых вейвлет-коэффициентов.

Рассмотрим четырехточечный фильтр Добеши db2. Графики вейвлетов Добеши db2 в системе Matlab можно увидеть следующим образом:

[phi,psi,x]=wavefun('db2',10);
subplot(121); plot(x,phi);
title('y=\phi(x)'); axis square; grid on;
subplot(122); plot(x,psi);
title('y=\psi(x)'); axis square; grid on;

phi обозначает масштабирующую функцию — j(x); psi — материнский вейвлет — ψ(x); X — массив значений независимой переменной x; 10 — число итераций (степень итерационного уточнения). Функции j(x) и ψ(x) быстрозатухающие, имеют компактный носитель и не имеют аналитических выражений.

С помощью команд можно также посмотреть масштабирующую функцию j(x) вейвлета Добеши db2 и весовые вейвлет-коэффициенты фильтров декомпозиции и реконструкции сигнала (рис. 7). Коэффициенты фильтра даются с учетом нормировки множителя 1/2.

Масштабирующая функциия ϕ(x) вейвлета и коэффициенты фильтра Добеши db2, а также весовые вейвлет-коэффициенты фильтров декомпозиции и реконструкции сигнала

Рис. 7. Масштабирующая функция ϕ(x) вейвлета и коэффициенты фильтра Добеши db2, а также весовые вейвлет-коэффициенты фильтров декомпозиции и реконструкции сигнала

load db2; w = db2; iter = 10; wav = 'db2';
wn=sqrt(2)*w;
[phi,psi,xval] = wavefun(wav,iter);
subplot(321); plot(xval,psi); title('Wavelet');
subplot(322); stem(wn); title('Original scaling filter');
[Lo_D, Hi_D, Lo_R, Hi_R] = orthfilt(wn);
subplot(323); stem(Lo_D); title('Decomposition low-pass filter');
subplot(324); stem(Hi_D); title('Decomposition high-pass filter');
subplot(325); stem(Lo_R); title('Reconstruction low-pass filter');
subplot(326); stem(Hi_R); title('Reconstruction high-pass filter');

Посмотреть графики вейвлетов Добеши можно и с помощью команды wavemenu и в появившемся окне с описанием разделов вейвлет-преобразования нажать кнопку Wavelet Display. Выводится следующее окно, в котором, выбрав имя wname, можно просмотреть весовые вейвлет-коэффициенты фильтров декомпозиции (Lo _D — low-pass (ФНЧ), Hi _D — high-pass (ФВЧ)) и реконструкции (Lo _R, Hi_ R) сигнала.

Низкочастотные (h) и высокочастотные (g) коэффициенты фильтра Добеши db2 задаются следующими коэффициентами [8, 9]:

h0 = (1+3)/(42) = 0,483,

h1 = (3+3)/(42) = 0,8365,

h2 = (3–3)/(42) = 0,2241,

h3 = (1–3)/(42) = –0,1294,

g0 = h3, g1 = –h2, g2 = h1, g3 = –h0.

Передаточную функцию фильтра Добеши db2 можно записать в виде [6]:

G(z) = ((1+3)+(3+3)z–1+(3–3)z–2+(1–3)z–3)/42,

G(z) = 0,483+0,8365z–1+0,2241z–2–0,1294z–3.

После умножения на масштабный множитель 256 коэффициенты округлим до ближайшего целого числа:

G(z) = 124+214z–1+57z–2–33z–3.

Для получения правильного результата фильтрации необходимо в дальнейшем предусмотреть деление на масштабный множитель 256:

y/256 = 124x0+214x1+57x2–33x3.

Вейвлет-преобразование сигналов может быть представлено как банк фильтров. Быстрый алгоритм Малла (дискретное вейвлет-преобразование) для трех уровней разложения сигнала s показан на рис. 8, где a1, a2, a3 — аппроксимирующие коэффициенты, а d1, d2 и d3 — детализирующие коэффициенты, цифры 1, 2, 3 обозначают уровни разложения сигнала. Верхняя часть схемы соответствует процедуре декомпозиции, а нижняя — процедуре реконструкции сигнала. Для получения подробной информации следует обратиться к работам [8, 9].

Быстрый алгоритм Малла для трех уровней разложения сигнала

Рис. 8. Быстрый алгоритм Малла для трех уровней разложения сигнала

Рассмотрим проектирование односкоростного (Single-Rate FIR) КИХ-фильтра Добеши в САПР Quartus II с использованием мегафункции Altera fir_compiler_v13_1 (рис. 9). Коэффициенты фильтра возьмем целочисленными со знаком 124, 214, 57, –33. Предположим, что они считываются из текстового файла и не подвергаются масштабированию (опция Coefficients Scaling None), так как эта операция была проделана ранее путем умножения на масштабный множитель 256.

Настройки мегафункции Altera fir_compiler_v13_1. Показана импульсная характеристика КИХ-фильтра (коэффициенты загружаются целочисленными, предварительно умноженные на масштабный множитель 256)

Рис. 9. Настройки мегафункции Altera fir_compiler_v13_1. Показана импульсная характеристика КИХ-фильтра (коэффициенты загружаются целочисленными, предварительно умноженные на масштабный множитель 256)

Выберем структуру фильтра на последовательной распределенной арифметике с одним уровнем конвейеризации. Предположим, что коэффициенты фильтра и отсчеты будут храниться в логических ячейках ПЛИС и блочная память использоваться не будет. Спецификация по входу следующая: одноканальный фильтр, на вход фильтра поступают целые числа со знаком, точность представления которых в дополнительном коде — девять разрядов. Спецификация по выходу: полная точность представления результата фильтрации — 18 разрядов (определяется в автоматическом режиме по соответствующей нотации, основывается на методе Actual Coefficients). Таким образом для сигнала и коэффициентов фильтра используется формат с фиксированной запятой для целых чисел со знаком (Integer Fixed-Point Representation).

На рис. 10 показан проект КИХ-фильтра Добеши db2 на четыре отвода в САПР Quartus II ver.13.1 с использованием мегафункции FIR Compiler. Латентность фильтра составляет 9 тактов синхроимпульсов (рис. 11). Анализ задействованных ресурсов ПЛИС серии Cyclone III EP3C5F256C6 при реализации КИХ-фильтра Добеши db2 на четыре отвода показан в таблице.

Проект КИХ-фильтра Добеши db2 на четыре отвода в САПР Quartus II ver.13.1 с использованием мегафункции FIR Compiler

Рис. 10. Проект КИХ-фильтра Добеши db2 на четыре отвода в САПР Quartus II ver.13.1 с использованием мегафункции FIR Compiler

Функциональное моделирование с использованием встроенного векторного редактора (импульсная характеристика КИХ-фильтра Добеши db2). Коэффициенты фильтра 124, 214, 57, –33

Рис. 11. Функциональное моделирование с использованием встроенного векторного редактора (импульсная характеристика КИХ-фильтра Добеши db2). Коэффициенты фильтра 124, 214, 57, –33

Таблица. Анализ задействованных ресурсов ПЛИС серии Cyclone III EP3C5F256C6 при реализации КИХ-фильтра Добеши db2 на четыре отвода

Ресурсы ПЛИС

Транспонированная форма (проект состоит из единственного VHDL-файла)

Мегафункция FIR Compiler (последовательная распределенная арифметика)

Общее число логических элементов (Total logic elements)

89

312

Выделенных триггеров (Dedicated Logic Registers)

89

263

Логических элементов для реализации комбинационных функций (total combinational fuctions)

33

183

Аппаратных умножителей с размерностью операндов 9×9

4

Рабочая частота в наихудшем случае с использованием TimeQuest-анализа для модели slow 1100mV 85C, МГц

196,7

250

Для учета влияния эффектов квантования на импульсную характеристику фильтра при переходе к формату с фиксированной запятой для дробных чисел со знаком (Fractional Fixed-Point Representation известен как Q‑формат) необходимо загрузить коэффициенты из файла в виде дробных чисел со знаком 0,483, 0,8365, 0,2241, –0,1294 и воспользоваться опцией Signed Binary Fractional (нотация), при этом в поле «Битовая ширина» (Bit Width) выставим формат [10]:

кнопка.

В рассматриваемом случае на знак выделяется

<Знак><Число разрядов целой части>.<Число разрядов дробной части числа>

один разряд, а на дробную часть числа — восемь разрядов, при этом общая длина разрядной сетки будет девять разрядов.

В качестве примера кратко рассмотрим нотацию Qm.n, наиболее часто применяемую для представления чисел в цифровых сигнальных процессорах, m — число разрядов целой части числа, n — число разрядов дробной части (рис. 12). Общее число разрядов N = m+n+1 для чисел со знаком. Для представления чисел со знаком в формате с фиксированной запятой Xilinx System Generator используем нотацию FIX, а для беззнаковых — UFIX. Формат FIX можно рассматривать как пару чисел M.N, где M — общее число двоичных разрядов; N — число разрядов дробной части [11].

Представление чисел в формате с фиксированной запятой

Рис. 12. Представление чисел в формате с фиксированной запятой:
а) формат Qm.n;
б) формат FIX в System Generator

Для 16‑разрядного числа N=16 можно записать: Q2.13, где 2 — число разрядов целой части числа, 13 — число разрядов дробной части числа +1 разряд на знак (СЗР, старший значащий разряд). Для целых чисел со знаком N=16 и Q15.0, для дробных чисел со знаком N=16 и Q0.15 также известен как формат Q.15 или Q15. В отечественном учебном пособии по цифровой обработке сигналов (автор А. Б. Сергиенко), основанном в большей части на документации системы Matlab, этот формат известен как формат с фиксированной запятой 1,15 (целые числа необходимо делить на коэффициент 215 = 32 768, равный числу разрядов дробной части). Применительно к нашему случаю это будет формат Q8.

В Altera ir_compiler в САПР Quartus II и в fir_compiler DSP Builder знак включен в целую часть числа. Из справочной документации можно узнать, что нотация Signed Binary Fractional представления дробных чисел со знаком в Altera fir_compiler следующая [10]:

<Знак><Число разрядов целой части>.<Число разрядов дробной части числа>

Формат представления сигнала, подлежащего фильтрации, и коэффициентов фильтра следующие:

<Знак><x1 разрядов целой части>.<y1 разрядов дробной части числа>
<Знак><x2 разрядов целой части>.<y2 разрядов дробной части числа>.

При этом полная точность представления результата фильтрации:

<Знак><i разрядов целой части>.<y1+y2 разрядов дробной части числа>,

где i=ceil(log2(число коэффициентов))+x1+x2.

Полная точность представления результата фильтрации в случае, если сигнал и коэффициенты фильтра 9‑разрядные (x1=0, x2=0, ceil(log2(4))=2):

<Знак><2+0+0>.<8+8 >,

cоставит 18 разрядов по методу Actual Coefficients (фактически задействованные разряды) и 20 по методу Bit Width Only (только битовая ширина поля).

Если же выбрать опцию Auto with Power 2 в поле Bit Width 9, то получим следующие коэффициенты в формате с фиксированной запятой: 123, 214, 57, –33, что приведет к потере точности.

 

Проектирование КИХ-фильтров Добеши с использованием мегафункции FIR Compiler в системе визуально-имитационного моделирования Matlab/Simulink

Рассмотрим разработку имитационной модели КИХ-фильтра с использованием последовательной распределенной арифметики с применением функционального блока fir_compiler_v12_1 пакета расширения Altera DSP Builder системы Matlab/Simulink (рис. 13). Функциональный блок fir_compiler_v12_1 является аналогом мегафункции FIR Compiler САПР Quartus II. Функциональный блок fir_compiler_v12_1 входит в состав библиотеки Altera DSP Builder Standard Blokset/MegaCore Function.

Функциональный блок fir_compiler_v12_1 библиотеки Altera DSP Builder Standard Blokset/MegaCore Function

Рис. 13. Функциональный блок fir_compiler_v12_1 библиотеки Altera DSP Builder Standard Blokset/MegaCore Function

Следует заметить, что в Simulink также существует функциональный блок FIR Compiler v6.3 (FIR Compiler v5.0, распределенная арифметика) пакета расширения System Generator, являющийся аналогом функции FIR Compiler v6.3 (FIR Compiler v5.0) САПР Xilinx ISE, получаемой с помощью генератора параметризированных ядер XLogiCORE IP [11].

На рис. 14 представлена модель КИХ-фильтра Добеши db2 на четыре отвода с использованием функционального блока fir_compiler_v12_1 библиотеки Altera DSP Builder, а на рис. 15 и 16 показано имитационное и функциональное моделирование импульсной характеристики.

Имитационная модель КИХ-фильтра Добеши db2 на четыре отвода с использованием функционального блока fir_compiler_v12_1

Рис. 14. Имитационная модель КИХ-фильтра Добеши db2 на четыре отвода с использованием функционального блока fir_compiler_v12_1

Имитационное моделирование импульсной характеристики в системе Matlab/Simulink КИХ-фильтра Добеши db2 на четыре отвода

Рис. 15. Имитационное моделирование импульсной характеристики в системе Matlab/Simulink КИХ-фильтра Добеши db2 на четыре отвода

Функциональное моделирование импульсной характеристики КИХ-фильтра Добеши db2 на четыре отвода в Altera-ModelSim

Рис. 16. Функциональное моделирование импульсной характеристики КИХ-фильтра Добеши db2 на четыре отвода в Altera-ModelSim

 

Выводы

Пакет расширения Altera DSP Builder системы визуально-имитационного моделирования Matlab/Simulink позволяет быстро и эффективно разрабатывать сложные устройства цифровой обработки сигналов. Так же как и пакет расширения Xilinx System Generator, обеспечивает поддержку работы со сложными функциональными блоками, являющимися аналогами мегафункций САПР ПЛИС, — например, мегафункция fir_compiler. Использование мегафункции fir_compiler при проектировании КИХ-фильтров в проектах пользователя представляется наиболее эффективным решением, так как при этом учитываются архитектурные особенности ПЛИС и влияние эффектов квантования при переходе к формату с фиксированной запятой на импульсную характеристику фильтра.

Литература
  1. Тарасов И. Проектирование для ПЛИС Xilinx: системные аспекты и уровень регистровых передач // Компоненты и технологии. 2015. № 2.
  2. Строгонов А., Цыбин С., Городков П. Проектирование последовательных КИХ-фильтров в системе визуально-имитационного моделирования Matlab/Simulink с использованием Altera DSP Builder // Компоненты и технологии. 2015. № 11.
  3.  Altera DSP Builder Handbook.Volume 1: Intro-ductio to DSP Builder. Versio № 13.1. November 2013.
  4. Строгонов А., Цыбин С., Городков П. Проектирование КИХ-фильтров в САПР ПЛИС Xilinx ISE Desig Suite // Компоненты и технологии. 2014. № 11.
  5. Строгонов А., Цыбин С., Городков П. Проектирование КИХ-фильтров на распределенной арифметике в САПР ПЛИС Xilinx ISE Desig Suite // Компоненты и технологии. 2015. № 2.
  6. Meyer-Baese U. Digital Signal Processing with Field Programmable Gate Arrays Fourth Edition. Springer, 2014. springer.com/series/4748
  7. Строгонов А., Быстрицкий А. Проектирование систолических КИХ-фильтров в базисе ПЛИС с помощью системы моделирования ModelSim-Altera // Компоненты и технологии. 2013. № 9.
  8. Яковлев А. Н. Введение в вейвлет-преобразования: Учеб. пособие. Новосибирск: Изд-во НГТУ, 2003.
  9. Шоберг А. Г. Современные методы обработки изображений: модифицированное вейвлет-преобразование. Хабаровск: Изд-во ТОГУ, 2014.
  10. Altera FIR Compiler. User Guide. Software Version: 11.0. Document Date: May 2011.
  11. Строгонов А., Цыбин С., Городков П. Разработка КИХ-фильтров в системе Xilinx System Generator САПР ISE Desig Suite // Компоненты и технологии. 2015. № 5.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *