В этой статье я хочу рассказать о своих экспериментах по созданию простого параметрического цифрового КИХ фильтра на Verilog HDL . До сегодняшнего дня я старался избегать тем цифровой обработки сигналов на нашем сайте: все таки это довольно сложно. Ну а когда сложно, то приходится много времени тратить просто на самостоятельное изучение вопроса. Вот сейчас только неделю читал сайт http://www.dsplib.ru/content/filters/ch10/ch10.html - очень интересный ресурс, где все довольно лаконично и понятно. После прочтения нескольких статей с сайта dsplib.ru я понял, что теорию мне лучше не писать. А вот свое понимание и свою реализацию фильтра на Verilog я пожалуй смогу предложить.
Итак, цифровые фильтры - это устройства цифровой обработки сигналов.
Цифровой сигнал - это последовательность чисел, которые представляют собой результат измерения какой-то физической величины через одинаковые интервалы времени. Можно измерять напряжение, ток, освещенность, температуру, угол наклона, скорость и прочее.
Однако, есть нюансы.
Во-первых, говорят, что измерения нужно делать с частотой более чем в 2 раза выше, чем самая высокая частота присутствующая в спектре сигнала. Об этом говорит теорема Котельникова. Практическое следствие из этого - перед измерением сигнала нужно убедиться, что в его спектре нет гармонических составляющих с частотами выше половины частоты измерений. Значит перед измерителем требуется установить соответствующий аналоговый фильтр. Если этого не сделать, то в спектре оцифрованного сигнала могут появиться частоты, которых там раньше не было, исходный сигнал будет искажен. Это вредное явление называется "алиасинг".
Во-вторых, важна разрядность измерительного прибора, АЦП, Аналогово-Цифрового Преобразователя. Вот тут, к сожалению, я не смогу дать никаких рекомендаций. Почему-то во многих статьях, которые я прочитал, говорится о выборе частоты дискретизации по теореме Котельникова, но не говорится о разрядности АЦП. Это немного странно, так как сама теорема Котельникова подразумевает взятые отсчеты с абсолютной точностью, чего в реальной жизни быть не может. Еще нужно посмотреть на уровень шумов во входном сигнале, может вообще оказаться, что младшие разряды АЦП "дрожат". Вероятно, нет смысла брать АЦП с разрядностью допускающей "дрожание" нескольких младших битов из-за шумов во входном сигнале.
Так или иначе, после того, как входной сигнал оцифрован и представляет из себя поток чисел, его можно обрабатывать численными методами в микроконтроллерах или в ПЛИС .
Одна из задач цифровой обработки сигналов - фильтрация. Фильтрация обозначает подавление одних частот в спектре и пропускание/усиление других. Про спектр я писал .
Существуют фильтры низких частот (low-pass filter), которые пропускают только частоты ниже заданной частоты среза. Есть фильтры высоких частот (high-pass), которые наоборот, подавляют частоты ниже частоты среза. Бывают полосовые фильтры, которые пропускают или подавляют только частоты в заданной полосе (band-pass & band-stop filters).
По внутреннему устройству, как мне кажется, самые простые - это КИХ фильтры. КИХ фильтр - это фильтр с конечной импульсной характеристикой. В англоязычной литературе КИХ - это FIR, то есть Finite Impulse Response filter.
Структура этого фильтра вот такая:
Здесь блоки Z -1 - это линии задержки. На практике цепочка блоков Z -1 - это просто последовательность регистров для хранения данных. По каждому фронту тактовой частоты, которая и является частотой дискретизации, входные данные движутся от первого регистра к последующим. Фильтр может содержать цепочку регистров произвольной длины. Дополнительно, от каждого блока Z -1 идет передача данных на умножитель. Каждый из умножителей умножает свои собственные данные на некоторую константу. Потом, все результаты умножения складываются и вот получается отфильтрованный сигнал. Особая наука - это рассчитать длину фильтра и коэффициенты для умножителей. От коэффициентов зависит характеристика фильтра.
КИХ фильтр имеет несколько важных особенностей:
- его поведение устойчиво и предсказуемо;
- при желании можно реализовать очень быстродействующий фильтр, так как в его алгоритме данные движутся только вперед. Довольно легко сделать конвейерную обработку данных (pipeline).
Поясню, как я понимаю оба этих пункта.
Про устойчивость и предсказуемость. Если посмотреть внимательно на структуру фильтра, то становится понятно движение данных в нем. Если входные данные 16-ти битные и коэффициенты для умножителей 16-ти битные, то после умножения результат становится 32-х битный. Далее идет суммирование. Сложение двух 32-х битных чисел дает 33-х битное число. Зная длину фильтра можно точно сказать, какой разрядности будет результат. Фильтр длиной 4 будет на выходе иметь 34-х битное число и точка. Математические операции внутри фильтра не накапливают ошибку, не приводят к переполнению результата. Некоторые другие фильтры, такие как БИХ (фильтр с Бесконечно Импульсной Характеристикой, IIR - Infinite Impulse Response filter) содержат цепи обратной связи. например, вот такие:
Вот тут все иначе. Здесь есть сумматор, который складывает входной сигнал с задержанным и умноженным на некоторый коэффициент выходной сигнал. У сумматора фиксированная разрядность. Понятно, что такой вычислитель может легко переполниться. Вот подать на такую цепь сигнал с постоянной составляющей, то через некоторое время гарантированно произойдет переполнение аккумулятора результата. Вот уже получается непредсказуемость и неустойчивость. Применять БИХ фильтры нужно с осторожностью, зараннее зная характер входного сигнала.
Теперь о быстродействии КИХ фильтра. Поскольку данные движутся только вперед, то довольно просто использовать преимущества конвейерной обработки. Например, пока умножители умножают очередные данные из задерживающих регистров, сумматор может вычислять сумму от предыдущих результатов умножителей. И сами умножители могут использовать внутренний pipeline и сумматор может использовать внутренний pipeline. Да, результат из фильтра получится задержанным на несколько тактов, но только и всего. Если же посмотреть на звено БИХ фильтра, как на рисунке выше, то понятно, что из-за обратной связи складывать нельзя, пока умножитель не вычислит свой результат.
Из структурной схемы КИХ фильтра понятно почему он называется фильтром с конечной импульсной характеристикой. Если в потоке входных чисел среди всех нулей встретится одна единичка, то есть одиночный импульс, то отклик фильтра на это импульс пройдет/закончится как только этот импульс покинет последнюю линию задержки. В БИХ фильтрах наоборот - одиночный импульс будет возвращаться на вход через цепь обратной связи бесконечно долго. Отсюда БИХ - это фильтр с бесконечной импульсной характеристикой.
- http://www.micromodeler.com/dsp/
Воспользуемся инструментом TFilter.
Например, я хочу построить цифровой фильтр нижних частот. Частота дискретизации 20МГц. Хочу на частотах выше 2х МГц значительно подавить все частоты, не менее -40Дб.
Ввожу требуемые мне данные в полях ввода внизу страницы и нажимаю кнопку "Design FIlter". Через пару секунд мой фильтр рассчитан и результат справа в окошке, как список коэффициентов для умножителей: -510, -520, -625, -575, -287, 306, 1232, 2467, 3927, 5477, 6948, 8162, 8962, 9241, 8962, 8162, 6948, 5477, 3927, 2467, 1232, 306, -287, -575, -625, -520, -510. Всего коэффициентов 27 - значит вот такая длина фильтра и будет.
Например, я хочу построить полосовой фильтр. Частота дискретизации 20МГц. Пусть фильтром нужно подавлять частоты ниже 1МГц и выше 4х МГц.
Ввожу данные, делаю рассчет, получаю коэффициенты фильтра: -801, -1026, -210, 1914, 4029, 3905, 330, -5174, -8760, -7040, -152, 7700, 11130, 7700, -152, -7040, -8760, -5174, 330, 3905, 4029, 1914, -210, -1026, -801. Здесь длина фильтра получилась 25 тапов.
Вот коэффициенты фильтров есть. Что с ними делать? Хорошо бы сделать параметрический модуль на Verilog HDL, чтобы его можно было легко настраивать. По логике, параметры модуля фильтра - это его длина, то есть количество линий задержки, разрядность входных данных и разрядность коэффициентов для умножителей.
Если разрядность входных данных - это IWIDTH, а число регистров в цепочке линии задержки - это TAPS, то довольно просто описать саму цепочку регистров:
module fir (clk, coefs, in, out);
parameter IWIDTH = 16; //input data (signal) width
parameter TAPS = 2; //number of filter taps
input wire clk;
input wire in;
genvar i;
generate
for (i=0; i
begin:tap
//make tap register chain
reg r=0;
if (i==0)
begin
//1st tap takes signal from input
always @(posedge clk)
r <= in;
end
else
begin
//tap reg takes signal from prev tap reg
always @(posedge clk)
tap[i].r <= tap.r;
end
end
endgenerate
endmodule
Конструкция generate-endgenerate языка Verilog позволяет динамически создать нужное число регистров и посоединять их как надо в цепочку. Получится вот так:
Таким образом, длина фильтра может быть задана через параметр модуля Verilog. Аналогичным образом, внутри цикла for() внутри generate-endgenerate создаются умножители:
genvar i;
generate
for (i=0; i
begin :tap
........
//get tap multiplication constant coef
wire c;
assign c = coefs[((TAPS-1-i)*32+CWIDTH-1):(TAPS-1-i)*32];
//calculate multiplication and fix result in register
reg m;
always @(posedge clk)
m <= $signed(r) * $signed(c);
............
Таким образом, дополнительно к регистрам линии задержки будут сформированы и подключены умножители со своими коэффициентами:
Я решил, что коэффициенты для умножителей можно передавать в модуль объединенные в шину {...} как входной сигнал, вот так:
fir #(.TAPS(27)) fir_lp_inst(
.clk(tb_clk),
.coefs({
-32"d510,
-32"d520,
.......
32"d575,
32"d625,
-32"d520,
-32"d510
}),
.in(),
.out()
);
Здесь каждый коэффициент фильтра занимает в шине фиксированное число бит 32 (решил, что этого должно хватить). Но из этих 32х бит модуль выберет нужное объявленное число бит для коэффициентов. Например, parameter CWIDTH = 16; Напомню, что от количества бит в коэффициенте для умножения зависит в конечном итоге ширина результата.
Для простоты реализации я пока не стал делать pipeline для сумматоров. Их можно было бы сделать побыстрее, например, складывать значения из умножителей попарно, потом складывать попарно результаты предыдущих парных сложений и так далее.. Пока я сделал один большой сумматор, как одну большую и сложную комбинаторную функцию. Наверняка в ПЛИС это не сможет работать на высоких частотах, но пока я на это закрываю глаза. Сделать бы чтобы просто работало.
Полный текст модуля будет выглядеть вот так:
Module fir (clk, coefs, in, out);
parameter IWIDTH = 16; //input data (signal) width
parameter CWIDTH = 16; //tap coef data width (should be less then 32 bit)
parameter TAPS = 2; //number of filter taps
localparam MWIDTH = (IWIDTH+CWIDTH); //multiplied width
localparam RWIDTH = (MWIDTH+TAPS-1); //filter result width
input wire clk;
input wire in;
input wire coefs; //all input coefficient concatineted
output wire out; //output takes only top bits part of result
genvar i;
generate
for(i=0; i Если будет время, то постараюсь улучшить этот модуль, добавить pipeline сумматоров. Теперь главный вопрос - а как убедиться, что это вообще работает? Ну как? да просто! - есть симулятор Verilog. Напишу тестбенч, который будет иммитировать входной сигнал на разных частотах и посмотрю отклик на выходе фильтра. Даже более того. Если тестбенч будет синтезировать входной сигнал как синусоиду и если плавно менять ее частоту в некотором диапазоне, от низкой частоты к более высокой, то наблюдая отклик на выходе фильтра я прямо увижу его амплитудно-частотную характеристику! Структура программы testbench.v: Синусоиду для тестбенча я уже когда-то показывал . Возьму тот старый код, немного подправлю его и сделаю плавное изменение частоты от 100кГц до 4МГц с шагом в 1000Гц. Внутрь тестбенча установлю два экземпляра модуля своего fir() фильтра, но с разными коэффициентами, для фильтра нижних частот и для полосового фильтра. Весь код тестбенча вот здесь:
`timescale 1ns / 1ns
module testbench();
reg tb_clk;
initial tb_clk=0;
always
#25 tb_clk = ~tb_clk;
real PI=3.14159265358979323846;
real last_time=0; //Sec
real current_time=0; //Sec
real angle=0; //Rad
real frequency=100; //Hz
integer freq_x100kHz=0; //*100kHz
reg signed sin16;
//function which calculates Sinus(x)
function real sin;
input x;
real x;
real x1,y,y2,y3,y5,y7,sum,sign;
begin
sign = 1.0;
x1 = x;
if (x1<0)
begin
x1 = -x1;
sign = -1.0;
end
while (x1 > PI/2.0)
begin
x1 = x1 - PI;
sign = -1.0*sign;
end
y = x1*2/PI;
y2 = y*y;
y3 = y*y2;
y5 = y3*y2;
y7 = y5*y2;
sum = 1.570794*y - 0.645962*y3 +
0.079692*y5 - 0.004681712*y7;
sin = sign*sum;
end
endfunction
task set_freq;
input f;
real f;
begin
frequency = f;
freq_x100kHz = f/100000.0;
end
endtask
always @(posedge tb_clk)
begin
current_time = $realtime;
angle = angle+(current_time-last_time)*2*PI*frequency/1000000000.0;
//$display("%f %f",current_time,angle);
while (angle > PI*2.0)
begin
angle = angle-PI*2.0;
end
sin16 = 32000*sin(angle);
last_time = current_time;
end
//low-pass filter
wire out_lowpass;
fir #(.TAPS(27)) fir_lp_inst(.clk(tb_clk),
.coefs({
-32"d510,
-32"d520,
-32"d625,
-32"d575,
-32"d287,
32"d306,
32"d1232,
32"d2467,
32"d3927,
32"d5477,
32"d6948,
32"d8162,
32"d8962,
32"d9241,
32"d8962,
32"d8162,
32"d6948,
32"d5477,
32"d3927,
32"d2467,
32"d1232,
32"d306,
-32"d287,
-32"d575,
-32"d625,
-32"d520,
-32"d510
}),
.in(sin16),
.out(out_lowpass));
//band-pass
wire out_bandpass;
fir #(.TAPS(25)) fir_bp_inst(.clk(tb_clk),
.coefs({
-32"d801,
-32"d1026,
-32"d210,
32"d1914,
32"d4029,
32"d3905,
32"d330,
-32"d5174,
-32"d8760,
-32"d7040,
-32"d152,
32"d7700,
32"d11130,
32"d7700,
-32"d152,
-32"d7040,
-32"d8760,
-32"d5174,
32"d330,
32"d3905,
32"d4029,
32"d1914,
-32"d210,
-32"d1026,
-32"d801
}),
.in(sin16),
.out(out_bandpass));
integer i;
real f;
initial
begin
$dumpfile("out.vcd");
$dumpvars(0,testbench);
f=100000;
for(i=0; i<4000; i=i+1)
begin
set_freq(f);
#1000;
f=f+1000;
end
$finish;
end
endmodule
Симуляцию провожу в icarus verilog . В результате симуляции программой vvp получается выходной файл с временными диаграммами сигналов out.vcd. Их можно посмотреть в программе GtkWave. Вот что видно: входной сигнал sin16 для обоих фильтров меняет частоту, она растет: На широком диапазоне частот от сотен килогерц до нескольких мегагерц видно какие частоты пропускаются фильтрами, а какие подавляются: Входной сигнал для sin16 равномерен по амплитуде во всей полосе частот. "Рваные" сигналы в области низких частот - это просто GtkWave так отрисовывает, при увеличении (zoom) там все нормально выглядит. А вот выходные сигналы, такие какие и положены быть на выходе фильтров. Фильтр низких частот от 500кГц начинается плавный спад амлитуды синусоиды out_lowpass и после 2х МГц фильтр уже практически не пропускает. Полосовой фильтр хорошо пропускает где-то в полосе 2-3МГц, а по краям пологие спады (сигнал out_bandpass). Чтобы внимательно рассмотреть получившуюся картину нужно использовать специальные возможности просмотра в программа GtkWave. Вот несколько полезных советов: Еще совет: GtkWave может отображать аналоговый сигнал отмасштабированный по высоте с учетом всех выборок симуляции по времени или с учетом только выборок, которые помещаются в окне. Если поставить Data Format => Analog => Resizing => Screen Data, то есть если масштабирование по вертикали будет учитывать только помещающиеся в окне выборки, то можно увидеть боковые лепестки амплитудно-частотной характеристики фильтра:
В начало
Цифровые фильтры
(Лекция)
По
виду импульсной характеристики цифровые фильтры делятся на два больших класса: ·
Компилирую:
> iverilog -o qqq testbench.v fir.v
Симулирую:
> vvp qqq
Смотрю временные диаграммы в GtkWave:
> gtkwave out.vcd
КИХ - фильтры характеризуются выражением:
· Фильтры с бесконечной импульсной характеристикой (БИХ - фильтры, рекурсивные фильтры) используют один или более своих выходов в качестве входа, то есть образуют обратную связь. Основным свойством таких фильтров является то, что их импульсная переходная характеристика имеет бесконечную длину во временной области, а передаточная функция имеет дробно-рациональный вид.
БИХ - фильтры характеризуются выражением:
Отличие КИХ – фильтров от БИХ – фильтров заключается в том, что у КИХ – фильтроввыходная реакция зависит от входных сигналов, а у БИХ – фильтров выходная реакция зависит от текущего значения.
Импульсная характеристика – это реакция схемы на единичный сигнал.
Е диничный сигнал определяется следующим образом:
Таким образом, единичный сигнал только в одной точке равен единице – в точке начала координат.
Задержанный е диничный сигнал определяется следующим образом:
Таким образом, задержанный единичный сигнал задерживает на k периодов дискретизации.
Сигналы и спектры
Дуальность (двойственность) представления сигналов.
Все сигналы можно представить во временной или частотной плоскости.
Причем,частотных плоскостей – несколько.
Временная плоскость. |
Преобразования. |
Частотная плоскость. |
Для просмотра сигнала во временной плоскости существует прибор: Представим, что здесь есть достаточно длинный синусоидальный сигнал (в 1 сек. 1000 раз повторилась синусоида): Возьмем сигнал с частотой, в два раза больше: Сложим эти сигналы. Получим не синусоиду, а искаженный сигнал: |
Преобразования из временной плоскости в частотную плоскость производятся с помощью преобразований Фурье. |
Для просмотра сигнала в частотной плоскости существует прибор: Частота циклическая или круговая ( f ). Частотная плоскость покажет засечку: Величина засечки пропорциональна амплитуде синусоиды, а частота: f 1 = Для второго сигнала частотная область покажет другую засечку: Во временной областисуммарного сигнала появится2 засечки: |
Оба представления сигнала равноценны и пользуются либо первым, либо другим представлением, в зависимости от того, какой удобней.
Преобразования из временной плоскости в частотную плоскость может производиться различными путями. Например: с помощью преобразований Лапласа или с помощью преобразований Фурье.
Три формы записи рядов Фурье.
Существует три формы записи рядов Фурье:
· Синус - косинусная форма.
· Вещественная форма.
· Комплексная форма.
1.) В синус - косинусной форме ряд Фурье имеет вид:
Входящие в формулу кратные частоты kω 1 называются гармониками ; гармоники нумеруются в соответствии с индексом k ; частота ω k = kω 1 называется k -й гармоникой сигнала.
Это выражение говорит о следующем:что любую периодическую функцию можно представить в виде суммы гармоник, где:
Где
T – период повторений этой функции;
ω - круговая частота.
, где
t – текущее время;
T – период.
При разложении по Фурье самое главное – это периодичность. За счет неё происходит дискретизация по частоте, начинается некотороеколичество гармоник.
Для того, чтобы установить возможность тригонометрического разложения для заданной периодичной функции, нужно исходить из определенного набора коэффициентов. Прием для их определения придумал во второй половине XVIII века Эйлер и независимо от него в начале XIX века - Фурье.
Три формулы Эйлера для определения коэффициентов:
; ;
Формулы Эйлера не нуждаются ни в каких доказательствах. Эти формулы точные при бесконечном количестве гармоник. Ряд Фурье – усеченный ряд, т.к. нет бесконечного количества гармоник. Коэффициент усеченного ряда вычисляется по тем же формулам, что и для полного ряда. В этом случае, средняя квадратичная ошибка – минимальна.
Мощность гармоник падает с увеличением их номера. Если добавить/отбросить некоторые гармонические составляющие, то перерасчет остальных членов (других гармоник) не требуется.
Практически все функции являются четными или нечетными:
ЧЁТНАЯ ФУНКЦИЯ |
НЕЧЁТНАЯ ФУНКЦИЯ |
Характеризуется уравнением: Например, функция Cos : у которой: t = −t Четная функция симметрична относительно оси ординат. Если функция четная, то все синусные коэффициенты b k будут равны нулю и в формуле ряда Фурье будут присутствовать только косинусные слагаемые. |
Характеризуется уравнением: Например, функция Sin : Нечетная функция симметрична относительно центра. Если функция нечетная, то все косинусные коэффициенты a k будут равны нулю и в формуле ряда Фурье будут присутствовать только синусные слагаемые. |
2.) Вещественная форма записи ряда Фурье.
Некоторое неудобство синусно-косинусной формы ряда Фурье состоит в том, что для каждого значения индекса суммирования k (т.е. для каждой гармоники с частотой kω 1) в формуле фигурирует два слагаемых – синус и косинус. Воспользовавшись формулами тригонометрических преобразований, сумму этих двух слагаемых можно трансформировать в косинус той же частоты с иной амплитудой и некоторой начальной фазой:
, где
;
Если S (t ) является четной функцией, фазы φ могут принимать только значения 0 и π , а если S (t ) - функция нечетная, то возможные значениядля фазы φ равны + π /2.
3.) Комплексная форма записи ряда Фурье.
Данная форма представления ряда Фурье является, пожалуй, наиболее употребимой в радиотехнике. Она получается из вещественной формы представлением косинуса в виде полусуммы комплексных экспонент (такое представление вытекает из формулы Эйлера e jθ = Cosθ + jSinθ ):
Применив данное преобразование к вещественной форме ряда Фурье, получим суммы комплексных экспонент с положительными и отрицательными показателями:
А теперь будем трактовать экспоненты со знаком «минус» в показателе как члены ряда с отрицательными номерами. В рамках этого же общего подхода постоянное слагаемое a 0 /2 станет членом ряда с нулевым номером. В результате получится комплексная форма записи ряда Фурье:
Формула расчета коэффициентов C k ряда Фурье:
Если S (t ) является четной функцией, коэффициенты ряда C k будут чисто вещественными , а если S (t ) - функция нечетная , коэффициенты ряда окажутся чисто мнимыми .
Совокупность амплитуд гармоник ряда Фурье часто называют амплитудным спектром , а совокупность их фаз – фазовым спектром .
Спектром амплитуд является действительная часть коэффициентов C k ряда Фурье:
Re (C k ) – спектр амплитуд.
Спектр прямоугольных сигналов.
Рассмотрим сигнал в виде последовательности прямоугольных импульсов с амплитудой A , длительностью τ и периодом повторения T . Начало отсчета времени примем расположенным в середине импульса.
Данный сигнал является четной функцией, поэтому для его представления удобнее использовать синусно-косинусную форму ряда Фурье – в ней будут присутствовать только косинусные слагаемые a k , равные:
Из формулы видно, что длительность импульсов и период их следования входят в нее не обособлено, а исключительно в виде отношения. Этот параметр – отношение периода к длительности импульсов – называют скважностью последовательности импульсов и обозначают буквой: g : g =T /τ. Введем этот параметр в полученную формулу для коэффициентов ряда Фурье, а затем приведем формулу к виду Sin (x )/x :
Примечание: В зарубежной литературе вместо скважности используется обратная величина, называемая коэффициентом заполнения (duty cycle ) и равная τ /T .
При такой форме записи становится хорошо видно, чему равно значение постоянного слагаемого ряда: поскольку при x → 0Sin (x )/x →1, то
Теперь можно записать и само представление последовательности прямоугольных импульсов в виде ряда Фурье:
Амплитуды гармонических слагаемых ряда зависят от номера гармоники по закону Sin (x )/x .
График функции Sin (x )/x имеет лепестковый характер. Говоря о ширине этих лепестков, следует подчеркнуть, что для графиков дискретных спектров периодических сигналов возможны два варианта градуировки горизонтальной оси – в номерах гармоник и в частотах.
На рисунке градуировка оси соответствует номерам гармоник, а частотные параметры спектра нанесены на график с помощью размерных линий.
Итак, ширина лепестков, измеренная в количестве гармоник, равна скважности последовательности (при k = ng имеем Sin (π k / g ) = 0, если n ≠ 0). Отсюда следует важное свойство спектра последовательности прямоугольных импульсов – в нем отсутствуют (имеют нулевые амплитуды) гармоники с номерами, кратными скважности.
Расстояние по частоте между соседними гармониками равно частоте следования импульсов - 2π /T . Ширина лепестков спектра, измеренная в единицах частоты, равна 2π /τ , т.е. обратно пропорциональна длительности импульсов. Это проявление общего закона – чем короче сигнал, тем шире его спектр.
Вывод : для любого сигнала известны его разложения в ряд Фурье. Зная τ и T можем посчитать сколько гармоник нужно, чтобы передать мощность.
Методы анализа линейных систем с постоянными коэффициентами.
Задача в постановке:
Имеется линейная система (не зависит от амплитуды сигнала):
Необходимо записать дифференциальное уравнение для этой системы.
Это типичная задача электротехники. Имеется мощный способ решения данной задачи во временной области.
В общем виде:
Порядок уравнения зависит от числа реактивных элементов.
Может быть записано в виде системы уравнений первой степени.
Пример :
U R = IR
U C =
I = C
U R + U C = X(t)
RC + U C = X (t )
U C – является Y выхода, поэтому: RC + U ВЫХ. = X (t )
Дальнейшее решение сводится к решению сначала однородного уравнения, а затем неоднородного.
Это решение немного упрощается при переводе из временной плоскости в другую плоскость комплексной переменной. Перевод из временной плоскости в комплексную плоскость производится прямым преобразованием Лапласа.
RCY " + Y = X (t )
Вычисляется разностное уравнение.
Прямое преобразование Лапласа.
Преобразование Лапласа - интегральное преобразование, связывающее функцию S (p ) комплексного переменного (изображение ) с функцией s (x ) действительного переменного (оригинал ).
Преобразования Лапласа играют очень важную роль при исследовании систем, описываемых линейными дифференциальными уравнениями. С помощью прямого преобразования Лапласа можно перейти от дифференциальных уравнений к алгебраическим, решить их в алгебраической форме, а затем с помощью обратного преобразования получить искомый результат. Аналогичный результат достигается при решении линейных разностных уравнений при использовании аппарата Z - преобразования.
Прямое преобразование Лапласа осуществляется по формуле: , где- комплексная переменная, где σ - затухание.
Пример :
Реакция системы на поданную на вход дельта-функцию называется импульсной характеристикой системы.
Реакция системы на поданную на вход функцию единичного скачка называется переходной характеристикой .
Производная по времени какой-то функции - есть умножение этой функции на p :
А интеграл по времени какой-то функции - есть деление этой функции на p :
В соответствии с этим, выражение:RCY " + Y = X (t ) запишется так: RCPY + Y = X (p )
Разрешая относительно Y , получим: Y (RCP + 1)= X (p )
Коэффициент передачи этого уравнения:
В плоскости комплексного переменного, это:
Здесь XP – взяли в качестве тестовой единичной функции. Значит это импульсная характеристика в P –области.
В числителе нет переменных. Корни числителя называются нулями функции передачи.
В точках нулей функция передачи равна нулю, а в точках полюсов функция передачи стремится к бесконечности.
Комплексная частота в плоскости комплексного переменного – это самый простой способ проверки устойчивости системы. Система называется устойчивой , если при нулевом входном сигнале выходной сигнал затухает при любых начальных условиях. Линейная система является устойчивой тогда и только тогда, когда полюсы её функции передачи лежат в левой комплексной полуплоскости.
Преобразование Фурье.
Преобразование Фурье ставит в соответствие сигналу, заданному во времени, его спектральную функцию. При этом осуществляется переход из временной области в частотную .
Преобразование Фурье дает основание для получения частотной и фазовой характеристик (хотим получить огибающую спектра). Преобразование Фурье – это частный случайпреобразования Лапласа при σ = 0.
Например:
Получим частотную и фазовую характеристики для рассмотренной выше простой цепочки, у которой коэффициент передачи:
Преобразование Фурье отличается от преобразования Лапласа тем, что у него: p = jω , поэтому наше выражение примет следующий вид:
Частотная характеристика – это зависимость модуля коэффициента передачи от частоты.
Умножим числитель и знаменатель этой дроби на комплексное число (1-jωRC ) (предполагая, что значение дроби от этого не изменится):
Отсюда, модуль коэффициента передачи определяется выражением:
При нуле - модуль коэффициента передачи равен единице, а с увеличением частоты он начинает падать:
При двух значениях ФЧХ будет иметь вид:
Таким образом, для анализа какой-либо системы необходимо построить все характеристики.
Дискретное преобразование Лапласа.
Все рассмотренное ранее - относилось к непрерывным функциям. Если в непрерывную функцию вместо t подставить kT и вместо интеграла подставить сумму, то будет преобразование Лапласа.
Преобразование Лапласа применяется в сфере систем
компьютерного управления. Дискретное преобразование Лапласа может быть
применено для решётчатых функций.
Решётчатая функция – это функция, значения которой
определены только в дискретные моменты времени
kT
, где
k
-
целое число, а
T
- период дискретизации.
Дискретное преобразование Лапласа даёт возможность записать коэффициент
передачи. Различают
D
-преобразование и
Z
-преобразование.
D – преобразование :
Z – преобразование:
Z-преобразование трансформирует полуплоскость в некоторую другую плоскость Z.Z-преобразование - это преобразование Лапласа решётчатой функции, производимое с помощью замены переменных:
Умножение на Z −1 – это сдвиг на один период дискретизации.
Возьмем исходное выражение, с которого мы начинали:
Отсюда вычислительная процедура рисуется следующим образом:
Согласно свойствам z-преобразования, задержка дискретной последовательности на один такт соответствует умножению ее z-преобразования на z −1.Поэтому элементы памяти, осуществляющие такую задержку, обозначены на структурной схеме как «z −1».
Количество используемых предыдущих отсчетов называется порядком фильтра .
Некоторое количество предыдущих отсчетов входного сигнала хранится в ячейках памяти, которые образуют дискретную линию задержки. Эти отсчеты умножаются на коэффициенты bk и суммируются, формируя выходной отсчет y(n).
Так как при вычислениях не используются предыдущие отсчеты выходного сигнала, в схеме отсутствуют обратные связи. Поэтому такие фильтры называются нерекурсивными . При подаче на вход единичного импульса, он будет перемещаться по линии задержки, умножаться на коэффициенты b 0 , b 1 , b 2 … и проходить на выход устройства (ведь все остальные входные сигналы сумматора при этом равны нулю). Очевидно, что в реальном устройстве линия задержки содержит конечное число элементов, поэтому импульсная характеристика нерекурсивного фильтра также является конечной по длительности. Это обусловило еще одно название таких фильтров – фильтры с конечной импульсной характеристикой (КИХ-фильтры).
Структурная схема программного обеспечения для КИХ- фильтра:
Программа:
ORDFIL EQU 40; фильтр сорокового порядка.
BUFFER M , ORDFIL ; проверка возможности создания циклического буфера.
COEFFS :DS b 0, b 1, b 3
DSb4, b5, b6
…………………
DS b 37, _VVOD EQU Y : FFC 0; определяем порты ввода.
PORT _VIVOD EQU Y : FFC 1; определяем порты вывода.
ORG P : 0; организация P -памяти.
RESET :JMP START ; безусловный переход на метку START .
P :100; программа начнется с сотой ячейки.
START :MOVE BUF _X , R 0; начальный адрес X вводим в R 0.
MOVE # ORDFIL ─1, M 0 ;перех.к мод.ариф.(зап.число на 1мен.,чем поряд.этого буф.)
MOVE # COEFFS , R 4; организация цикл.буфера для коэффиц. в Y -памяти.
MOVE # M 0, M 4 ; т.к.длина должна совпадать, то перес. из M 0 в M 4.
CLRA ; обнулим аккумулятор.
REP #ORDFIL ; повторить цепочечную операцию.
MOVE A , X : (R 4) +; испол.автоинкремент и все ячейки буф.обнуляем.
LOOP : MOVEP Y : PORT _VVOD , X ─ (R 0) ;побайт.пересылка показаний(послед.умн.на b 0 ).
REP #ORDFIL ─1; повт. цепочечную операцию(39раз умн.без округления)
MAC X 0,Y 0,A X :(R 0)+, X 0Y :(R 4)+, Y 0 ;умн.X 0наY 0, рез.в ак; подг.сл.опер.
MACRX0,Y0,A
MOVEP A , Y : PORT _VIVOD ; побайтная пересылка содерж. аккумулятора.
JMP LOOP ; безусловный переход на метку LOOP .
Порядок проектирования цифровых фильтров.
Порядок проектирования цифровых фильтров прежде всего связан с типом фильтра по линии частотных характеристик. Одной из часто возникающих на практике задач является создание фильтров, пропускающих сигналы в определенной полосе частот и задерживающих остальные частоты. Имеется четыре типа:
1.) Фильтры нижних частот (ФНЧ; английский термин – low - pass filter ), пропускающие частоты, меньшие некоторой частоты среза ω 0.
2.) Фильтры верхних частот (ФВЧ; английский термин – high - pass filter ), пропускающие частоты, большие некоторой частоты среза ω 0.
3.) Полосовые фильтры (ПФ; английский термин – band - pass filter ), пропускающие частоты в некотором диапазоне ω 1…. ω 2 (они могут также характеризоваться средней частотой ω 0 = (ω 1 + ω 2 ω = ω 2 – ω 1 ).
4.) Режекторные фильтры (другие возможные названия – заграждающий фильтр, фильтр-пробка, полосно-задерживающий фильтр; английский термин – band - stop filter ), пропускающие на выход все частоты, кроме лежащих в некотором диапазоне ω 1…. ω 2 (они также могут характеризоваться средней частотой ω 0 = (ω 1 + ω 2 )/2 и шириной полосы пропускания Δ ω = ω 2 – ω 1 ).
Идеальная форма АЧХ фильтров этих четырех типов:
Однако, такая идеальная (прямоугольная) форма АЧХ не может быть физически реализована. Поэтому в теории аналоговых фильтров разработан ряд методов аппроксимации прямоугольных АЧХ.
Кроме того, рассчитав ФНЧ, можно несложными преобразованиями изменить его частоту среза, превратить его в ФВЧ, полосовой либо режекторный фильтр с заданными параметрами. Поэтому расчет аналогового фильтра начинается с расчета так называемого фильтра-прототипа , представляющего собойФНЧ с частотой среза, равной 1 рад/с.
1.) Фильтр Баттерворта:
Функция передачи фильтра-прототипа Баттерворта (Butterworth filter ) не имеет нулей, а её полюсы равномерно расположены на s -плоскости в левой половине окружности единичного радиуса.Для фильтра Баттерворта частота среза определяется по уровню 1/ . Фильтр Баттерворта обеспечивает максимально плоскую вершину в полосе пропускания. |
|
2.) Фильтр Чебышева первого рода:
Функция передачи фильтра Чебышева первого рода (Chebyshev type I filter ) также не имеет нулей, а её полюсы расположены в левой половине эллипса на s -плоскости. Для фильтра Чебышева первого рода частота среза определяется по уровню пульсаций в полосе пропускания.По сравнению с фильтром Баттерворта того же порядка, фильтр Чебышева обеспечивает более крутой спад АЧХ в области перехода от полосы пропускания к полосе задерживания. |
|
3.) Фильтр Чебышева второго рода:
Функция передачи фильтра Чебышева второго рода (Chebyshev type II filter ), в отличие от предыдущих случаев, имеет и нули, и полюсы. Фильтры Чебышева второго рода называют ещё инверсными фильтрами Чебышева (inverse Chebyshev filter ). Частотой среза фильтра Чебышева второго родасчитается не конец полосы пропускания, а начало полосы задерживания . Коэффициент передачи фильтра на нулевой частоте равен 1, на частоте среза – заданному уровню пульсаций в полосе задерживания. При ω → ∞ коэффициент передачи равен нулю при нечетном порядке фильтра и уровню пульсаций – при четном. При ω = 0 АЧХ фильтра Чебышева второго рода является максимально плоской. |
|
4.) Эллиптические фильтры:
Эллиптические фильтры (фильтры Кауэра; английские термины – elliptic filter , Cauer filter ) в некотором смысле объединяют в себе свойства фильтров Чебышева первого и второго рода, поскольку АЧХ эллиптического фильтра имеет пульсации заданной величины, как в полосе пропускания, так и в полосе задерживания. За счет этого удается обеспечить максимально возможную (при фиксированном порядке фильтра) крутизну ската АЧХ, т.е. переходной зоны между полосами пропускания и задержания. Функция передачи эллиптического фильтра имеет как полюсы, так и нули. Нули, как и в случае фильтра Чебышева второго рода, являются чисто мнимыми и образуют комплексно-сопряженные пары. Количество нулей функции передачи равно максимальному четному числу, не превосходящему порядка фильтра. |
Функции MATLAB для расчета фильтров Баттерворта, Чебышева первого и второго рода, а также эллиптических фильтров, позволяют рассчитывать как аналоговые, так и дискретные фильтры. Функции расчета фильтров требуют задания в качестве входных параметров порядка фильтра и его частоты среза.
Порядок фильтра зависит:
- от допустимой неравномерности в полосе пропускания
- от величины зоны неопределенности. (Чем меньше зона неопределенности, тем круче спад частотной характеристики).
Для КИХ-фильтров порядок составляет несколько десятков или сотен, а для БИХ-фильтров порядок не превышает несколько единиц.
Пиктограммы дают возможность посмотреть все коэффициенты. Проектирование фильтра производится на одном окне.
Фильтр с конечной импульсной характеристикой (нерекурсивный фильтр, КИХ-фильтр, FIR-фильтр) - один из видов линейных электронных фильтров, характерной особенностью которого является ограниченность по времени его импульсной характеристики (с какого-то момента времени она становится точно равной нулю). Такой фильтр называют ещё нерекурсивным из-за отсутствия обратной связи. Знаменатель передаточной функции такого фильтра - некая константа. Нерекурсивные фильтры. При нулевых значениях коэффициентов a m уравнение (2.1.2) переходит в уравнение линейной дискретной свертки функции x(k) с оператором b n:
y(k) = b n x(k-n). (2.1.3)
Значения выходных отсчетов свертки (2.1.3) для любого аргумента k определяются текущим и "прошлыми" значениями входных отсчетов. Такой фильтр называется нерекурсивным цифровым фильтром (НЦФ). Интервал суммирования по n получил название "окна" фильтра. Окно фильтра составляет N+1 отсчет, фильтр является односторонним каузальным, т.е. причинно обусловленным текущими и "прошлыми" значениями входного сигнала, и выходной сигнал не может опережать входного. Каузальный фильтр может быть реализован физически в реальном масштабе времени. При k При обработке данных на ЭВМ ограничение по каузальности снимается. В программном распоряжении фильтра могут находиться как "прошлые", так и "будущие" значения входной последовательности отсчетов относительно текущей точки вычислений k, при этом уравнение (2.1.3) будет иметь вид: y(k) = b n x(k-n). (2.1.4) При N" = N фильтр называется двусторонним симметричным. Симметричные фильтры, в отличие от односторонних фильтров, не изменяют фазы обрабатываемого сигнала. Так как реакция НЦФ на единичный входной импульс (а равно и на любой произвольный входной сигнал) всегда конечна и ограничена размером окна фильтра, такие фильтры называют также фильтрами с конечной импульсной характеристикой (КИХ-фильтры). Техника выполнения фильтрации не отличается от техники выполнения обычной дискретной свертки двух массивов данных. Задание:
Изучить основные положения цепей о КИХ-фильтрах. Выполнить предварительный расчет, письменно ответить на вопросы для самопроверки. Провести предварительный расчет. Собрать схему 1, включающую в себя импульсный источник напряжения, трехзвенный КИХ-фильтр. Построить АЧХ четырехзвенного КИХ-фильтра. (Изменить формулу H(z)) Построить АЧХ пятизвенного КИХ-фильтра. (Изменить формулу H(z)) Сравинить графики, полученные в предварительном расчете с графиками, полученными в программе Micro-Cap. Сделать вывод. Предварительный Расчет:
Эксперимент:
Соберем схему 1, включающую в себя импульсный источник напряжения, трехзвенный КИХ-фильтр. Построить АЧХ трехзвенного КИХ-фильтра. Построить АЧХ четырехзвенного КИХ-фильтра. Построить АЧХ трехзвенного КИХ-фильтра. Вывод:
В данной лабораторной работе с помощью программы Micro-Cap были получены основные временные и частотные характеристики фильтров с конечной импульсной характеристикой (КИХ-фильтров). Для схемы 1, включающую в себя импульсный источник напряжения, КИХ-фильтр были получены АЧХ фильтра, с разным количеством звеньев. Кривые, полученные экспериментально оказались равны кривым, которые были получены в предварительном расчете.