designMultistageInterpolator

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

Описание

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 дизайн сцены по характеристикам в терминах NumCoefficients и MultiplicationsPerInputSample метрики.

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

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

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

Для полного коэффициента интерполяции 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

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

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

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

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

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

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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

Для просмотра документации необходимо авторизоваться на сайте