dsp. Интерполятор

Линейная или многофазная КИХ-интерполяция

Описание

Система dsp.Interpolator object™ интерполирует значения между входными выборками с действительным знаком с помощью линейной или многофазной КИХ-интерполяции. Задайте который значения интерполировать путем обеспечения вектора точек интерполяции. Точка интерполяции 1 относится к первой выборке во входе. Чтобы интерполировать значение на полпути между второй и третьей выборкой во входе, задайте точку интерполяции 2,5. Точки интерполяции, которые не являются в допустимой области значений, заменяются самым близким значением в допустимой области значений.

Интерполировать входной сигнал с действительным знаком:

  1. Создайте объект dsp.Interpolator и установите его свойства.

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

interp = dsp.Interpolator
interp = dsp.Interpolator(Name,Value)

Описание

пример

interp = dsp.Interpolator создает Системный объект интерполяции, interp, чтобы интерполировать значения между входными выборками с действительным знаком с помощью линейной интерполяции.

пример

interp = dsp.Interpolator(Name,Value)создает Системный объект интерполяции, interp, с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в одинарные кавычки.

Пример: interp = dsp. Интерполятор ('InterpolationPointsSource', 'Входной порт')

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Метод, чтобы задать точки интерполяции, заданные как одно из следующего:

  • Свойство Задайте точки интерполяции через свойство InterpolationPoints.

  • 'Input port' — Передайте точки интерполяции как вход к алгоритму Системного объекта.

Точки интерполяции, заданные как вектор, матрица или 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'.

Метод интерполяции, заданный как одно из следующего:

  • 'Linear' – Объект интерполирует значения данных путем предположения, что данные отличаются линейно между выборками, взятыми в смежных шагах расчета.

  • 'FIR' – Объект использует многофазную интерполяцию, чтобы заменить фильтрацию (свертка) на сверхдискретизированном уровне с серией сверток на более низком уровне. Если вход имеет недостаточные выборки с низкой ставкой, чтобы выполнить КИХ-интерполяцию, объект интерполятора выполняет линейную интерполяцию. Для получения дополнительной информации смотрите свойство FilterHalfLength.

Для фильтра, поясного из 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'.

Повышающая дискретизация фактора, заданного как целочисленный скаляр, больше, чем 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'.

Пропускная способность, к которой должны быть ограничены интерполированные выходные выборки, задала как действительный скаляр, больше, чем 0 и меньше чем или равный 1. Значение 1 равняется частоте Найквиста или половине частоты дискретизации, Fs. Используйте это свойство использовать в своих интересах bandlimited содержимое частоты входа. Например, если входной сигнал не имеет содержимого частоты выше Fs/4, можно задать значение 0,5 для свойства Bandwidth.

Зависимости

Это свойство применяется только, когда вы устанавливаете свойство Method на 'FIR'.

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

interpOut = interp(input)
interpOut = interp(input,ipts)

Описание

пример

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');

Входные параметры

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

Введите, который интерполирован объектом, заданным как вектор, матрица или N-D массив.

Пример: t = 0:0.0001:0.0511; введите = sin (2*pi*20*t);

Типы данных: single | double

Массив интерполяции I Pts, заданный как вектор, матрица или N-D массив. Массив интерполяции представляет моменты времени, в которых можно интерполировать значения входного сигнала. Запись 1 в I, который Pts отсылает к первой выборке входа, записи 2,5, относится к выборке на полпути между второй и третьей входной выборкой и так далее. В большинстве случаев, когда I, Pts является вектором, это может иметь любую длину.

Допустимые значения в массиве интерполяции I Pts колеблются от 1 до количества выборок в каждом канале входа. Например, учитывая длину 5 входных векторов D, все записи I Pts должен колебаться от 1 до 5. Pts I не может содержать записи такой как 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

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

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

Интерполированная последовательность, возвращенная как вектор, матрица или N-D массив. Размерность вывода зависит от размерностей входа и массива точек интерполяции. Для получения дополнительной информации на размерностях, см. таблицы в ipts.

Типы данных: single | double

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

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

release(obj)

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

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

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

Примечание: Если вы используете 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).

Интерполируйте сумму синусоид с КИХ-интерполяцией, и с 'Входным портом' как источник точек интерполяции.

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. Используя эти значения, разработайте линейный фильтр фазы FIR при помощи функции 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)';

Алгоритмы

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

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

Представленный в R2012a