exponenta event banner

dsp. FarrowRateConverter

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

Описание

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

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

  1. Создать dsp.FarrowRateConverter и задайте его свойства.

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

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

Создание

Описание

frc = dsp.FarrowRateConverter создает объект System преобразователя частоты дискретизации на основе полиномиального фильтра, 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) возвращает объект System преобразователя частоты дискретизации, frc, со свойством InputSampleRate, равным fsIn, свойство OutputSampleRate имеет значение fsOut, свойство OutputRateTolerance имеет значение tolи для свойства PolynomicalOrder установлено значение 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-на-M, где M - полиномиальный порядок.

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

Каждая ветвь FIR-фильтра соответствует строке матрицы коэффициентов.

Зависимости

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

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

Синтаксис

Описание

пример

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

Примечание: 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. В этом случае М равно 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

Алгоритмы

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

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

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

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

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

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

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

Ссылки

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

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

.
Представлен в R2014b