designMultistageInterpolator

Проект многоступенчатого интерполятора

Описание

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

пример

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

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

пример

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

Использование d- esignMultistageInterpolator Функция

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

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

The 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.

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

Использование 'design' Опция в d esignMultistageInterpolator Функция

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

В 'design' mode, функция проектирует каждый каскад и вычисляет порядок фильтра. Это приводит к оптимальному проекту по сравнению с '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 функция. The 'Auto' Строение проектирует каскад из трёх конечных импульсных характеристик интерполяторов с факторами интерполяции 4, 3 и 2 соответственно. Двухэтапное строение проектирует каскад из двух конечных импульсных характеристик интерполяторов с факторами интерполяции 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

The '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/ (2 L).

Типы данных: 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