dsp.FarrowRateConverter

Полиномиальный преобразователь частоты дискретизации с произвольным коэффициентом преобразования

Описание

The dsp.FarrowRateConverter Система object™ реализует фильтр преобразования аппроксимации полиномом выборки скорости с помощью структуры Farrow. Можно использовать этот объект для преобразования частоты дискретизации сигнала вверх или вниз произвольным фактором. Этот объект поддерживает операции с фиксированной точкой.

Чтобы преобразовать частоту дискретизации сигнала:

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

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

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

Создание

Описание

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

пример

frc = dsp.FarrowRateConverter(Name,Value) устанавливает свойства с помощью одной или нескольких пар "имя-значение". Заключайте каждое имя свойства в одинарные кавычки.

Пример: frc = dsp.FarrowRateConverter('Specification','Coefficients','Coefficients',[1 2; 3 4]) возвращает фильтр, который преобразуется из 44,1 кГц в 48 кГц с помощью пользовательских коэффициентов, которые реализуют полином фильтр второго порядка.

frc = dsp.FarrowRateConverter(fsIn,fsOut,tol,np) возвращает преобразователь частоты дискретизации Системный объект, frc, с InputSampleRate набора свойств для fsIn, OutputSampleRate набора свойств для fsOut, OutputRateTolerance набора свойств для tol, и PolynomialOrder набора свойств для np.

Свойства

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

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

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

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

Свойства фильтра

Частота дискретизации входного сигнала, заданная как положительная скалярная величина в Гц. Входная частота выборки должна быть больше, чем интересующая полоса пропускания.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Частота дискретизации сигнала выхода, заданная как положительная скалярная величина в Гц. Выходная частота выборки может представлять восходящий или понижающий сигнал входного сигнала.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Максимальный допуск для скорости выхода выборки, заданный как положительная скалярная величина от 0 до 0,5 включительно.

Фактическая выходная частота выборки изменяется, но находится в заданной области. Для примера, если OutputRateTolerance задается как 0.01, затем фактическая выходная частота выборки находится в области значений OutputSampleRate ± 1%. Эта гибкость часто обеспечивает более простое создание фильтра.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

  • 'Polynomial order' - Используйте PolynomialOrder свойство для задания порядка полинома Лагранжа-интерполяции-фильтра. Объект вычисляет коэффициенты, которые соответствуют свойствам скорости и допуска.

  • 'Coefficients' - Используйте Coefficients свойство, чтобы задать полиномиальные коэффициенты непосредственно.

Порядок полинома Лагранжа-интерполяции-фильтра, заданный как положительное целое число, меньше или равное 4. Объект вычисляет коэффициенты, которые соответствуют свойствам скорости и допуска.

Зависимости

Это свойство применяется только при установке Specification на 'Polynomial order'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Фильтруйте полиномиальные коэффициенты, заданные как действительная M матрица -by M, где M является полиномиальным порядком.

Схема показывает график потока сигналов для dsp.FarrowRateConverter объект с коэффициентами, установленными на [1 2; 3 4].

Каждая ветвь конечной импульсной характеристики соответствует строке матрицы коэффициентов.

Зависимости

Это свойство применяется только при установке Specification на 'Coefficients'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Свойства с фиксированной точкой

Метод округления для операций с фиксированной точкой, заданный как вектор символов. Для получения дополнительной информации о методах округления см. Раздел «Режимы округления»

Действие переполнения для операций с фиксированной точкой, заданное как 'Wrap' или 'Saturate'. Для получения дополнительной информации о действиях переполнения см. Раздел «Обработка переполнения».

Тип данных коэффициентов фильтра, заданный как со знаком numerictype (Fixed-Point Designer) объект. Тип данных по умолчанию является 16-битным numerictype со знаком объект. Вы должны задать numerictype объект без определенного масштабирования с двоичной точкой. Чтобы максимизировать точность, объект определяет длину дроби этого типа данных на основе значений коэффициентов.

Тип данных дробной задержки, заданный как беззнаковый numerictype объект. Тип данных по умолчанию является беззнаковым, 8-битным numerictype объект. Вы должны задать numerictype объект без определенного масштабирования с двоичной точкой. Чтобы максимизировать точность, объект определяет длину дроби этого типа данных на основе значений дробной задержки.

Тип данных мультипликации, заданный как numerictype со знаком объект. Тип данных по умолчанию является 16-битным numerictype со знаком объект с 13-битной длиной дроби. Вы должны задать numerictype объект, который имеет определенное двоичное масштабирование точек.

Тип данных выхода, заданный как один из следующих:

  • 'Same word length as input' - Выход слова и длина дроби совпадают с входом.

  • 'Same as accumulator' - Выход слова и длина дроби те же, что и у аккумулятора.

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

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

Синтаксис

Описание

пример

y = frc(x) повторяет преобразование входных x для создания выходов y согласно преобразованию скорости, заданному как frc.

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

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

Входной сигнал, заданный как вектор или матрица. Длина строки x должен быть кратным общему коэффициенту десятикратного уменьшения. Каждый столбец x рассматривается как отдельный канал.

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

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

Повторно дискретизированный сигнал, возвращенный как вектор или матрица.

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

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

release(obj)

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

getPolynomialCoefficientsПолучите полиномиальные коэффициенты фильтра преобразования Фарроу
getActualOutputRateПолучите фактическую скорость выхода
getRateChangeFactorsПолучите общие коэффициенты интерполяции и десятикратного уменьшения
generatehdlСгенерируйте HDL-код для квантованного DSP-фильтра (требует Filter Design HDL Coder)
freqzЧастотная характеристика фильтра в дискретном времени Системного объекта
fvtoolВизуализация частотной характеристики фильтров DSP
infoИнформация о фильтре Системный объект
costОценка стоимости реализации фильтра Системный объект
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

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

Примечание: The dsp.AudioFileWriter Системная object™ не поддерживается в MATLAB Online.

Создайте dsp.FarrowRateConverter Системная object™ для преобразования аудиосигнала с 44,1 кГц на 96 кГц. Установите полиномиальный порядок для фильтра.

fs1 = 44.1e3;
fs2 = 96e3;
LagrangeOrder = 2; % 1 = linear interpolation
frc = dsp.FarrowRateConverter('InputSampleRate',fs1,...
                              'OutputSampleRate',fs2,...
                              'PolynomialOrder',LagrangeOrder);
ar = dsp.AudioFileReader('guitar10min.ogg','SamplesPerFrame',14700);
aw = dsp.AudioFileWriter('guitar10min_96kHz.wav','SampleRate',fs2);

Проверяйте получившиеся коэффициенты интерполяции и десятикратного уменьшения.

[interp,decim] = getRateChangeFactors(frc)
interp = 320
decim = 147

Отобразите полином, который объект использует для подгонки входных выборок.

coeffs = getPolynomialCoefficients(frc)
coeffs = 3×3

    0.5000   -0.5000         0
   -1.0000         0    1.0000
    0.5000    0.5000         0

Преобразуйте 100 системы координат аудиосигнала. Запишите результат в файл.

for n = 1:1:100
   x = ar();  
   y = frc(x);
   aw(y);
end

Отпустите AudioFileWriter Системная object™ для завершения создания выходного файла.

release(aw)
release(ar)

Постройте график входа и выходных сигналов 100-ой системы координат данных. Задержите вход, чтобы компенсировать задержку фильтра.

t1 = 0:1/fs1:1/30-1/fs1;
t2 = 0:1/fs2:1/30-1/fs2;

delay = ceil((LagrangeOrder+1)/2)/fs1;
el1 = 1:length(t1)-delay;
el2 = 1:length(t2);
el2(1:delay) = [];

figure

subplot(2,1,1)
plot(t1(1:length(el1)),x(el1,1))
hold on
plot(t1(1:length(el1)),x(el1,2))
xlabel('Time (s)')
title('Input Channels')

subplot(2,1,2)
plot(t2(1:length(el2)),y(el2,1))
hold on
plot(t2(1:length(el2)),y(el2,2))
xlabel('Time (s)')
title('Output Channels')

Figure contains 2 axes. Axes 1 with title Input Channels contains 2 objects of type line. Axes 2 with title Output Channels contains 2 objects of type line.

Масштабирование, чтобы увидеть различие в скоростях дискретизации.

figure

subplot(2,1,1)
plot(t1(1:length(el1)),x(el1,1),'o-')
hold on
plot(t2(1:length(el2)),y(el2,1),'d--')
xlim([0.0104 0.0107])
title('First Channel')
xlabel('Time (s)')
legend('Input','Output')

subplot(2,1,2)
plot(t1(1:length(el1)),x(el1,2),'o-')
hold on
plot(t2(1:length(el2)),y(el2,2),'d--')
xlim([0.0104 0.0107])
xlabel('Time (s)')
title('Second Channel')
legend('Input','Output')

Figure contains 2 axes. Axes 1 with title First Channel contains 2 objects of type line. These objects represent Input, Output. Axes 2 with title Second Channel contains 2 objects of type line. These objects represent Input, Output.

Создайте dsp.FarrowRateConverter Системная object™ с допуском 0%. Скорость выхода равна OutputSampleRate property. Вход должен быть кратным коэффициенту десятикратного уменьшения, M. В этом случае M равно 320.

frc = dsp.FarrowRateConverter('InputSampleRate',96e3,'OutputSampleRate',44.1e3);
FsOut = getActualOutputRate(frc) 
FsOut = 44100
[L,M] = getRateChangeFactors(frc) 
L = 147
M = 320

Допустим допуск 1% от выходной скорости и наблюдаем различие в коэффициенте десятикратного уменьшения.

frc.OutputRateTolerance = 0.01; 
FsOut2 = getActualOutputRate(frc) 
FsOut2 = 4.4308e+04
[L2,M2] = getRateChangeFactors(frc) 
L2 = 6
M2 = 13

Коэффициент десятикратного уменьшения теперь всего 13. Чем меньше коэффициент десятикратного уменьшения, тем больше гибкости в размере входа. Скорость выхода находится в пределах области значений OutputSampleRate ± 1%.

Создайте dsp.FarrowRateConverter Системный object™ со свойствами по умолчанию. Вычислите и отобразите частотную характеристику.

frc = dsp.FarrowRateConverter;
[h,f] = freqz(frc);
plot(f,20*log10(abs(h)))
ylabel('Filter Response')
xlabel('Frequency (rad/s)')

Figure contains an axes. The axes contains an object of type line.

Создайте dsp. FarrowRateConverter System object™ со значениями по умолчанию. Определите его вычислительную стоимость: количество коэффициентов, количество состояний, умножений на входную выборку и сложений на входную выборку.

frc = dsp.FarrowRateConverter;
cst = cost(frc)
cst = struct with fields:
                  NumCoefficients: 16
                        NumStates: 3
    MultiplicationsPerInputSample: 14.1497
          AdditionsPerInputSample: 11.9728

Повторите расчет, позволяя получить 10% допуск в выходной частоте выборки.

frc.OutputRateTolerance = 0.1;
ctl = cost(frc)
ctl = struct with fields:
                  NumCoefficients: 16
                        NumStates: 3
    MultiplicationsPerInputSample: 13
          AdditionsPerInputSample: 11

Алгоритмы

Фильтры Фэрроу реализуют кусочный полином интерполяцию, используя правило Хорнера, чтобы вычислить выборки из полинома. Полиномиальные коэффициенты, используемые для подгонки входа отсчетов, соответствуют коэффициентам интерполяции Лагранжа.

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

Можно использовать полином любого порядка, чтобы соответствовать существующим выборкам. Однако, поскольку полиномы большого порядка часто колеблются, полиномы порядок 1 , 2 , 3 или 4 используются на практике.

Блок вычисляет интерполированные значения в требуемых местоположениях, изменяя только дробную задержку Это значение является интервалом между предыдущей входной выборкой и текущей выходной выборкой. Все коэффициенты фильтра остаются постоянными.

  • Входные выборки фильтруются с помощью M + 1 КИХ-фильтров, где M является полиномиальным порядком.

  • Выходы этих фильтров умножаются на дробную задержку

  • Выходы являются суммой результатов умножения.

Ссылки

[1] Hentschel, T., and G. Fettweis. «Цифровые фильтры непрерывного времени для преобразования частоты дискретизации в реконфигурируемых радиотерминалах». Частицы. Том 55, № 5-6, 2001, стр. 185-188.

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

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