dsp. FarrowRateConverter

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

Описание

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

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

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

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

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

Создание

Синтаксис

frc = dsp.FarrowRateConverter
frc = dsp.FarrowRateConverter(Name,Value)
frc = dsp.FarrowRateConverter(fsIn,fsOut,tol,np)

Описание

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

пример

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

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

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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 со знаком. Тип данных по умолчанию является 16-битным объектом numerictype со знаком. Необходимо задать объект numerictype без определенного масштабирования двоичной точки. Чтобы максимизировать точность, объект определяет дробную длину этого типа данных на основе содействующих значений.

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

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

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

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

  • 'Same as accumulator' — Выведите размер слова, и дробная длина совпадают с аккумулятором.

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

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

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

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

Синтаксис

y = frc(x)

Описание

пример

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).

Примечание: dsp.AudioFileReader и Системные объекты dsp.AudioFileWriter не поддержаны в 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

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

Создайте Систему 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)')

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

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

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

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

Алгоритмы

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

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

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

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

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

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

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

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

Схема показывает типы данных, что объект dsp.FarrowRateConverter использует для сигналов фиксированной точки и сигналов с плавающей точкой. Можно задать эти типы данных с помощью свойств объекта, видеть Fixed-Point Properties. Если вход является плавающей точкой, все типы данных в фильтре совпадают с типом входных данных, single или double.

Если вход является фиксированной точкой, КИХ-фильтр задает внутренние типы данных с помощью RoundingMode, OverflowMode и свойств CoefficientsDataType. Аккумуляторы и продукты в КИХ-фильтре используют типы данных полной точности. Объект бросает вывод КИХ-фильтра к MultiplicandDataType.

Ссылки

[1] Hentschel, T. и Г. Феттвейс. "Непрерывно-разовые Цифровые Фильтры для Преобразования Частоты дискретизации в Реконфигурируемых Радио-Терминалах". Frequenz. Издание 55, Номер 5-6, 2001, стр 185–188.

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

Введенный в R2014b

Для просмотра документации необходимо авторизоваться на сайте