rcosdesign
Конструкция КИХ-фильтра формирования импульсов с характеристикой типа «приподнятый косинус».
| Библиотека |
|
Синтаксис
Вызов функции
-
b = rcosdesign(beta,span,sps)— возвращает коэффициентыb, соответствующие КИХ-фильтру с характеристикой типа «приподнятый косинус» (ФПК) с использованием метода квадратного корня и крутизной спада, заданным аргументомbeta. Фильтр усекается до заданного диапазона символовspan, и каждый период символа содержитspsотсчетов. Порядок фильтраsps*spanдолжен быть четным. Энергия фильтра равна1.
Аргументы
Входные аргументы
#
beta —
крутизна спада
вещественный неотрицательный скаляр
Details
Крутизна спада, заданный как вещественный неотрицательный скаляр, не превышающий 1. Крутизна спада определяет избыточную полосу пропускания фильтра. Нулевая крутизна спада соответствует фильтру с узким профилем, а единичная — чистому приподнятому косинусу.
| Типы данных |
|
#
span —
количество символов
положительный целочисленный скаляр
Details
Количество символов, заданное как положительное целое число.
| Типы данных |
|
#
sps —
количество отсчетов на символ
положительный целочисленный скаляр
Details
Количество отсчетов на период символа (коэффициент передискретизации), заданное как положительное целое число.
| Типы данных |
|
#
shape —
форма окна приподнятого косинуса
"sqrt" (по умолчанию) | "normal"
Details
Форма окна приподнятого косинуса, заданная как "normal" или "sqrt".
Выходные аргументы
#
b —
коэффициенты КИХ-фильтра
вектор-строка
Details
Коэффициенты КИХ-фильтра с характеристикой типа «приподнятый косинус», возвращаемые в виде вектора-строки.
| Типы данных |
|
Примеры
Проектирование фильтра с характеристикой типа «приподнятый косинус» с использованием метода квадратного корня
Details
Укажем крутизну спада равной 0.25. Усечем фильтр до 6 символов и представим каждый символ 4 отсчетами. Убедимся, что "sqrt" — это значение аргумента shape по умолчанию.
import EngeeDSP.Functions: rcosdesign
h = rcosdesign(0.25, 6, 4)
mx = maximum(abs.(h - rcosdesign(0.25, 6, 4, "sqrt")))
0.0
n_max = 6 * 4 + 1
n = collect(1:n_max)
plot(n, impz(h),
seriestype = :stem,
marker = :circle,
title = "Impulse Responce",
xlabel = "n (samples)",
ylabel = "Amplitude",
legend = false)
Импульсные характеристики нормального ФПК и ФПК с использованием метода квадратного корня
Details
Сравним нормальный фильтр с характеристикой типа «приподнятый косинус» (ФПК) и ФПК с использованием метода квадратного корня. Идеальный (бесконечной длины) нормальный ФПК формирования импульсов эквивалентен двум идеальным каскадным ФПК. Таким образом, импульсная характеристика нормального КИХ-фильтра должна напоминать импульсную характеристику фильтра с использованием метода квадратного корня, свернутого с самим собой.
Создадим нормальный ФПК с крутизной спада 0.25. Укажем, что этот фильтр охватывает 4 символа по 3 отсчета на символ.
import EngeeDSP.Functions: rcosdesign
rf = 0.25
span = 4
sps = 3
h1 = rcosdesign(rf, span, sps, "normal");
n_max = span * sps + 1
n = collect(1:n_max)
plot(n, impz(h1),
seriestype = :stem,
marker = :circle,
title = "Impulse Responce",
xlabel = "n (samples)",
ylabel = "Amplitude",
legend = false)
Нормальный фильтр имеет нулевые пересечения при целых значениях, кратных sps. Таким образом, он удовлетворяет критерию Найквиста для нулевой межсимвольной интерференции. Однако фильтр с использованием метода квадратного корня не удовлетворяет:
h2 = rcosdesign(rf, span, sps, "sqrt")
plot(n, impz(h2),
seriestype = :stem,
marker = :circle,
title = "Impulse Responce",
xlabel = "n (samples)",
ylabel = "Amplitude",
legend = false)
Свернем фильтр с использованием метода квадратного корня с самим собой. Усечем импульсную характеристику от максимального значения так, чтобы ее длина совпадала с h1. Нормализуем характеристику, используя максимальное значение. Сравним свернутый фильтр с использованием метода квадратного корня с нормальным фильтром.
import EngeeDSP.Functions: conv
h3 = conv(h2, h2, "same")
y = [h1/maximum(abs.(h1)) h3/maximum(abs.(h3))]'
n_max = (span * sps + 1) * 2
n = collect(1:n_max)
plot!(n, y,
seriestype = :stem,
fillrange = 0,
marker = :circle,
xlabel = "Samples",
ylabel = "Normalized Amplitude",
label = "h2 * h2")
Свернутый фильтр не совпадает с нормальным фильтром из-за его конечной длины. Увеличьте значение span для получения более точного соответствия между откликами и лучшего соответствия критерию Найквиста.
Пропускание сигнала через фильтр с характеристикой типа «приподнятый косинус»
Details
В этом примере показано, как пропустить сигнал через ФПК с использованием метода квадратного корня.
Укажем параметры фильтра.
rolloff = 0.25 # Rolloff factor
span = 6 # Filter span in symbols
sps = 4 # Samples per symbol
Сгенерируем коэффициенты ФПК с использованием метода квадратного корня.
import EngeeDSP.Functions: rcosdesign
b = rcosdesign(rolloff, span, sps)
Создадим вектор биполярных данных.
d = 2 * randi([0 1], 100, 1) - 1
Повысим частоту дискретизации и отфильтруем данные для формирования импульсов.
x = upfirdn(d, b, sps)
Добавим шум.
r = x + randn(size(x)) * 0.01
Отфильтруем и понизим частоту дискретизации полученного сигнала для согласованной фильтрации.
y = upfirdn(r, b, 1, sps)