dsp.CICInterpolator

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

Описание

The 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, который применяет фильтр интерполяции 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

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

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

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

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

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

WLoutput=WLinput+NumSectFLoutput=FLinput

где,

  • WL выход - Размер слова выходных данных.

  • FL выход - Длина дроби выходных данных.

  • WL вход -- Размер слова входных данных.

  • FL вход -- Длина дроби входных данных.

  • NumSect - Количество разделов в CIC-фильтре, заданное свойством NumSections.

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

Минимальные размеры слова разделов

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

FLoutput=WLoutput(WLinputFLinput+NumSect)

Задайте длины слова и дроби

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

Задайте размеры слова

Когда FixedPointDataType установлено в 'Specify word lengths', выход размера слова является значением, заданным в OutputWordLength свойство. Длина выходной дроби, FLoutput, задается следующим уравнением:

FLoutput=WLoutput(WLinputFLinput+NumSect)

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

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

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

release(obj)

расширить все

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

Для списка методов анализа фильтров, которые поддержки этот объект, введите 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/fiTs=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

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

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

    16    16    16    16    32

FLs = 1×5

     5     5     5     5    21

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

Подробнее о

расширить все

Алгоритмы

расширить все

Ссылки

[1] Hogenauer, E.B. «Economical Class of Цифровые Фильтры for Decimation and Interpolation». Транзакции IEEE по акустике, обработке речи и сигналов. Том 29, Число 2, 1981, 155-162.

[2] Meyer-Baese, U. Digital Signal Processing with Field Programmable Gate Arrays. Нью-Йорк: Спрингер, 2001.

[3] Harris, Fredric J. Multirate Signal Processing for Communication Systems. Индианаполис, IN: Prentice Hall PTR, 2004.

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

.
Введенный в R2012a