designMultistageInterpolator

Многоступенчатый проект интерполятора

Синтаксис

C = designMultistageInterpolator(L)
C = designMultistageInterpolator(L,Fs,TW)
C = designMultistageInterpolator(L,Fs,TW,Astop)
C = designMultistageInterpolator(___,Name,Value)

Описание

C = designMultistageInterpolator(L) разрабатывает многоступенчатый интерполятор, который имеет полный коэффициент интерполяции L. Для C, чтобы быть многоступенчатым, L не должен быть простым числом. Для получения дополнительной информации см. Алгоритмы. Процесс проектирования может требовать времени, если L имеет много факторов.

пример

C = designMultistageInterpolator(L,Fs,TW) разрабатывает многоступенчатый интерполятор с уровнем выборки Fs и шириной перехода TW. Выборка уровня в этом случае относится к выходному уровню выборки сигнала после многоступенчатого интерполятора.

Многоступенчатый интерполятор имеет частоту среза Fs / (2L).

пример

C = designMultistageInterpolator(L,Fs,TW,Astop) задает минимальное затухание дБ Astop для получившегося проекта.

пример

C = designMultistageInterpolator(___,Name,Value) задает дополнительные параметры проекта с помощью одного или нескольких аргументов пары "имя-значение".

Пример: C = designMultistageInterpolator(48,48000,200,80,'NumStages','auto') разрабатывает многоступенчатый интерполятор с наименьшим количеством количества умножения на входную выборку (MPIS).

Примеры

свернуть все

Разработайте одноступенчатый интерполятор с помощью функции designMultirateFIR и многоступенчатого интерполятора с помощью функции designMultistageInterpolator. Определите эффективность двух проектов с помощью функции cost. Эффективность реализации характеризуется двумя метриками стоимости: NumCoefficients и MultiplicationsPerInputSample.

Вычислите стоимость реализации обоих проектов и определите, какой проект более эффективен. Чтобы сделать сравнение, разработайте фильтры, таким образом, что их ширина перехода является тем же самым.

Инициализация

Выберите коэффициент интерполяции 48, введите частоту дискретизации 30,72 МГц, одностороннюю пропускную способность 100 кГц и полосу задерживания attenution 90 дБ.

L = 48;
Fin = 30.72e6;
Astop = 90;
BW = 1e5;

Используя функцию designMultirateFIR

Разработка фильтра интерполяции с помощью функции designMultirateFIR приводит к одноступенчатому проекту. Установите полумногофазную длину на конечное целое число, в этом случае 4.

HalfPolyLength = 4;
b = designMultirateFIR(L,1,HalfPolyLength,Astop);
d = dsp.FIRInterpolator(L,b)
d = 
  dsp.FIRInterpolator with properties:

        NumeratorSource: 'Property'
              Numerator: [1x384 double]
    InterpolationFactor: 48

  Show all properties

Вычислите стоимость реализации интерполятора. Фильтр интерполяции требует 376 коэффициентов и 7 состояний. Количество умножения на входную выборку и сложения на входную выборку 376 и 329, соответственно.

cost(d)
ans = struct with fields:
                  NumCoefficients: 376
                        NumStates: 7
    MultiplicationsPerInputSample: 376
          AdditionsPerInputSample: 329

Используя Функцию designMultistageInterpolator

Разработайте многоступенчатый интерполятор с теми же спецификациями фильтра как одноступенчатый проект. Вычислите ширину перехода с помощью следующего отношения:

Fc = Fin/(2*L);
TW = 2*(Fc-BW);

По умолчанию номер этапов, данных аргументом NumStages , определяется к 'Auto', приводя к оптимальному проекту, который пытается минимизировать количество умножения на входную выборку.

c = designMultistageInterpolator(L,Fin,TW,Astop)
c = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRInterpolator]
    Stage2: [1x1 dsp.FIRInterpolator]

Вызывание функции info на c показывает, что фильтр реализован как каскад двух объектов dsp.FIRInterpolator с коэффициентами интерполяции 24 и 2, соответственно.

Вычислите стоимость реализации интерполятора.

cost(c)
ans = struct with fields:
                  NumCoefficients: 184
                        NumStates: 12
    MultiplicationsPerInputSample: 322
          AdditionsPerInputSample: 275

NumCoefficients и параметры MultiplicationsPerInputSample ниже для фильтра 2D этапа, разработанного функцией designMultistageInterpolator, делая его более эффективным.

Сравните ответ значения обоих проектов.

fvtool(b,c)
legend('Single-stage','Multistage')

Ответ значения показывает, что ширина перехода обоих фильтры является тем же самым, делая фильтры сопоставимыми. Функция cost показывает, что реализация многоступенчатого проекта более эффективна по сравнению с реализацией одноступенчатого проекта.

Используя Опцию 'design' в Функции designMultistageInterpolator

Фильтр может быть сделан еще более эффективным путем установки аргумента 'CostMethod' функции designMultistageInterpolator к 'design'. По умолчанию этот аргумент установлен в 'estimate'.

В режиме 'design' функция разрабатывает каждый этап и вычисляет порядок фильтра. Это приводит к оптимальному проекту по сравнению с режимом 'estimate', где функция оценивает порядок фильтра для каждого этапа и разрабатывает фильтр на основе оценки.

Обратите внимание на то, что опция 'design' может взять намного дольше по сравнению с опцией 'estimate'.

cOptimal = designMultistageInterpolator(L,Fin,TW,Astop,'CostMethod','design')
cOptimal = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRInterpolator]
    Stage2: [1x1 dsp.FIRInterpolator]
    Stage3: [1x1 dsp.FIRInterpolator]

cost(cOptimal)
ans = struct with fields:
                  NumCoefficients: 74
                        NumStates: 17
    MultiplicationsPerInputSample: 296
          AdditionsPerInputSample: 249

Разработайте интерполятор с полным коэффициентом интерполяции 24 использований функции designMultistageInterpolator. Разработайте фильтр в двух настройках:

  • 2D подготовьте настройку - NumStages установлен в 2.

  • Автоматическая настройка - NumStages установлен в 'Auto'. Эта настройка разрабатывает фильтр с самым низким количеством умножения на входную выборку.

Сравните cost реализации обоих настройки.

Инициализация

Выберите коэффициент интерполяции 24, введите частоту дискретизации 6 кГц, затухание полосы задерживания 90 дБ и ширину перехода 0,03×6000/2.

L = 24;
Fs = 6000;
Astop = 90;
TW = 0.03*Fs/2;

Разработайте фильтр

Разработайте два фильтра с помощью функции designMultistageInterpolator.

cAuto = designMultistageInterpolator(L,Fs,TW,Astop,'NumStages','Auto')
cAuto = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRInterpolator]
    Stage2: [1x1 dsp.FIRInterpolator]
    Stage3: [1x1 dsp.FIRInterpolator]

cTwo = designMultistageInterpolator(L,Fs,TW,Astop,'NumStages',2)
cTwo = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRInterpolator]
    Stage2: [1x1 dsp.FIRInterpolator]

Просмотрите информацию о фильтре с помощью функции info. Настройка 'Auto' разрабатывает каскад трех КИХ-интерполяторов с коэффициентами интерполяции 4, 3, и 2, соответственно. Настройка 2D этапа разрабатывает каскад двух КИХ-интерполяторов с коэффициентами интерполяции 6 и 4, соответственно.

Сравните стоимость

Сравните стоимость реализации двух проектов с помощью функции cost.

cost(cAuto)
ans = struct with fields:
                  NumCoefficients: 70
                        NumStates: 28
    MultiplicationsPerInputSample: 190
          AdditionsPerInputSample: 167

cost(cTwo)
ans = struct with fields:
                  NumCoefficients: 102
                        NumStates: 23
    MultiplicationsPerInputSample: 212
          AdditionsPerInputSample: 189

Фильтр интерполяции настройки 'Auto' приводит к трехэтапному проекту, который превосходит 2D дизайн сцены по характеристикам с точки зрения метрик MultiplicationsPerInputSample и NumCoefficients.

Фильтры в многоступенчатом проекте удовлетворяют следующие условия:

  • Объединенный ответ должен соответствовать или превысить данные спецификации проекта.

  • Объединенная интерполяция должна равняться полной требуемой интерполяции.

Для полного коэффициента интерполяции 50, существует несколько комбинаций отдельных этапов.

Чтобы получить проект с наименьшим количеством количества общих коэффициентов, установите аргумент 'MinTotalCoeffs' на true.

Astop = 80;
L = 50;
Fs = 6000;
TW = 0.03*Fs/2;
cMinCoeffs = designMultistageInterpolator(L,Fs,TW,Astop,'MinTotalCoeffs',true)
cMinCoeffs = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRInterpolator]
    Stage2: [1x1 dsp.FIRInterpolator]
    Stage3: [1x1 dsp.FIRInterpolator]

cost(cMinCoeffs)
ans = struct with fields:
                  NumCoefficients: 58
                        NumStates: 18
    MultiplicationsPerInputSample: 306
          AdditionsPerInputSample: 257

Получить проект с самым низким количеством умножения на демонстрационный вход, набор 'NumStages' к 'auto'.

cMinMulti = designMultistageInterpolator(L,Fs,TW,Astop,'NumStages','auto')
cMinMulti = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRInterpolator]
    Stage2: [1x1 dsp.FIRInterpolator]

cost(cMinMulti)
ans = struct with fields:
                  NumCoefficients: 156
                        NumStates: 9
    MultiplicationsPerInputSample: 252
          AdditionsPerInputSample: 203

Сравните ответ значения обоих фильтры с помощью fvtool. Оба фильтра имеют то же поведение полосы перехода и затухание полосы задерживания, которое является ниже 80 дБ.

fvtool(cMinCoeffs,cMinMulti)
legend('Minimize total coefficients','Minimize number of multiplications per input sample')

Входные параметры

свернуть все

Полный коэффициент интерполяции, заданный как положительное целое число, больше, чем одно. Для C, чтобы быть многоступенчатым, L не должен быть простым числом. Для получения дополнительной информации см. Алгоритмы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выборка уровня выходного сигнала после многоступенчатого интерполятора, заданного как положительный действительный скаляр. Если не заданный, значения по умолчанию Fs к 48 000 Гц. Многоступенчатый интерполятор имеет частоту среза Fs / (2L).

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Ширина перехода, заданная как положительный действительный скаляр меньше, чем Fs/L. Если не заданный, значения по умолчанию TW к 0.2×Fs/L. Ширина перехода должна быть меньше, чем Fs/L.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Минимальное затухание полосы задерживания для получившегося проекта, заданного как положительный действительный скаляр.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: C = designMultistageInterpolator(48,48000,200,80,'NumStages','auto') разрабатывает многоступенчатый интерполятор с самым низким количеством умножения на входную выборку.

Количество этапов интерполятора, заданных как положительное целое число. Если установлено в 'auto', алгоритм проекта определяет количество этапов, которые приводят к самому низкому количеству умножения на входную выборку. Если задано как положительное целое число, N, полный коэффициент интерполяции, L, должен смочь включить, по крайней мере, в факторы N, не считая 1 или L как факторы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Когда false, алгоритм проекта минимизирует количество умножения на входную выборку. Когда true, алгоритм проекта минимизирует общее количество коэффициентов.

Типы данных: логический

Стойте метода вычисления, заданного как также:

  • 'estimate' – Функция оценивает порядок фильтра, требуемый для каждого этапа, и разрабатывает фильтр на основе оценки. Этот метод быстрее, чем 'design', но может привести к субоптимальным проектам.

  • 'design' – Функция разрабатывает каждый этап и вычисляет порядок фильтра.

Типы данных: char

Допуск, заданный как положительная скалярная величина. Допуск используется, чтобы определить многоступенчатую настройку с наименьшим количеством количества MPIS. Когда несколько настроек приводят к тому же самому низкому MPIS в заданном допуске, настройка, которая приводит к самому низкому количеству коэффициентов в целом, выбрана. Чтобы просмотреть общее количество коэффициентов и MPIS для определенного фильтра, используйте функцию cost.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

свернуть все

Разработанный фильтр, возвращенный как Система dsp.FilterCascade object™. Фильтр является каскадом нескольких этапов, разработанных функцией. Количество этапов определяется аргументом 'NumStages'.

Чтобы получить информацию о каждом этапе фильтра, вызовите функцию info на аргументе C.

Алгоритмы

Полный коэффициент интерполяции разделен в меньшие факторы с каждым фактором, являющимся коэффициентом интерполяции соответствующего отдельного этапа. Объединенная интерполяция всех отдельных этапов должна равняться полной интерполяции. Объединенный ответ должен соответствовать или превысить данные спецификации проекта.

Функция определяет количество этапов интерполятора через аргумент 'NumStages'. Последовательность этапов определяется на основе стоимости внедрения. По умолчанию 'NumStages' установлен в 'auto', приводящий к последовательности, которая дает самое низкое количество MPIS. Когда несколько настроек приводят к тому же самому низкому MPIS в заданном допуске, настройка, которая приводит к самому низкому количеству коэффициентов в целом, выбрана. Если 'MinTotalCoeffs' установлен в true, функция определяет последовательность, которая требует самого низкого количества общих коэффициентов.

По умолчанию 'CostMethod' установлен в 'estimate'. В этом режиме функция оценивает порядок фильтра, требуемый для каждого этапа, и разрабатывает фильтр на основе оценки. Этот метод быстрее, но может привести к субоптимальным проектам. Для оптимального проекта, набор 'CostMethod' к 'design'. В этом режиме функция разрабатывает каждый этап и вычисляет порядок фильтра.

Введенный в R2018b