
- •Расчет дискретных (цифровых) фильтров. Алгоритм быстрого преобразования фурье. Проектирование фильтров на базе процессора бпф
- •Быстрое преобразование Фурье
- •Растекание спектра при выполнении дискретного преобразования Фурье
- •Разновидности фильтров на базе процессора бпф
- •Функции спектрального анализа в matlab
- •Прямое и обратное дпф
- •Алгоритм вычисления восьмиточечного бпф
- •Синтез фильтров на базе процессора бпф в matlab
- •Синтез гребенчатого фильтра в качестве детектора допплеровской частоты
- •Функции вычисления прямого и обратного дпф
- •Фильтрация в частотной области с помощью быстрой свертки
- •Примеры решения типовых задач на применение дпф (бпф)
- •Xlabel('Номер отсчета, n') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Xlabel('Нормированная частота') %подпись по оси X
- •Xlabel('Отсчеты времени') %подпись по оси X
- •Типовые задания для самостоятельной проработки (подготовки к семинару)
Функции спектрального анализа в matlab
Рассмотрим средства MATLAB, предназначенные для выполнения спектрального анализа.
Прямое и обратное дпф
Для выполнения
прямого и обратного ДПФ в MATLAB служат
функции
и
:
- вычисляет прямое ДПФ для вектора
; если - матрица, преобразование производится для каждого ее столбца по отдельности;
- предварительно приводит исходные данные к Размеру
, урезая их или дополняя нулями;
и
- аналогичные варианты вызова для функции обратного ДПФ.
Функции и входят в базовую библиотеку MATLAB. Вычисления организованы так, что реализуется максимально возможное для каждой длины исходного вектора ускорение вычислений: длина вектора раскладывается на простые множители, число этих множителей соответствует количеству ступеней (итераций) БПФ, а сами множители определяют коэффициенты прореживания на разных ступенях БПФ.
Алгоритм вычисления восьмиточечного бпф
Рассмотрим вариант реализации с помощью MATLAB алгоритма быстрого преобразования Фурье для N = 8. В этом случае N = 23, следовательно, процедура вычисления спектральных составляющих включает три итерации. Напомним, прежде всего, алгоритм прореживания входных выборок, представленный на рис.3. Это еще не БПФ, а только подготовка к нему, вернее даже, пояснение исходного состояния, с которого начинается алгоритм БПФ.
Рис.3. Алгоритм прореживания по времени входных выборок.
Видно,
что входной массив выборок
разбивается
на два массива. Первый из них включает
,
a
второй -
.
Далее
каждый из этих массивов разбивается на
два, получаются четыре двумерных
массива:
;
;
и
.
Наконец,
происходит последнее разбиение, в
результате которого получаем восемь
одномерных массивов, т.е. отдельных
выборок
.
Это
и есть исходное положение, начиная о
которого работает алгоритм БПФ.
Кстати, порядок следования выборок можно получить, используя двоичную инверсию, показанную для N = 8 в табл.1
Таблица 1. Двоичная инверсия номеров входных выборок.
Исходный номер выборки |
Исходный номер в виде двоичного числа |
Инверсия двоичного числа |
Десятичный номер в (7) |
0 |
000 |
000 |
0 |
1 |
001 |
100 |
4 |
2 |
010 |
010 |
2 |
3 |
011 |
110 |
6 |
4 |
100 |
001 |
1 |
5 |
101 |
101 |
5 |
6 |
110 |
011 |
3 |
7 |
111 |
111 |
7 |
Поясним
табл.1. В первой ее колонке стоят номера
выборок исходного массива в том порядке,
в котором они поступают на БПФ-процессор.
Во второй колонке те же номера представлены
в виде двоичных чисел. В третьей колонке
произведена двоичная инверсия чисел
второй колонки, т.е. число второй колонки,
читаемое справа налево, записывается
в третью колонку слева направо. Четвертая
колонка содержит десятичные числа,
соответствующие двоичным числом в
третьей колонке. Числа в последней
колонке показывают очередность
использования входных выборок при
составлении пар для первой итерации
БПФ. Действительно, в соответствии с
очередностью, указанной в последней
колонке, входные выборки объединяются
в следующие пары
,
,
,
.
Как
следует из вышеизложенного, на первой
итерации БПФ из восьми входных выборок
применением процедуры получаются
спектральные составляющие четырех
двухточечных БПФ. Поскольку в левых
частях выражений находятся двумерные
массивы, для данной итерации
,
.
Номера получающихся частотных составляющих
принимают значения
k
=
0
(в нечетных строках (5)) и k
= 1 (в четных строках)*. В последнем случае
и
в правых частях равенств (5) фигурируют
значения
.
Поэтому все поворачивающие множители
находятся в нулевой степени, т.е. мы
имеем дело с суммами и разностями типа
,
и
т.д. Порядок составления пар выборок
определяется последней колонкой
табл.1.
Примечание. При реализации алгоритма в виде программы вычислений номера частотных составляющих примут значения k = 1 и k = 2, соответственно, в связи с правилами нумерации массивов, применяемыми в MATLAB.
Таким образом, на первой итерации БПФ выполняются следующие операции:
;
;
;
;
;
;
;
.
Верхний индекс спектральной составляющей означает номер двухточечного ДПФ в левой части каждого равенства, аргумент функции S( ) -номер частотной составляющей, нижний индекс - размерность ДПФ, получающихся в данной итерации. При реализации первой итерации в MATLAB имеем
n=1:1:8; %вектор номеров отсчетов n
un=[un(1) un(2) un(3) n(4) n(5) un(6) un(7) un(8)] %вектор отсчетов un
s21=[un(1)+un(5) un(1)-un(5)] %вектор первого (из четырех) двухточечного БПФ
s22=[un(3)+un(7) un(3)-un(7)] %вектор второго (из четырех) двухточечного БПФ
s23=[un(2)+un(6) un(2)-un(6)] %вектор третьего (из четырех) двухточечного БПФ
s24=[un(4)+un(8) un(4)-un(8)] %вектор четвертого (из четырех) двухточечного БПФ
На
второй итерации из четырех двухточечных
ДПФ получаются два четырехточечных. В
соответствии с разбиением входных
выборок (рис.3) одно из четырехточечных
ДПФ должно формироваться из
,
,
,
,
а второе - из
,
,
,
.
Поскольку
результатом этой итерации являются
четырехмерные массивы, здесь
N
=
4, N/2
= 2.
Номера частотных составляющих в левых
частях равенств
,
а в правых частях k1
принимают
значения 0, 1, так как в случае
,
.
При
этом поворачивающие множители имеют
вид
при
и
при
.
Следовательно,
при
имеем
соответственно
;
;
;
.
Таким образом, на второй итерации
выполняются следующие операции:
;
;
;
;
;
;
;
.
Еще раз подчеркнем, что при k = 0;1 в левой части равенства такое же значение имеют номера частотных составляющих в правой части. Если же в левой части равенства k = 2; 3, то номер частотной составляющей в правой части равенства принимает значение k - 2, т.е. соответственно 0 или 1. Реализации второй итерации в MATLAB имеет вид
s41=[s21(1)+s22(1) s21(2)-j*s22(2) s21(1)-s22(1) s21(2)+j*s22(2)] %вектор первого (из двух) четырехточечного БПФ
s42=[s23(1)+s24(1) s23(2)-j*s23(2) s23(1)-s24(1) s23(2)+j*s23(2)] %вектор первого (из двух) четырехточечного БПФ
На
третьей итерации из двух четырехточечных
ДПФ получается одно восьмиточечное.
При этом, поскольку N
/ 2 = 4, первые четыре частотные компоненты
БПФ на выходе (
)
образуются взвешенным суммированием
соответствующих компонент четырехточечных
ДПФ. Четыре последние компоненты БПФ
(
)
формируются как взвешенные разности
компонент четырехточечных ДПФ с номерами
k
– 4.
Степень
поворачивающего множителя равна k
при
или
k
- 4 при
.
Таким образом, на третьей итерации
выполняются следующие операции (верхний
индекс частотных компонент в левых
частях равенств опущен, так как имеется
только один выходной массив)
;
;
;
;
;
;
;
.
Поворачивающие
множители третьей итерации для
рассмотренного примера принимают
вид
,
и
.
Реализации
третьей
итерации
в
MATLAB
имеет
вид
s8=[s41(1)+s42(1) s41(2)+(exp(-j*pi/4))*s42(2) s41(3)+(exp(-j*pi/2))*s42(3) s41(4)+(exp(-j*3*pi/4))*s42(4) s41(1)-s42(1) s41(2)-(exp(-j*pi/4))*s42(2) s41(3)-(exp(-j*2*pi/4))*s42(3) s41(4)-(exp(-j*3*pi/4))*s42(4)] %вектор восьмиточечного БПФ
На рис.4. приведен граф восьмиточечного БПФ, наглядно представляющий выполняемые операции.
Рис.4. Граф восьмиточечного БПФ.
В
качестве примера рассчитаем БПФ
дискретной косинусоиды
и
комплексной экспоненты
.
Числовые значения
и
,
а
также значения частотных составляющих
на различных итерациях алгоритма БПФ
приведены в табл.2.
Параметры |
Косинусоида |
|||||||
n |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
u(n) |
1 |
0 |
-1 |
0 |
1 |
0 |
-1 |
0 |
1-ая итерация |
|
|
|
|
|
|
|
|
2 |
0 |
-2 |
0 |
0 |
0 |
0 |
0 |
|
2-ая итерация |
|
|
|
|
|
|
|
|
0 |
0 |
4 |
0 |
0 |
0 |
0 |
0 |
|
3-я итерация |
|
|
|
|
|
|
|
|
0 |
0 |
4 |
0 |
0 |
0 |
4 |
0 |
Параметры |
Комплексная экспонента |
|||||||
n |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
u(n) |
1 |
j |
-1 |
-j |
1 |
j |
-1 |
-j |
1-ая итерация |
|
|
|
|
|
|
|
|
2 |
0 |
-2 |
0 |
2j |
0 |
-2j |
0 |
|
2-ая итерация |
|
|
|
|
|
|
|
|
0 |
0 |
4 |
0 |
0 |
0 |
4j |
0 |
|
3-я итерация |
|
|
|
|
|
|
|
|
0 |
0 |
8 |
0 |
0 |
0 |
0 |
0 |
Таблица 2. БПФ комплексной косинусоиды и комплексной экспоненты.
Полученные
результаты легко интерпретируются. Оба
входных напряжения - периодические с
периодом
,
где Т
- интервал
дискретизации, т.е. частота напряжений
,
дискрет
частоты, в свою очередь равен
.
Сравнивая
F
и
,
заключаем, что
т.е.
в спектре должна присутствовать
составляющая S
(2).
В
случае комплексной экспоненты этот
расчет подтверждается, В случае
косинусоиды наряду с S
(2)
в
спектре присутствует еще и компонента
S
(6).
Этот факт объясняется тем, что амплитудный
спектр любой действительной функции
времени симметричен относительно
нуля частотной оси. Значит, при наличии
спектральной составляющей S
(2)
существует
и спектральная составляющая S
(-2)
в
области отрицательных частот. Спектр
дискретного напряжения периодичен (с
периодом равным T).
Поэтому
компоненте
с
частотой – 1/4T
соответствует
наряду с прочими компонента с частотой
.
Легко видеть, что этой частоте соответствует компонента спектра S (6).