exponenta event banner

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 кГц и затухание полосы останова 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 параметры ниже для двухступенчатого фильтра, разработанного designMultistageInterpolator функция, что делает ее более эффективной.

Сравните амплитудную характеристику обеих конструкций.

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

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent 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 функция. Сконструируйте фильтр в двух конфигурациях:

  • Двухступенчатая конфигурация - 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' конфигурация конструирует каскад из трех FIR-интерполяторов с коэффициентами интерполяции 4, 3 и 2 соответственно. Двухступенчатая конфигурация конструирует каскад из двух FIR-интерполяторов с коэффициентами интерполяции 6 и 4 соответственно.

Сравнение затрат

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

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

cost(cTwo)
ans = struct with fields:
                  NumCoefficients: 98
                        NumStates: 22
    MultiplicationsPerInputSample: 208
          AdditionsPerInputSample: 185

'Auto' фильтр интерполяции конфигурации дает трехступенчатую конструкцию, которая выполняет двухступенчатую конструкцию с точки зрения 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')

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 3 objects of type line. These objects represent 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 является именем аргумента и 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, алгоритм конструирования минимизирует общее количество коэффициентов.

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

Метод расчета затрат, указанный как:

  • '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