DocsTech
/
Проекты ПЛИС на VERILOG
/

~ cd расчет фильтра баттерворта matlab и verilog

Для создания режекторного фильтра Баттерворта (Band-Stop Filter) на MATLAB, который фильтрует частоты от 500 МГц до 600 МГц, можно воспользоваться функцией butter. В данном примере будем использовать фильтр Баттерворта 4-го порядка.

Вот пример кода:
...
Копировать
% Частоты в Гц
f1 = 500e6; % Нижняя частота
f2 = 600e6; % Верхняя частота
fs = 2e9;   % Частота дискретизации (выберите достаточно высокую для точного представления сигнала)

% Нормализованные частоты (делим на половину частоты дискретизации)
Wn = [f1 f2] / (fs / 2);

% Порядок фильтра
order = 4;

% Расчет коэффициентов фильтра Баттерворта
[b, a] = butter(order, Wn, 'stop');

% Отображение коэффициентов
disp('Коэффициенты числителя (b):');
disp(b);
disp('Коэффициенты знаменателя (a):');
disp(a);

% Частотная характеристика фильтра
freqz(b, a, 1024, fs);

% Для тестирования на сигнале, создадим сигнал с шумом
t = 0:1/fs:1e-6; % Временной вектор
signal = cos(2*pi*450e6*t) + cos(2*pi*550e6*t) + cos(2*pi*650e6*t); % Сигнал с частотами 450 МГц, 550 МГц и 650 МГц

% Применение фильтра
filtered_signal = filter(b, a, signal);

% Отображение исходного и отфильтрованного сигналов
figure;
subplot(2,1,1);
plot(t, signal);
title('Исходный сигнал');
xlabel('Время (сек)');
ylabel('Амплитуда');

subplot(2,1,2);
plot(t, filtered_signal);
title('Отфильтрованный сигнал');
xlabel('Время (сек)');
ylabel('Амплитуда');

Этот код:

  1. Определяет частоты режекторного фильтра.
  2. Рассчитывает коэффициенты фильтра Баттерворта с помощью функции butter.
  3. Отображает рассчитанные коэффициенты числителя (b
    ) и знаменателя (a).>
  4. Строит частотную характеристику фильтра.
  5. Создает тестовый сигнал, содержащий частоты 450 МГц, 550 МГц и 650 МГц.
  6. Применяет фильтр к тестовому сигналу.
  7. Отображает исходный и отфильтрованный сигналы.

Этот пример демонстрирует, как создать и применить режекторный фильтр Баттерворта для удаления частотного диапазона от 500 МГц до 600 МГц.

Построение фильтра на ПЛИС на языке Verilog

Это пример построения КИХ фильтра на ПЛИС на языке Verilog. Поэтому примеру можно построить любой фильтр. Однако, в примере приводится каноническая форма, но в ваших случаях возможно эффективно построить в другой форме.
...
Копировать
module fir(data, clk, reset, out);

    parameter DN = 5; // порядок фильтра
    parameter K0 = 655; // коэф равный 0,02
    parameter K1 = 16_384; // коэф равный 0,5
    parameter K2 = 21_299; // коэф равный 0,65
    parameter K3 = 36; // коэф равный 0,0011
    parameter K4 = 3276; // коэф равный 0,1
    parameter DATA_WIDTH = 16; // Битовая длина линии данных

    input signed [(DATA_WIDTH - 1): 0] data; // линия данных
    input reset, clk; // асинхронный сброс и тактовый сигнал
    output signed [(DATA_WIDTH - 1): 0] out; // выходной сигнал

    reg [(DATA_WIDTH - 1): 0] z [(DN - 1): 0]; // память фильтра

    wire [(DATA_WIDTH*2 - 1): 0] k_w [(DN - 1): 0];

    // Задание начальных значений памяти фильтра
    initial begin
        z[0] = 0;
        z[1] = 0;
        z[2] = 0;
        z[3] = 0;
        z[4] = 0;
    end

    // перемножение z^(-1) регистра на коэф
    assign k_w[0] = z[0] * K0;
    assign k_w[1] = z[1] * K1;
    assign k_w[2] = z[2] * K2;
    assign k_w[3] = z[3] * K3;
    assign k_w[4] = z[4] * K4;

    assign out = (k_w[0] + k_w[1] + k_w[2] + k_w[3] + k_w[4]) >> (DATA_WIDTH - 1);

    always @(posedge clk, posedge reset) begin
        if (reset) begin
            // очистка памяти
            z[0] <= 0;
            z[1] <= 0;
            z[2] <= 0;
            z[3] <= 0;
            z[4] <= 0;
        end else begin
            z[0] <= data;
            z[1] <= z[0];
            z[2] <= z[1];
            z[3] <= z[2];
            z[4] <= z[3];
        end
    end

endmodule
RTL примера модуля КИХ-фильтр 5 порядка и отчет о компиляции

Рисунок 1 — RTL примера модуля КИХ-фильтр 5 порядка.

Главная
Курсы
Вебинары
Квадратный корень методом CORDIC на FPGA
Алгоритмы квадратного корня на FPGA
Делители частоты на Verilog: дробные и целые коэффициенты деления
Расчет фильтра Баттерворта MATLAB и Verilog
Интегратор: цифровой и аналоговый элемент схемы
Примеры Сдвиговых регистров в Verilog
5 Уникальных Примера Testbench на Verilog
Сдвиги в Verilog: логический, арифметический и циклический
Память RAM Verilog ПЛИС
Триггеры в Verilog: JK, RS, D и T
10 Лучших примеров кода Verilog
Закрыть