Документация Engee

rcosdesign

Конструкция КИХ-фильтра формирования импульсов с характеристикой типа «приподнятый косинус».

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • b = rcosdesign(beta,span,sps) — возвращает коэффициенты b, соответствующие КИХ-фильтру с характеристикой типа «приподнятый косинус» (ФПК) с использованием метода квадратного корня и крутизной спада, заданным аргументом beta. Фильтр усекается до заданного диапазона символов span, и каждый период символа содержит sps отсчетов. Порядок фильтра sps*span должен быть четным. Энергия фильтра равна 1.

  • b = rcosdesign(beta,span,sps,shape) — возвращает ФПК с использованием метода квадратного корня, если задать аргумент shape равным "sqrt", и нормальный КИХ-ФПК, если задать аргумент shape равным "normal".

Аргументы

Входные аргументы

# beta — крутизна спада
вещественный неотрицательный скаляр

Details

Крутизна спада, заданный как вещественный неотрицательный скаляр, не превышающий 1. Крутизна спада определяет избыточную полосу пропускания фильтра. Нулевая крутизна спада соответствует фильтру с узким профилем, а единичная — чистому приподнятому косинусу.

Типы данных

Float64, Float32

# span — количество символов
положительный целочисленный скаляр

Details

Количество символов, заданное как положительное целое число.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

# sps — количество отсчетов на символ
положительный целочисленный скаляр

Details

Количество отсчетов на период символа (коэффициент передискретизации), заданное как положительное целое число.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

# shape — форма окна приподнятого косинуса
"sqrt" (по умолчанию) | "normal"

Details

Форма окна приподнятого косинуса, заданная как "normal" или "sqrt".

Выходные аргументы

# b — коэффициенты КИХ-фильтра
вектор-строка

Details

Коэффициенты КИХ-фильтра с характеристикой типа «приподнятый косинус», возвращаемые в виде вектора-строки.

Типы данных

Float64

Примеры

Проектирование фильтра с характеристикой типа «приподнятый косинус» с использованием метода квадратного корня

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)

rcosdesign 1

Импульсные характеристики нормального ФПК и ФПК с использованием метода квадратного корня

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)

rcosdesign 2

Нормальный фильтр имеет нулевые пересечения при целых значениях, кратных 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)

rcosdesign 2 1

Свернем фильтр с использованием метода квадратного корня с самим собой. Усечем импульсную характеристику от максимального значения так, чтобы ее длина совпадала с 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")

rcosdesign 2 2

Свернутый фильтр не совпадает с нормальным фильтром из-за его конечной длины. Увеличьте значение 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)

Литература

  1. Tranter, William H., K. Sam Shanmugan, Theodore S. Rappaport, and Kurt L. Kosbar. Principles of Communication Systems Simulation with Wireless Applications. Upper Saddle River, NJ: Prentice Hall, 2004.