dsp.FarrowRateConverter

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

Описание

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

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

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

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

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

Создание

Описание

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 объект — тип выходных данных фиксированной точки Со знаком. Если вы не задаете дробную длину, объект вычисляет дробную длину на основе входного диапазона. Объект сохраняет динамический диапазон входа.

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

Синтаксис

Описание

пример

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 является полиномиальным порядком.

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

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

Ссылки

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

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

Введенный в R2014b