Линейная или многофазная КИХ-интерполяция
dsp.Interpolator
Система object™ интерполирует значения между входными выборками с действительным знаком с помощью линейной или многофазной КИХ-интерполяции. Задайте который значения интерполировать путем обеспечения вектора точек интерполяции. Точка интерполяции 1 относится к первой выборке во входе. Чтобы интерполировать значение на полпути между второй и третьей выборкой во входе, задайте точку интерполяции 2,5. Точки интерполяции, которые не являются в допустимой области значений, заменяются самым близким значением в допустимой области значений.
Интерполировать входной сигнал с действительным знаком:
Создайте dsp.Interpolator
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
создает Системный объект интерполяции, interp
= dsp.Interpolatorinterp
, интерполировать значения между входными выборками с действительным знаком с помощью линейной интерполяции.
создает Системный объект интерполяции, interp
= dsp.Interpolator(Name,Value
)interp
, с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в одинарные кавычки.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).
InterpolationPointsSource
— Источник точек интерполяции'Property'
(значение по умолчанию) | 'Input port'
Метод, чтобы задать точки интерполяции, заданные как одно из следующего:
'Property'
— Задайте точки интерполяции через свойство InterpolationPoints.
'Input port'
— Передайте точки интерполяции как вход к алгоритму Системного объекта.
InterpolationPoints
— Точки интерполяции
(значение по умолчанию) | вектор | матрица | N-D массивТочки интерполяции, заданные как вектор, матрица или N-D массив. Допустимая область значений значений в векторе интерполяции от 1 до количества выборок в каждом канале входа. Если вы задаете точки интерполяции вне допустимой области значений, объект отсекает точку к самой близкой точке в допустимой области значений. Например, если входом является [2;3.1;-2.1]
, допустимая область значений точек интерполяции от 1
к 3
. Если вы задаете [-1;1.5;2;2.5;3;3.5]
вектор точек интерполяции, объект интерполятора отсекает -1
к 1
и 3.5
к 3
. Это усечение приводит к точкам интерполяции [1 1.5 2 2.5 3 3]
.
Для получения дополнительной информации на размерности массива точек интерполяции и как это влияет на размерность выхода, см. таблицы в ipts входе Системного объекта.
Настраиваемый: да
Это свойство применяется только, когда вы устанавливаете свойство InterpolationPointsSource на 'Property'
.
Method
метод интерполяции'Linear'
(значение по умолчанию) | 'FIR'
Метод интерполяции, заданный как одно из следующего:
'Linear'
– Объект интерполирует значения данных путем предположения, что данные варьируются линейно между выборками, взятыми в смежных шагах расчета.
'FIR'
– Объект использует многофазную интерполяцию, чтобы заменить фильтрацию (свертка) на сверхдискретизированном уровне с серией сверток на более низком уровне. Если вход имеет недостаточные выборки с низкой ставкой, чтобы выполнить КИХ-интерполяцию, объект интерполятора выполняет линейную интерполяцию. Для получения дополнительной информации смотрите свойство FilterHalfLength.
FilterHalfLength
— Поясной из фильтра интерполяции
(значение по умолчанию) | целочисленный скаляр, больше, чем 0Для фильтра, поясного из P, многофазные КИХ-подфильтры имеют длину 2P. КИХ-интерполяция всегда требует 2P выборки с низкой ставкой для каждой точки интерполяции.
Если точка интерполяции не соответствует выборке с низкой ставкой, КИХ-интерполяция требует P выборки с низкой ставкой ниже и P выборки с низкой ставкой выше точки интерполяции.
Если точка интерполяции соответствует выборке с низкой ставкой, 2P-демонстрационное требование включает выборку с низкой ставкой.
Если вход имеет меньше, чем 2P, граничащий с выборками с низкой ставкой, объект интерполятора использует линейную интерполяцию.
Например, для входа [1 4 1 4 1 4 1 4]
, сверхдискретизировав фактором 4 результатов в равномерно распределенных точках интерполяции, InterP = [1:0.25:8]
. Точки InterP(9:12)
[3.0 3.25 3.5 3.75]
. Если вы устанавливаете FilterHalfLength
к 2, интерполируя в этих точках использует 4 выборки с низкой ставкой от входа с индексами (2,3,4,5)
. Если вы устанавливаете FilterHalfLength
к 4, объект интерполятора использует линейную интерполяцию, потому что вход не имеет достаточных выборок с низкой ставкой, чтобы выполнить КИХ-интерполяцию.
Дольше FilterHalfLength
свойство, лучше качество интерполяции. Однако увеличение фильтра поясное время вычисления увеличений и требует большего количества выборок с низкой ставкой ниже и выше точки интерполяции. В общем случае установка FilterHalfLength
свойство между 4 и 6 обеспечивает довольно точную интерполяцию.
Это свойство применяется только, когда вы устанавливаете свойство Method на 'FIR'
.
InterpolationPointsPerSample
— Повышающая дискретизация фактора
(значение по умолчанию) | целочисленный скаляр, больше, чем 0Повышающая дискретизация фактора, заданного как целочисленный скаляр, больше, чем 0. Фактор повышающей дискретизации L вставляет L – 1 нуль между выборками с низкой ставкой. Результаты интерполяции фильтрации сверхдискретизированной последовательности с реконструкционным фильтром lowpass. Объект интерполятора использует многофазную КИХ-реализацию с InterpolationPointsPerSample
подфильтры длины 2P, где P является значением, вы задаете в свойстве FilterHalfLength. Для nL выборки с низкой ставкой в сверхдискретизированном входе, где n=1,2,..., объект интерполятора использует точно один из InterpolationPointsPerSample
подфильтры, чтобы интерполировать в точках nL+i/L, где i = 0, 1, 2, …, L – 1.
Если вы задаете точки интерполяции, которые не соответствуют многофазному подфильтру, объект округляет точку в меньшую сторону до самой близкой точки интерполяции, сопоставленной с многофазным подфильтром. Предположим, что вы устанавливаете InterpolationPointsPerSample
свойство к 4 и интерполирует в точках [3 3.2 3.4 3.6 3.8]
. Объект интерполятора использует первый многофазный подфильтр в точках [3.0 3.2]
, второй подфильтр для точки 3.4
, третий подфильтр для точки 3.6
, и четвертый подфильтр для точки 3.8
.
Это свойство применяется только, когда вы устанавливаете свойство Method на 'FIR'
.
Bandwidth
— Нормированная входная пропускная способность
(значение по умолчанию) | действительный скаляр, больше, чем 0 и меньше чем или равный 1Пропускная способность, к которой должны быть ограничены интерполированные выходные выборки, задала как действительный скаляр, больше, чем 0 и меньше чем или равный 1. Значение 1 равняется частоте Найквиста или половине частоты дискретизации, Fs. Используйте это свойство использовать в своих интересах bandlimited содержимое частоты входа. Например, если входной сигнал не имеет содержимого частоты выше Fs/4, можно задать значение 0,5 для Bandwidth
свойство.
Это свойство применяется только, когда вы устанавливаете свойство Method на 'FIR'
.
выводит интерполированную последовательность, interpOut
= interp(input
)interpOut
, из входного вектора или матричного input, как задано в свойстве InterpolationPoints. Каждый столбец input
обработан как независимый канал входа.
выводит интерполированную последовательность, как задано interpOut
= interp(input
,ipts
)ipts
.
Чтобы задать точки интерполяции, установите свойство InterpolationPointsSource на 'Input port'
.
t = 0:.0001:.0511; x = sin(2*pi*20*t); x1 = x(1:50:end); ipts = 1:0.1:length(x1); interp = dsp.Interpolator('InterpolationPointsSource','Input port'); interpOut = interp(x1',ipts');
input
— Ввод данныхВведите, который интерполирован объектом, заданным как вектор, матрица или N-D массив.
Пример: t = 0:0.0001:0.0511; введите = sin (2*pi*20*t);
Типы данных: single
| double
ipts
— Точки интерполяцииМассив интерполяции I Pts, заданный как вектор, матрица или N-D массив. Массив интерполяции представляет моменты времени, в которых можно интерполировать значения входного сигнала. Запись 1 в I, который Pts отсылает к первой выборке входа, записи 2,5, относится к выборке на полпути между второй и третьей входной выборкой и так далее. В большинстве случаев, когда I, Pts является вектором, это может иметь любую длину.
Допустимые значения в массиве интерполяции I Pts лежат в диапазоне от 1 до количества выборок в каждом канале входа. Например, учитывая длину 5 входных векторов D
, все записи I Pts должны лежать в диапазоне от 1 до 5. I Pts не может содержать записи такой как 7 или –9, потому что D
не имеет седьмой или девятой записи.
Алгоритм заменяет любые значения из области значений в I Pts с самым близким значением в допустимой области значений (от 1 до количества входных выборок). Затем это выполняет интерполяцию с помощью отсеченной версии I Pts.
Рассмотрите следующий вектор входных данных и точек интерполяции:
D = [11 22 33 44]'
IPts = [10 2.6 -3]'
Поскольку D
имеет четыре выборки, допустимый диапазон точек интерполяции от 1 до 4. Алгоритм отсекает точку интерполяции 10 вниз к к 4 и точка-3 до 1. Результатом является отсеченный вектор интерполяции IPtsClipped = [4 2.6 1]'
.
В зависимости от размерности входа и размерности I Pts, алгоритм применяет I Pts к входу одним из следующих способов:
Если IPts является массивом, объект применяет IPts через первую размерность N-D массив, приводящий к N-D массив выход.
Если IPts является вектором, объект применяет IPts к каждому входному вектору (как будто входной вектор был одним каналом), приводя к векторному выходу с той же ориентацией как вход (строка или столбец).
Следующие таблицы подводят итог, как объект применяет массив интерполяции IPts ко всем возможным типам входных параметров. Таблица также показывает получившиеся выходные размерности.
Эта таблица описывает поведение когда InterpolationPointsSource
установлен в 'Property'
.
Введите размерности | Допустимые размерности массива интерполяции I Pts | Как объект применяет I Pts, чтобы ввести | Выведите размерности |
---|---|---|---|
M-by-N-by-K матрица |
P-by-1 столбец |
Применяет I Pts к первой размерности входа |
P-by-N-by-K массив |
P-by-N-by-K матрица |
Применяет каждый элемент столбца IPts к соответствующему столбцу входной матрицы |
P-by-N-by-K массив | |
M-by-N матрица |
1 N строкой |
Применяет каждый элемент столбца IPts к соответствующему столбцу входной матрицы |
1 N строкой |
P-by-1 столбец |
Применяет I Pts к каждому входному столбцу |
P-by-N матрица | |
P-by-N матрица |
Применяет столбцы I Pts к соответствующим столбцам входной матрицы | ||
M-by-1 столбец |
1 P строкой (алгоритм обрабатывает I Pts как столбец), |
Применяет I Pts к входному столбцу |
P-by-1 столбец |
P-by-1 столбец | |||
1 N строкой (не рекомендуемый) |
1 N строкой |
Не применяется. Объект копирует входной вектор. |
1 N строкой, копией входного вектора |
P-by-1 столбец |
P-by-N матрица, где каждая строка является копией входного вектора | ||
P-by-N матрица |
Эта таблица описывает поведение когда InterpolationPointsSource
установлен в 'Input port'
.
Введите размерности | Допустимые размерности массива интерполяции I Pts | Как объект применяет I Pts, чтобы ввести | Выведите размерности |
---|---|---|---|
M-by-N-by-K матрица | Вектор-столбец длины P |
Применяет I Pts к первой размерности входа |
P-by-N-by-K массив |
P-by-N-by-K матрица |
Применяет каждый элемент столбца I Pts к соответствующему столбцу входной матрицы |
P-by-N-by-K массив | |
M-by-N матрица |
1 N строкой |
Применяет каждый элемент столбца I Pts к соответствующему столбцу входной матрицы |
1 N строкой |
P-by-1 столбец |
Применяет I Pts к каждому входному столбцу |
P-by-N матрица | |
P-by-N матрица |
Применяет столбцы I Pts к соответствующим столбцам входной матрицы | ||
M-by-1 столбец |
1 P строкой |
Применяет I Pts к входному столбцу |
P-by-1 столбец |
P-by-1 столбец | |||
1 N строкой (не рекомендуемый) |
1 N строкой |
Не применяется. Объект копирует входной вектор. |
1 N строкой, копией входного вектора |
P-by-1 столбец |
P-by-N матрица, где каждая строка является копией входного вектора | ||
P-by-N матрица |
Пример: ipts = [1:10];
Типы данных: single
| double
interpOut
— Интерполированная последовательностьИнтерполированная последовательность, возвращенная как вектор, матрица или N-D массив. Размерность выхода зависит от размерностей входа и массива точек интерполяции. Для получения дополнительной информации о размерностях см. таблицы в ipts.
Типы данных: single
| double
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj
, используйте этот синтаксис:
release(obj)
Примечание: Если вы используете R2016a или ранее, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x)
становится step(obj,x)
.
x = [1 4]; x = repmat(x,1,4); x1 = 1:0.25:8; firInterp = dsp.Interpolator('Method','FIR','FilterHalfLength',2,... 'InterpolationPoints',x1','InterpolationPointsPerSample',4); linInterp = dsp.Interpolator('InterpolationPoints',x1'); OutFIR = firInterp(x'); OutLin = linInterp(x'); stem(OutFIR,'b-.','linewidth',2); hold on; stem(OutLin,'r','markerfacecolor',[1 0 0]); axis([0 30 0 5]); legend('FIR','Linear','Location','Northeast');
Точки интерполяции в индексах 1 - 5 и 25 - 29 не имеют достаточных выборок с низкой ставкой, окружающих их, чтобы использовать КИХ-интерполяцию с заданной длиной фильтра. Поэтому объект интерполятора использует линейную интерполяцию вместо этого.
Примечание: Если вы используете R2016a или ранее, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x)
становится step(obj,x)
.
t = 0:.0001:.0511; x = sin(2*pi*20*t); x1 = x(1:50:end); I = 1:0.1:length(x1); interp = dsp.Interpolator('InterpolationPointsSource',... 'Input port'); y = interp(x1',I'); stem(I',y, 'r'); title('Original and Interpolated Signal'); hold on; stem(x1, 'Linewidth', 2); legend('Interpolated','Original');
Примечание: Если вы используете R2016a или ранее, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x)
становится step(obj,x)
.
Интерполируйте сумму синусоид с КИХ-интерполяцией, и с 'Input port' как источник точек интерполяции.
Fs = 1000; t = 0:(1/Fs):0.1-(1/Fs); x = cos(2*pi*50*t)+0.5*sin(2*pi*100*t); x1 = x(1:4:end); I = 1:(1/4):length(x1); interp = dsp.Interpolator('Method','FIR',... 'FilterHalfLength',3,'InterpolationPointsSource','Input Port'); y = interp(x1',I'); stem(I,y,'r'); hold on; axis([0 25 -2 2]); stem(x1,'b','linewidth',2); legend('Interpolated Signal','Original',... 'Location','Northeast');
Примечание: Если вы используете R2016a или ранее, заменяете каждый вызов объекта с эквивалентным step
синтаксис. Например, obj(x)
становится step(obj,x)
.
dsp.Interpolator
объект с Method
набор свойств к 'FIR'
моделирует многофазный КИХ-Интерполятор. Многофазная реализация разделяет КИХ-импульсную характеристику фильтра lowpass в несколько подфильтров. Каждый подфильтр занимает определенный узкий диапазон частот. В этом примере показано, как определить многофазные подфильтры.
Фактор повышающей дискретизации значения по умолчанию и значение по умолчанию, многофазное поясной, равняются 3. Используя эти значения, спроектируйте КИХ-фильтр линейной фазы при помощи intfilt
функция. Возвращенный фильтр имеет длину 2 * P * L-1, где P является фактором повышающей дискретизации, и L является фильтром половина длины.
interp = dsp.Interpolator('Method','FIR'); L = interp.InterpolationPointsPerSample; P = interp.FilterHalfLength; FiltCoeffs = intfilt(L,P,interp.Bandwidth); FiltLen=length(FiltCoeffs); FiltCols = ceil(FiltLen/2/L);
Фильтру нужно 2*P*L коэффициенты. Предварительно ожидая нуль не влияет на величину фильтра.
FiltCoeffs = [zeros(FiltCols*2*L-FiltLen,1); FiltCoeffs(:)];
Каждый столбец PolyPhaseCoeffs
многофазный подфильтр.
PolyPhaseCoeffs = reshape(FiltCoeffs,FiltCols,2*L)';
В режиме линейной интерполяции алгоритм интерполирует значения данных путем предположения, что данные варьируются линейно между выборками, взятыми в смежных шагах расчета.
Предположим, что входным сигналом является D = [1 2 1.5 3 0.25]'
. Левый график показывает выборки в D
и правильный график показывает линейно интерполированные значения между выборками в D
.
Когда точки интерполяции вне области значений, алгоритм отсекает недопустимые точки интерполяции. Рассмотрите входной сигнал, D = [1 2 1.5 3 0.25]'
, и вектор интерполяции, IPts = [-4 2.7 4.3 10]'
. Интерполированный выход дан [1 1.65 2.175 0.25]'
.
В КИХ-режиме интерполяции алгоритм интерполирует значения данных с помощью КИХ-фильтра интерполяции. КИХ-фильтр реализован с помощью многофазной структуры. Многофазная реализация разделяет КИХ-импульсную характеристику фильтра lowpass во многие различные подфильтры.
Позвольте L представлять количество точек интерполяции на выборку или фактор повышающей дискретизации. Позвольте P представлять половину длины многофазных подфильтров. Индексируя от нуля, если h(n) является импульсной характеристикой КИХ-фильтра, k th подфильтр:
Таблица описывает разложение КИХ-фильтра с 18 коэффициентами в 3 многофазных подфильтра длины 6, значения по умолчанию для КИХ-объекта интерполятора.
Коэффициенты | Многофазный подфильтр |
---|---|
h(0),h(3),h(6), ..., h(15) | h0(n) |
h(1),h(4),h(7), ..., h(16) | h1(n) |
h(2),h(5),h(8), ..., h(17) | h2(n) |
Фактор повышающей дискретизации L вставляет L – 1 нуль между выборками с низкой ставкой. Результаты интерполяции фильтрации сверхдискретизированной последовательности с реконструкционным фильтром lowpass.
Указания и ограничения по применению:
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
dsp.CICCompensationInterpolator
| dsp.CICInterpolator
| dsp.FIRHalfbandInterpolator
| dsp.FIRInterpolator
| dsp.IIRHalfbandInterpolator
| dsp.VariableFractionalDelay
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.