Интерполяция сигнала с помощью каскадного интеграторно-гребенчатого фильтра
dsp.CICInterpolator Система object™ интерполирует входной сигнал, используя каскадный интеграторно-гребенчатый (CIC) интерполяционный фильтр. Структура интерполяционного фильтра CIC состоит из N секций каскадных гребенчатых фильтров с последующим изменением скорости на коэффициент R, за которыми следуют N секций каскадных интеграторов. Дополнительные сведения см. в разделе Алгоритмы. Свойство NumSections указывает N, количество секций в фильтре CIC. Свойство InterpolationFactor определяет коэффициент интерполяции R. getFixedPointInfo функция возвращает длины слов и дроби секций с фиксированной точкой и выходные данные для dsp.CICInterpolator Системный объект. Можно также создать код HDL для этого системного объекта с помощью generatehdl функция.
Примечание
Для этого объекта требуется лицензия Fixed-Point Designer™.
Для интерполяции сигнала с помощью фильтра CIC:
Создать dsp.CICInterpolator и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
создает объект CIC interpolation System, который применяет фильтр интерполяции CIC к входному сигналу.cicInterp = dsp.CICInterpolator
создает объект интерполяции CIC с помощью cicInterp = dsp.CICInterpolator(R,M,N)InterpolationFactor свойство имеет значение R, DifferentialDelay свойство имеет значение M, и NumSections свойство имеет значение N.
создает объект интерполяции CIC с заданным значением каждого свойства. Заключите каждое имя свойства в отдельные кавычки. Этот синтаксис можно использовать с любыми предыдущими комбинациями входных аргументов.cicInterp = dsp.CICInterpolator(Name,Value)
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
InterpolationFactor - Коэффициент интерполяции2 (по умолчанию) | положительное целое числоКоэффициент интерполяции входного сигнала, определяемый как положительное целое число.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
DifferentialDelay - Дифференциальная задержка секций гребенки фильтра1 (по умолчанию) | положительное целое числоЗначение дифференциальной задержки, используемое в каждой из гребенчатых секций фильтра, задается как положительное целое число. Дополнительные сведения см. в разделе Алгоритмы. Если дифференциальная задержка имеет встроенный тип данных целого класса, коэффициент интерполяции должен быть одним и тем же типом данных целого числа или double. Например, если дифференциальной задержкой является int8, тогда коэффициент интерполяции должен быть int8 или double.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
NumSections - Количество интеграторных и гребенчатых секций2 (по умолчанию) | положительное целое числоЧисло интеграторных и гребенчатых секций фильтра CIC, указанных как положительное целое число. Это число указывает количество секций либо в гребенчатой части, либо в интеграторной части фильтра. Общее число секций в фильтре CIC вдвое превышает число секций, заданное этим свойством.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
FixedPointDataType - Обозначения свойств с фиксированной точкойFull precision (по умолчанию) | Minimum section word lengths | Specify word lengths | Specify word and fraction lengthsОбозначения свойств с фиксированной точкой, указанные как одно из следующих:
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.
SectionWordLengths - Длины слов с фиксированной точкой для каждой секции фильтра[16 16 16 16] (по умолчанию) | скаляр | векторДлины слов с фиксированной точкой для каждого раздела фильтра, заданные как скаляр или вектор строки целых чисел. Длина слова должна быть больше или равна 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
SectionFractionLengths - Длины долей с фиксированной точкой для каждой секции фильтра0 (по умолчанию) | скаляр | векторДлины дробей с фиксированной точкой, используемые для каждой секции фильтра, задаваемые как скаляр или вектор строки целых чисел. Длина дроби может быть отрицательной, 0 или положительной. Если указан скаляр, значение применяется ко всем разделам фильтра. Если задан вектор, он должен иметь длину 2 × NumSections.
Пример: -2
Пример: [-2 0 5 8]
Это свойство применяется при установке FixedPointDataType свойство для 'Specify word and fraction lengths'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
OutputWordLength - Длина слова с фиксированной точкой для вывода фильтра32 (по умолчанию) | скалярное целое числоДлина слова с фиксированной точкой для вывода фильтра, заданная как скалярное целое число, большее или равное 2.
Это свойство применяется при установке FixedPointDataType свойство для одного из 'Minimum section word lengths', 'Specify word lengths', или 'Specify word and fraction lengths'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
OutputFractionLength - Длина фракции с фиксированной точкой для выхода фильтра0 (по умолчанию) | скалярное целое числоДлина дроби с фиксированной точкой для вывода фильтра, заданная как скалярное целое число.
Это свойство применяется при установке FixedPointDataType свойство для 'Specify word and fraction lengths'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
интерполирует входные данные с помощью интерполятора CIC.cicInterpOut = cicInterp(input)
input - Ввод данныхВвод данных, заданный как вектор или матрица. Если входные данные имеют один или два типа данных, параметры свойств, относящиеся к типам данных с фиксированной точкой, игнорируются.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да
cicInterpOut - выход интерполятора CICИнтерполированный выходной сигнал, возвращаемый в виде вектора или матрицы. Размер выходного кадра равен (InterpolationFactor) × размеру входного кадра. Сложность выходных данных соответствует сложности входных данных. Если вход single или doubleтип выходных данных соответствует типу входных данных.
Если входные данные имеют встроенный целочисленный тип данных или тип данных с фиксированной точкой, длина выходного слова и длина дроби зависят от настройки типа данных с фиксированной точкой, выбранной с помощью свойства FixedStartDataType.
Полная точность
Когда FixedPointDataType свойство имеет значение 'Full precision', применяется следующее отношение:
FLinput
где,
WLoutput - длина слова выходных данных.
FLoutput - длина фракции выходных данных.
WLinput - длина входных данных.
FLinput - длина фракции входных данных.
NumSect - количество секций в фильтре CIC, указанное в свойстве NumSections.
Входные данные WLinput и FLinput наследуются из входных данных, передаваемых алгоритму объекта. Для встроенных целочисленных входов длина дроби равна 0.
Минимальная длина слова сечения
Когда FixedPointDataType свойство имеет значение 'Minimum section word lengths', длина выходного слова - это значение, указанное в свойстве OutputWordLength. Выходная длина дроби FL задается следующим уравнением:
NumSect)
Указание длины слов и дробей
Когда FixedPointDataType имеет значение 'Specify word and fraction lengths', длина выходного слова и длина дроби являются значениями, заданными в свойствах OutputWordLength и OutputFracityLength.
Задание длины слова
Когда FixedPointDataType имеет значение 'Specify word lengths', длина выходного слова - это значение, указанное в OutputWordLength собственность. Выходная длина дроби FL задается следующим уравнением:
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 |
Для получения списка методов анализа фильтра, поддерживаемых данным объектом, введите 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'. Этот способ генерирования синусоидального сигнала требует, чтобы период каждой синусоиды на выходе был равномерно разделен на период выборки. То есть ki должно быть целым значением для каждого канала i = 1, 2,..., N. Значение Ts равно 1/Fs, переменная fi - это частота синусоидального сигнала, а Fs - частота дискретизации сигнала. Другими словами, отношение Fs/fi должно быть целым числом. Дополнительные сведения см. в разделе Алгоритмы на dsp.SineWave страница объекта.
В этом примере устанавливается на 22050 Гц, а - на 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 функция. Этот коэффициент усиления равен коэффициенту усиления ступени интерполяционного фильтра CIC и равен 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;

Использование 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) %#okWLs = 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) %#okWLs = 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)) %#okWLs = 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)) %#okWLs = 1×5
16 16 16 16 32
FLs = 1×5
0 0 0 0 0
Длины сечения и выходных слов и дроби присваиваются по соответствующим свойствам фиксированной точки cicD объект. Эти значения не определяются входным числовым типом. Для подтверждения вызовите getFixedPointInfo функция без передачи numerictype входной аргумент.
[WLs, FLs] = getFixedPointInfo(cicD) %#okWLs = 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
Дополнительные сведения о том, как функция вычисляет длину слова и дроби, см. в описании параметра «Выходные аргументы».
CIC-фильтры представляют собой оптимизированный класс линейных фазовых КИХ-фильтров, состоящих из гребенчатой части и интеграторной части.
Фильтр интерполяции CIC концептуально задается устройством повышающей дискретизации, за которым следует односкоростной фильтр CIC H (z), который является низкочастотным антиизображающим фильтром. Интерполяционный фильтр CIC увеличивает частоту дискретизации входного сигнала на целочисленный коэффициент, используя каскадный интеграторно-гребенчатый фильтр (CIC).

В более эффективной реализации односкоростной фильтр CIC H (z) факторизируется следующим образом :
(1 − z − 1) N = HCN (z)· HIN (z)
где,
HC - передаточная функция N секций каскадных гребенчатых фильтров, каждая шириной RM.
HI - передаточная функция интеграторной части фильтра, содержащей N ступеней интеграторов.
N - количество секций. Количество секций в фильтре CIC определяется как количество секций в гребенчатой или интеграторной части фильтра. Это значение не представляет общее количество сечений во всем фильтре.
R - коэффициент интерполяции.
M - дифференциальная задержка.
В общей многоскоростной реализации алгоритм применяет благородную идентичность для интерполяции и перемещает коэффициент изменения скорости R для следования за N секциями каскадных гребенчатых фильтров.
Передаточная функция результирующего фильтра задается следующим уравнением:
(1 − z − 1) N.
Блок-схему, показывающую реализацию нескольких скоростей, см. в разделе Алгоритмы.
Интерполяционный фильтр CIC в More About реализуется как каскад из N секций гребенчатых фильтров с последующим изменением скорости на коэффициент R, за которым следуют N секций каскадных интеграторов.

На этой диаграмме показаны две секции каскадных гребенчатых фильтров и две секции каскадных интеграторов. Единичная задержка в интеграторной части фильтра CIC может быть расположена либо в канале прямой связи, либо в канале обратной связи. Эти две конфигурации дают одинаковую частотную характеристику фильтра. Однако числовые выходные сигналы от этих двух конфигураций отличаются из-за задержки. Этот алгоритм помещает единичную задержку в тракт прямой связи интегратора, поскольку она является предпочтительной конфигурацией для реализации ЛПВП.
[1] Хогенауэр, Е. Б. «Экономичный класс цифровых фильтров для децимации и интерполяции». Транзакции IEEE по акустике, обработке речи и сигналов. Том 29, номер 2, 1981, 155-162.
[2] Цифровая обработка сигналов Meyer-Baese, U. с помощью программируемых на местах логических матриц. Нью-Йорк: Спрингер, 2001.
[3] Харрис, Фредрик Дж. Многоскоростная обработка сигналов для систем связи. Индианаполис, IN: Prentice Hall PTR, 2004.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Диаграмма сигналов с фиксированной точкой показывает типы данных, которые dsp.CICInterpolator объект использует для сигналов с фиксированной точкой.

где,
secNT = numerictype(1,secWL,secFL)
outNT = numertictype(1,outWL,outFL)
secWL - длина слова раздела, заданная с помощью свойства SureWordLengths.
secFL - длина фракции сечения, заданная с помощью свойства SityFracityLengths.
outWL - длина выходного слова, заданная с помощью свойства OutputWordLength.
outFL - длина выходной дроби, заданная с помощью свойства OutputFracityLength.
Значение NumSections на этой диаграмме - 2.
freqz | fvtool | gain | generatehdl | getFixedPointInfo | impz | info | phasezИмеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.