exponenta event banner

dsp. CICDecimator

Прореживание сигнала с помощью каскадного интеграторно-гребенчатого фильтра (CIC)

Описание

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

Примечание

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

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

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

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

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

Создание

Описание

пример

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

пример

cicDecim = dsp.CICDecimator(R,M,N) создает объект прореживания CIC с помощью DecimationFactor свойство имеет значение R, DifferentialDelay свойство имеет значение M, и NumSections свойство имеет значение N.

cicDecim = dsp.CICDecimator(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 и cicDecimOut аргумент.

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

  • 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

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

Описание

пример

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

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

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

Ввод данных, заданный как вектор или матрица. Число строк на входе должно быть кратным значению DecimationFactor. Если вход имеет значение single или double тип данных, параметры свойств, связанные с типами данных с фиксированной точкой, игнорируются.

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

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

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

Прореженный выходной сигнал, возвращаемый в виде вектора или матрицы. Размер выходного кадра равен (1 ∕ DecimationFactor) × размер входного кадра. Сложность выходных данных соответствует сложности входных данных. Если вход 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. Длина выходной фракции, FLoutput, задается следующим образом:

FLoutput = WLoutput (WLinput − FLinput + NumSect)

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

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

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

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

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.CICDecimator.helpFilterAnalysis в командной строке MATLAB ®. Соответствующие страницы ссылок на функции см. в разделе Методы анализа для фильтрации системных объектов.

Примеры

свернуть все

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

Создать dsp.CICDecimator object™ системы с DecimationFactor установите в значение 4. Прорежьте сигнал от 44,1 кГц до 11,025 кГц.

cicdec = dsp.CICDecimator(4);  
cicdec.FixedPointDataType = 'Minimum section word lengths'; 
cicdec.OutputWordLength = 16;

Создайте синусоидальный входной сигнал с фиксированной точкой из 1024 выборок с частотой дискретизации 44,13 Гц.

Fs = 44.1e3;             
n = (0:1023)';            % 0.0232 sec signal
x = fi(sin(2*pi*1e3/Fs*n),true,16,15);

Создать dsp.SignalSource объект.

src = dsp.SignalSource(x,64);

Прорежьте выходной сигнал с помощью 16 выборок на кадр.

y = zeros(16,16);
for ii = 1:16
     y(ii,:) = cicdec(src());   
end

Постройте график первого кадра исходного и прореженного сигналов. Задержка вывода составляет 2 выборки.

gainCIC = ...
   (cicdec.DecimationFactor*cicdec.DifferentialDelay)^cicdec.NumSections;
stem(n(1:56)/Fs,double(x(4:59))) 
hold on;     
stem(n(1:14)/(Fs/cicdec.DecimationFactor),double(y(1,3:end))/gainCIC,'r','filled')
xlabel('Time (sec)')
ylabel('Signal Amplitude')
legend('Original signal','Decimated signal','Location','north')
hold off;

Figure contains an axes. The axes contains 2 objects of type stem. These objects represent Original signal, Decimated signal.

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

info(cicdec,'long')
ans = 
    'Discrete-Time FIR Multirate Filter (real)               
     -----------------------------------------               
     Filter Structure    : Cascaded Integrator-Comb Decimator
     Decimation Factor   : 4                                 
     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       : 2.5                  
     
     
     Fixed-Point Info
     Section word lengths     : 20  19  19  18
     Section fraction lengths : 15  14  14  13
     Output  word length      : 16
     Output  fraction length  : 11
     '

Использование 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