exponenta event banner

dsp. CICInterpolator

Интерполяция сигнала с помощью каскадного интеграторно-гребенчатого фильтра

Описание

dsp.CICInterpolator Система object™ интерполирует входной сигнал, используя каскадный интеграторно-гребенчатый (CIC) интерполяционный фильтр. Структура интерполяционного фильтра CIC состоит из N секций каскадных гребенчатых фильтров с последующим изменением скорости на коэффициент R, за которыми следуют N секций каскадных интеграторов. Дополнительные сведения см. в разделе Алгоритмы. Свойство NumSections указывает N, количество секций в фильтре CIC. Свойство InterpolationFactor определяет коэффициент интерполяции R. getFixedPointInfo функция возвращает длины слов и дроби секций с фиксированной точкой и выходные данные для dsp.CICInterpolator Системный объект. Можно также создать код HDL для этого системного объекта с помощью generatehdl функция.

Примечание

Для этого объекта требуется лицензия Fixed-Point Designer™.

Для интерполяции сигнала с помощью фильтра CIC:

  1. Создать dsp.CICInterpolator и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

пример

cicInterp = dsp.CICInterpolator создает объект CIC interpolation System, который применяет фильтр интерполяции CIC к входному сигналу.

пример

cicInterp = dsp.CICInterpolator(R,M,N) создает объект интерполяции CIC с помощью InterpolationFactor свойство имеет значение R, DifferentialDelay свойство имеет значение M, и NumSections свойство имеет значение N.

cicInterp = dsp.CICInterpolator(Name,Value) создает объект интерполяции CIC с заданным значением каждого свойства. Заключите каждое имя свойства в отдельные кавычки. Этот синтаксис можно использовать с любыми предыдущими комбинациями входных аргументов.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Коэффициент интерполяции входного сигнала, определяемый как положительное целое число.

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

Значение дифференциальной задержки, используемое в каждой из гребенчатых секций фильтра, задается как положительное целое число. Дополнительные сведения см. в разделе Алгоритмы. Если дифференциальная задержка имеет встроенный тип данных целого класса, коэффициент интерполяции должен быть одним и тем же типом данных целого числа или double. Например, если дифференциальной задержкой является int8, тогда коэффициент интерполяции должен быть int8 или double.

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

Число интеграторных и гребенчатых секций фильтра CIC, указанных как положительное целое число. Это число указывает количество секций либо в гребенчатой части, либо в интеграторной части фильтра. Общее число секций в фильтре CIC вдвое превышает число секций, заданное этим свойством.

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

Обозначения свойств с фиксированной точкой, указанные как одно из следующих:

  • Full precision - Длина слова и длина дроби секций фильтра CIC и вывода объекта работают с полной точностью.

  • Minimum section word lengths - Укажите длину выходного слова через свойство OutputWordLength. Объект определяет тип данных секции фильтра и длину выходной дроби, которые обеспечивают максимальную точность. Для получения более подробной информации см. getFixedPointInfo и cicInterpOut аргумент.

  • Specify word lengths - Укажите длины слов в разделах фильтра CIC и выходные данные объекта с помощью свойств SureWordLengts и OutputWordLength. Объект определяет соответствующие длины дробей для обеспечения максимальной точности. Для получения более подробной информации см. getFixedPointInfo и cicInterpOut аргумент.

  • Specify word and fraction lengths - Укажите длину слова и длину дроби разделов фильтра CIC, а также выходные данные объекта через свойства SureWordLengts, SureFracityLengths, OutputWordLength и OutputFracityLength.

Длины слов с фиксированной точкой для каждого раздела фильтра, заданные как скаляр или вектор строки целых чисел. Длина слова должна быть больше или равна 2. Если указан скаляр, значение применяется ко всем разделам фильтра. Если задан вектор, он должен иметь длину 2 × NumSections.

Пример: 32

Пример: [32 32 32 32]

Зависимости

Это свойство применяется при установке FixedPointDataType свойство для 'Specify word lengths' или 'Specify word and fraction lengths'.

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

Длины дробей с фиксированной точкой, используемые для каждой секции фильтра, задаваемые как скаляр или вектор строки целых чисел. Длина дроби может быть отрицательной, 0 или положительной. Если указан скаляр, значение применяется ко всем разделам фильтра. Если задан вектор, он должен иметь длину 2 × NumSections.

Пример: -2

Пример: [-2 0 5 8]

Зависимости

Это свойство применяется при установке FixedPointDataType свойство для 'Specify word and fraction lengths'.

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

Длина слова с фиксированной точкой для вывода фильтра, заданная как скалярное целое число, большее или равное 2.

Зависимости

Это свойство применяется при установке FixedPointDataType свойство для одного из 'Minimum section word lengths', 'Specify word lengths', или 'Specify word and fraction lengths'.

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

Длина дроби с фиксированной точкой для вывода фильтра, заданная как скалярное целое число.

Зависимости

Это свойство применяется при установке FixedPointDataType свойство для 'Specify word and fraction lengths'.

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

Использование

Описание

пример

cicInterpOut = cicInterp(input) интерполирует входные данные с помощью интерполятора CIC.

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

развернуть все

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да

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

развернуть все

Интерполированный выходной сигнал, возвращаемый в виде вектора или матрицы. Размер выходного кадра равен (InterpolationFactor) × размеру входного кадра. Сложность выходных данных соответствует сложности входных данных. Если вход single или doubleтип выходных данных соответствует типу входных данных.

Если входные данные имеют встроенный целочисленный тип данных или тип данных с фиксированной точкой, длина выходного слова и длина дроби зависят от настройки типа данных с фиксированной точкой, выбранной с помощью свойства FixedStartDataType.

Полная точность

Когда FixedPointDataType свойство имеет значение 'Full precision', применяется следующее отношение:

WLoutput = WLinput + NumFFLoutput = FLinput

где,

  • WLoutput - длина слова выходных данных.

  • FLoutput - длина фракции выходных данных.

  • WLinput - длина входных данных.

  • FLinput - длина фракции входных данных.

  • NumSect - количество секций в фильтре CIC, указанное в свойстве NumSections.

Входные данные WLinput и FLinput наследуются из входных данных, передаваемых алгоритму объекта. Для встроенных целочисленных входов длина дроби равна 0.

Минимальная длина слова сечения

Когда FixedPointDataType свойство имеет значение 'Minimum section word lengths', длина выходного слова - это значение, указанное в свойстве OutputWordLength. Выходная длина дроби FL задается следующим уравнением:

FLoutput = WLoutput (WLinput − FLinput + NumSect)

Указание длины слов и дробей

Когда FixedPointDataType имеет значение 'Specify word and fraction lengths', длина выходного слова и длина дроби являются значениями, заданными в свойствах OutputWordLength и OutputFracityLength.

Задание длины слова

Когда FixedPointDataType имеет значение 'Specify word lengths', длина выходного слова - это значение, указанное в OutputWordLength собственность. Выходная длина дроби FL задается следующим уравнением:

FLoutput = WLoutput (WLinput − FLinput + NumSect)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да

Функции объекта

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

release(obj)

развернуть все

generatehdlСоздание кода HDL для квантованного фильтра DSP (требуется кодер HDL конструкции фильтра)
impzИмпульсная характеристика объекта системы дискретно-временного фильтра
freqzЧастотная характеристика объекта системы дискретно-временного фильтра
phasezФазовый отклик объекта System дискретно-временного фильтра (развернутый)
fvtoolВизуализация частотной характеристики фильтров DSP
gainКоэффициент усиления объекта CIC filter System
getFixedPointInfoПолучение длин слов и дробей с фиксированной точкой
infoСведения об объекте filter System
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Для получения списка методов анализа фильтра, поддерживаемых данным объектом, введите dsp.CICInterpolator.helpFilterAnalysis в командной строке MATLAB ®. Соответствующие страницы ссылок на функции см. в разделе Методы анализа для фильтрации системных объектов.

Примеры

свернуть все

Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).

Создать dsp.CICInterpolator object™ системы с InterpolationFactor задайте значение 2. Интерполировать сигнал с фиксированной точкой с коэффициентом 2 от 22,05 кГц до 44,1 кГц.

cicint = dsp.CICInterpolator(2)
cicint = 
  dsp.CICInterpolator with properties:

    InterpolationFactor: 2
      DifferentialDelay: 1
            NumSections: 2
     FixedPointDataType: 'Full precision'

Создать dsp.SineWave объект с SampleRate установить на 22,05 кГц, SamplesPerFrame установите в значение 32, и OutputDataType установить в значение 'Custom'. Для генерации сигнала с фиксированной точкой установите CustomOutputDataType к свойству numerictype объект. В данном примере задайте значение numerictype([],16). Длина дроби вычисляется на основе значений генерируемого синусоидального сигнала для обеспечения наилучшей возможной точности.

Для генерации сигнала с фиксированной точкой установите Method имущества dsp.SineWave объект в 'Table lookup'. Этот способ генерирования синусоидального сигнала требует, чтобы период каждой синусоиды на выходе был равномерно разделен на период выборки. То есть 1/fTs = ki должно быть целым значением для каждого канала i = 1, 2,..., N. Значение Ts равно 1/Fs, переменная fi - это частота синусоидального сигнала, а Fs - частота дискретизации сигнала. Другими словами, отношение Fs/fi должно быть целым числом. Дополнительные сведения см. в разделе Алгоритмы на dsp.SineWave страница объекта.

В этом примере Fs устанавливается на 22050 Гц, а fi - на 1050 Гц.

Fs = 22.05e3;      
sine = dsp.SineWave('Frequency',1050,'SampleRate',Fs,'SamplesPerFrame',32,...
    'Method','Table lookup','OutputDataType','Custom')
sine = 
  dsp.SineWave with properties:

            Amplitude: 1
            Frequency: 1050
          PhaseOffset: 0
        ComplexOutput: false
               Method: 'Table lookup'
    TableOptimization: 'Speed'
           SampleRate: 22050
      SamplesPerFrame: 32
       OutputDataType: 'Custom'

  Show all properties

В каждом контуре итерации поток в кадре синусоидального сигнала с фиксированной точкой, дискретизированного на частоте 22,05 кГц. Интерполяция потокового сигнала с коэффициентом 2. Интерполированный выходной сигнал имеет 64 выборки на кадр.

for i = 1:16
    x = sine();
    y = cicint(x);
end

Выходной сигнал интерполяционного фильтра CIC усиливается на конкретное значение усиления. Вы можете определить это значение с помощью gain функция. Этот коэффициент усиления равен коэффициенту усиления 2Nth ступени интерполяционного фильтра CIC и равен (I × D) N/I, где I - коэффициент интерполяции, D - дифференциальная задержка, а N - число секций интерполятора CIC.

gainCIC = gain(cicint)
gainCIC = 2

Чтобы отрегулировать этот усиленный выходной сигнал и согласовать его с амплитудой исходного сигнала, разделите интерполированный CIC-сигнал на вычисленное значение усиления.

Сравните последние кадры исходного и интерполированного сигналов. При построении графика учтите задержку вывода 2 выборок.

n = (0:63)';
stem(n(1:31)/Fs, double(x(1:31)),'r','filled')
hold on; 
I = cicint.InterpolationFactor;
stem(n(1:61)/(Fs*I), ...
   double(y(4:end))/gainCIC,'b') 
xlabel('Time (sec)')
ylabel('Signal Amplitude')
legend('Original Signal','Interpolated Signal',...
   'location','north')
hold off;

Figure contains an axes. The axes contains 2 objects of type stem. These objects represent Original Signal, Interpolated Signal.

Использование info функции в 'long' , получить длины слов и дроби секций фильтра с фиксированной точкой и выходные данные фильтра.

info(cicint,'long')
ans = 
    'Discrete-Time FIR Multirate Filter (real)                    
     -----------------------------------------                    
     Filter Structure      : Cascaded Integrator-Comb Interpolator
     Interpolation Factor  : 2                                    
     Differential Delay    : 1                                    
     Number of Sections    : 2                                    
     Stable                : Yes                                  
     Linear Phase          : Yes (Type 1)                         
                                                                  
                                                                  
     Implementation Cost                                          
     Number of Multipliers            : 0                         
     Number of Adders                 : 4                         
     Number of States                 : 4                         
     Multiplications per Input Sample : 0                         
     Additions per Input Sample       : 6                         
     
     
     Fixed-Point Info
     Section word lengths     : 17  17  17  17
     Section fraction lengths : 14  14  14  14
     Output  word length      : 17
     Output  fraction length  : 14
     '

Использование getFixedPointInfo можно определить длины слов и длины дробей в секциях с фиксированной точкой и выходные данные dsp.CICDecimator и dsp.CICInterpolator Системные объекты. Типы данных секций фильтра и выходные данные зависят от FixedPointDataType свойства фильтра System object™.

Полная точность

Создать dsp.CICDecimator объект. Значение по умолчанию для NumSections свойство имеет значение 2. Это значение указывает на наличие двух секций интегратора и гребенки. Векторы WL и FL, возвращаемые getFixedPointInfo функция содержит пять элементов каждый. Первые два элемента представляют две секции интегратора. Третий и четвертый элементы представляют две гребенчатые секции. Последний элемент представляет выходной сигнал фильтра.

cicD = dsp.CICDecimator
cicD = 
  dsp.CICDecimator with properties:

      DecimationFactor: 2
     DifferentialDelay: 1
           NumSections: 2
    FixedPointDataType: 'Full precision'

По умолчанию FixedPointDataType свойство объекта имеет значение 'Full precision'. Вызов getFixedPointInfo функция на этом объекте с вводимым числовым типом, nt, дает следующие векторы длины слова и длины дроби.

nt = numerictype(1,16,15)
nt =


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15
[WLs,FLs] = getFixedPointInfo(cicD,nt) %#ok
WLs = 1×5

    18    18    18    18    18

FLs = 1×5

    15    15    15    15    15

Дополнительные сведения о вычислении длин слов и дробей см. в описании параметра «Выходные аргументы».

При блокировке cicD объект, передавая вход в его алгоритм, не нужно передавать nt аргумент для getFixedPointInfo функция.

input = int64(randn(8,1))
input = 8x1 int64 column vector

    1
    2
   -2
    1
    0
   -1
    0
    0

output = cicD(input)
output=4×1 object
     0
     1
     3
     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 66
        FractionLength: 0

[WLs,FLs] = getFixedPointInfo(cicD) %#ok
WLs = 1×5

    66    66    66    66    66

FLs = 1×5

     0     0     0     0     0

Длина выходного слова и слова секции равна сумме длины входного слова, в данном случае 64, и количества секций, 2. Длина доли на выходе и в разрезе равна 0, так как вход является встроенным целым числом.

Минимальная длина слова сечения

Деблокируйте объект и измените FixedPointDataType свойство для 'Minimum section word lengths'. Определение сечения и вывод информации с фиксированной точкой при вводе данных с фиксированной точкой, fi(randn(8,2),1,24,15).

release(cicD);
cicD.FixedPointDataType = 'Minimum section word lengths'
cicD = 
  dsp.CICDecimator with properties:

      DecimationFactor: 2
     DifferentialDelay: 1
           NumSections: 2
    FixedPointDataType: 'Minimum section word lengths'
      OutputWordLength: 32

inputF = fi(randn(8,2),1,24,15)
inputF=8×2 object
    3.5784   -0.1241
    2.7694    1.4897
   -1.3499    1.4090
    3.0349    1.4172
    0.7254    0.6715
   -0.0630   -1.2075
    0.7148    0.7172
   -0.2050    1.6302

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 24
        FractionLength: 15

[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF)) %#ok
WLs = 1×5

    26    26    26    26    32

FLs = 1×5

    15    15    15    15    21

Указание длины слов и дробей

Изменить FixedPointDataType свойство для 'Specify word and fraction lengths'. Определение информации с фиксированной точкой с помощью getFixedPointInfo функция.

cicD.FixedPointDataType = 'Specify word and fraction lengths'
cicD = 
  dsp.CICDecimator with properties:

          DecimationFactor: 2
         DifferentialDelay: 1
               NumSections: 2
        FixedPointDataType: 'Specify word and fraction lengths'
        SectionWordLengths: [16 16 16 16]
    SectionFractionLengths: 0
          OutputWordLength: 32
      OutputFractionLength: 0

[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF)) %#ok
WLs = 1×5

    16    16    16    16    32

FLs = 1×5

     0     0     0     0     0

Длины сечения и выходных слов и дроби присваиваются по соответствующим свойствам фиксированной точки cicD объект. Эти значения не определяются входным числовым типом. Для подтверждения вызовите getFixedPointInfo функция без передачи numerictype входной аргумент.

[WLs, FLs] = getFixedPointInfo(cicD) %#ok
WLs = 1×5

    16    16    16    16    32

FLs = 1×5

     0     0     0     0     0

Задание длины слова

Чтобы задать длины слов раздела фильтра и вывода, установите значение FixedPointDataType свойство для 'Specify word lengths'.

cicD.FixedPointDataType = 'Specify word lengths'
cicD = 
  dsp.CICDecimator with properties:

      DecimationFactor: 2
     DifferentialDelay: 1
           NumSections: 2
    FixedPointDataType: 'Specify word lengths'
    SectionWordLengths: [16 16 16 16]
      OutputWordLength: 32

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

[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF))
WLs = 1×5

    16    16    16    16    32

FLs = 1×5

     5     5     5     5    21

Дополнительные сведения о том, как функция вычисляет длину слова и дроби, см. в описании параметра «Выходные аргументы».

Подробнее

развернуть все

Алгоритмы

развернуть все

Ссылки

[1] Хогенауэр, Е. Б. «Экономичный класс цифровых фильтров для децимации и интерполяции». Транзакции IEEE по акустике, обработке речи и сигналов. Том 29, номер 2, 1981, 155-162.

[2] Цифровая обработка сигналов Meyer-Baese, U. с помощью программируемых на местах логических матриц. Нью-Йорк: Спрингер, 2001.

[3] Харрис, Фредрик Дж. Многоскоростная обработка сигналов для систем связи. Индианаполис, IN: Prentice Hall PTR, 2004.

Расширенные возможности

.
Представлен в R2012a