dsp.FIRRateConverter

Конвертер частоты дискретизации

Описание

dsp.FIRRateConverter Система object™ выполняет преобразование частоты дискретизации рациональным фактором на входе вектора или матрицы. КИХ-преобразователь уровня располагает каскадом интерполятор с decimator. Конвертер уровня (как показано в схематическом) концептуально состоит из upsampler, сопровождаемого объединенной антиобработкой изображений и сглаживанием КИХ-фильтра, сопровождаемого downsampler. Коэффициенты антиобработки изображений и сглаживания КИХ-фильтра могут быть заданы через Numerator свойство, или может быть автоматически спроектирован объектом с помощью designMultirateFIR функция. Для примера смотрите, Передискретизируют Сигнал Используя КИХ-Конвертер Уровня.

upsampler увеличивает частоту дискретизации сигнала факторным L, и downsampler уменьшает частоту дискретизации сигнала факторным M. Используйте повышающую дискретизацию и субдискретизацию факторов, которые являются относительно главными или взаимно-простыми. Получившийся сигнал дискретного времени имеет частоту дискретизации, которая является L/M раз от исходной частоты дискретизации.

FIR rate converter contains an upsampler followed by an anti-imaging, anti-aliasing FIR filter, followed by a downsampler.

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

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

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

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

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

Создание

Описание

пример

firrc = dsp.FIRRateConverter возвращает КИХ-объект конвертера частоты дискретизации с коэффициентом интерполяции 3 и фактором децимации 2. Объект проектирует КИХ-коэффициенты фильтра с помощью designMultirateFIR(3,2) функция.

firrc = dsp.FIRRateConverter(L,M) возвращает КИХ-конвертер частоты дискретизации с InterpolationFactor с целочисленным знаком набор свойств к L и DecimationFactor набор свойств к M. Объект проектирует свои коэффициенты фильтра на основе коэффициентов преобразования уровня, которые вы задаете при создании объекта, использовании designMultirateFIR(L,M) функция. Спроектированный фильтр соответствует lowpass с нормированной частотой среза, не больше, чем min(π/L,π/M) в радиальных единицах частоты.

firrc = dsp.FIRRateConverter(L,M,'Auto') возвращает КИХ-конвертер частоты дискретизации где NumeratorSource свойство установлено в 'Auto'. В этом режиме каждый раз существует обновление в коэффициентах преобразования уровня, объект перепроектирует фильтр с помощью метода разработки, заданного в DesignMethod.

пример

firrc = dsp.FIRRateConverter(L,M,num) возвращает КИХ-конвертер частоты дискретизации с InterpolationFactor набор свойств к L, DecimationFactor набор свойств к M, и Numerator набор свойств к num.

firrc = dsp.FIRRateConverter(L,M,method) возвращает КИХ-конвертер частоты дискретизации с InterpolationFactor набор свойств к L, DecimationFactor набор свойств к M, и DesignMethod набор свойств к method. Когда вы передаете метод разработки как вход, NumeratorSource свойство автоматически установлено в 'Auto'.

firrc = dsp.FIRRateConverter(___,Name,Value) возвращает КИХ-конвертер частоты дискретизации с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в кавычки. Можно использовать этот синтаксис с любыми предыдущими комбинациями входных аргументов.

Пример: firrc = dsp.FIRRateConverter('FullPrecisionOverride','false') позволяет типам данных с фиксированной точкой управляться посредством отдельных настроек свойства фиксированной точки.

firrc = dsp.FIRRateConverter(L,M,'legacy') возвращает КИХ-конвертер частоты дискретизации, где коэффициенты фильтра созданы с использованием firpm(70,[0 0.28 0.32 1],[1 1 0 0]). Спроектированный фильтр имеет частоту среза π/3 радианов/выборки.

Свойства

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

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

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

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

Коэффициент интерполяции L в виде положительного целого числа.

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

Фактор децимации M в виде положительного целого числа.

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

КИХ-содействующий источник фильтра в виде одного из следующего:

  • 'Property' – Коэффициенты числителя заданы через Numerator свойство.

  • 'Auto' – Коэффициенты числителя спроектированы автоматически с помощью метода разработки, заданного в DesignMethod.

Коэффициенты числителя КИХ фильтруют в виде вектора-строки в степенях z-1.

Следующее уравнение задает передаточную функцию фильтра:

H(z)=n=0Nb(n)zn

Вектор b = [b (0), b (1), …, b (N)] представляет вектор из коэффициентов фильтра.

Используйте lowpass с нормированной частотой среза, не больше, чем min(1/L,1/M), где L является коэффициентом интерполяции, и M является фактором децимации. Усиление фильтра lowpass должно равняться L, коэффициенту интерполяции. Выберите длину фильтра, чтобы быть кратными коэффициенту интерполяции. Чтобы спроектировать такой фильтр, используйте designMultirateFIR функция. Для примера смотрите, Передискретизируют Сигнал Используя КИХ-Конвертер Уровня. Все начальные состояния фильтра являются нулем.

Зависимости

Это свойство отображается только, когда вы устанавливаете NumeratorSource к 'Property'.

Когда NumeratorSource установлен в 'Auto', коэффициенты числителя автоматически перепроектированы с помощью метода разработки, заданного в DesignMethod. Чтобы получить доступ к коэффициентам фильтра в режиме автоматического проектирования, введите objName.Numerator в MATLAB® командная строка.

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

Метод разработки КИХ фильтрует коэффициенты в виде одного из следующего:

  • 'Kaiser' – Метод кайзера. Аппроксимированное объединенное сглаживание и фильтр lowpass антиобработки изображений с помощью designMultirateFIR функция.

  • 'ZOH' – Нулевой порядок содержит метод. Содержите входные значения последовательности.

  • 'Linear' – Метод линейной интерполяции.

Зависимости

Это свойство отображается только, когда вы устанавливаете NumeratorSource свойство к 'Auto', или если вы передаете 'auto' ключевое слово как вход при создании объекта.

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

Задайте, использовать ли правила полной точности. Если вы устанавливаете FullPrecisionOverride к true, который является значением по умолчанию, объект вычисляет все внутренние типы арифметических и выходных данных, использующие правила полной точности. Эти правила обеспечивают самые точные численные данные фиксированной точки. Это также выключает отображение других свойств фиксированной точки, потому что они не применяются индивидуально. Эти правила гарантируют, что никакое квантование не происходит в объекте. Биты добавляются, по мере необходимости, чтобы гарантировать, что никакое округление или переполнение не происходят. Если вы устанавливаете FullPrecisionOverride к false, типами данных с фиксированной точкой управляют посредством отдельных настроек свойства фиксированной точки. Для получения дополнительной информации смотрите Полную точность для Системных объектов Фиксированной точки.

Задайте метод округления как один из | Ceiling | Convergent | Floor | Nearest | Round | Simplest | Zero |.

Зависимости

Это свойство применяется, только если объект не находится в режиме максимальной точности.

Задайте действие переполнения как один из | Wrap | Saturate |.

Зависимости

Это свойство применяется, только если объект не находится в режиме максимальной точности.

Задайте содействующий тип данных с фиксированной точкой фильтра как один из | Same word length as input | Custom |.

Задайте содействующую фиксированную точку фильтра как a numerictype Объект (Fixed-Point Designer) с Signedness из Auto.

Зависимости

Это свойство применяется только когда CoefficientsDataType свойством является Custom.

Задайте тип данных с фиксированной точкой продукта как один из | Full precision | Same as input | Custom |.

Задайте фиксированную точку продукта как масштабированное numerictype Объект (Fixed-Point Designer) с Signedness из Auto.

Зависимости

Это свойство применяется только когда ProductDataType свойством является Custom.

Задайте тип данных с фиксированной точкой аккумулятора как один из | Full precision | Same as product | Same as input | Custom |.

Задайте фиксированную точку аккумулятора как масштабированное numerictype Объект (Fixed-Point Designer) с Signedness из Auto.

Зависимости

Это свойство применяется только когда AccumulatorDataType свойством является Custom.

Задайте выходной тип данных с фиксированной точкой как один из | Same as accumulator | Same as product | Same as input | Custom |.

Задайте тип данных с фиксированной точкой на выходе как масштабированное numerictype Объект (Fixed-Point Designer) с Signedness из Auto.

Зависимости

Это свойство применяется только когда OutputDataType свойством является Custom.

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

Синтаксис

Описание

пример

y = firrc(x) передискретизирует вход x и возвращает передискретизируемый y сигнала.

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

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

Ввод данных в виде вектор-столбца или матрицы. Количество входных строк P должно быть кратным фактору децимации M. P-by-Q матричный вход обработан как Q независимые каналы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного числа: Да

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

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

Передискретизируемый выходной параметр, возвращенный как вектор-столбец или матрица. Количество строк в выходном сигнале дано PL/M, где P является количеством входных строк, L является коэффициентом интерполяции, и M является фактором децимации.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного числа: Да

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

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

release(obj)

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

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

Примеры

свернуть все

Передискретизируйте синусоидальный сигнал на 100 Гц на коэффициент 3/2.

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

Создайте dsp.SineWave объект, который генерирует синусоидальный сигнал с 54 выборками на систему координат, содержит тон на уровне 100 Гц и имеет частоту дискретизации 1 250 Гц.

sine = dsp.SineWave(1,100,'SampleRate',1250,'SamplesPerFrame',54);

% Grab a frame
x = sine();

% Calcualte input time vector 
tx = (0:length(x)-1)/sine.SampleRate; 

Спроектируйте фильтр по умолчанию

Создайте dsp.FIRRateConverter объект. Объект использует объединенную антиобработку изображений и сглаживание КИХ-фильтра. По умолчанию этот фильтр создан с использованием designMultirateFIR функция. Функция проектирует фильтр на основе коэффициентов преобразования уровня, которые вы задаете, и хранит коэффициенты в Numerator свойство. Для коэффициента интерполяции 3 и фактора децимации 2, объект проектирует коэффициенты с помощью designMultirateFIR(3,2).

firrc = dsp.FIRRateConverter(3,2);

Передискретизируйте на коэффициент 3/2

Передискретизируйте сигнал на коэффициент 3/2.

y = firrc(x);

Постройте исходные и передискретизируемые сигналы. Для того, чтобы построить два сигнала на том же графике, получите параметры аффинного преобразования времени. Используйте эти параметры, чтобы вычислить выходные шаги расчета. nth выходной шаг расчета равняется scale×n+delay. Значения ввода и вывода совпадают каждые 3 выходных выборки и любая входная выборка, вследствие скорости преобразования 3/2.

scale = firrc.InterpolationFactor/firrc.DecimationFactor;
delay = length(firrc.Numerator)/(2*firrc.DecimationFactor);

% Calculate output times for vector y in input units
ty = (((0:length(y)-1)-delay)/scale)/sine.SampleRate;

stem(tx, x,'filled',MarkerSize=4); hold on;
stem(ty, y);
hold off;
xlim([0.0 0.0145])
ylim([-1.5 1.5])
legend('Original input','Resampled');

Figure contains an axes object. The axes object contains 2 objects of type stem. These objects represent Original input, Resampled.

Передискретизируйте на коэффициент 5/3 в Автоматическом Режиме Создания фильтра

Теперь измените коэффициент интерполяции в 5 и фактор децимации к 3. Для создания фильтра, которое будет обновлено автоматически на основе новых коэффициентов преобразования уровня, устанавливает NumeratorSource свойство к 'Auto'. Альтернативно, можно передать ключевое слово 'auto' как вход при создании объекта. Объект затем действует в автоматическом режиме создания фильтра. Каждый раз существует изменение в коэффициентах преобразования уровня, обновления объекта создание фильтра соответственно.

release(firrc)
firrc.NumeratorSource = 'Auto';
firrc.InterpolationFactor = 5;
firrc.DecimationFactor = 3
firrc = 
  dsp.FIRRateConverter with properties:

    InterpolationFactor: 5
       DecimationFactor: 3
        NumeratorSource: 'Auto'
           DesignMethod: 'Kaiser'

  Show all properties

Чтобы получить доступ к коэффициентам фильтра в автоматическом режиме создания фильтра, введите firrc.Numerator в командной строке MATLAB.

Передискретизируйте сигнал с обновленными значениями преобразования уровня.

yAuto = firrc(x);

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

scale = firrc.InterpolationFactor/firrc.DecimationFactor;
delay = length(firrc.Numerator)/(2*firrc.DecimationFactor);

% Calculate output times for vector yAuto in input units
tyAuto = (((0:length(yAuto)-1)-delay)/scale)/sine.SampleRate;

stem(tx, x,'filled',MarkerSize=4); hold on;
stem(tyAuto, yAuto,'r');
hold off;
xlim([0.0 0.015])
ylim([-1.5 1.5])
legend('Original input','Resampled');

Figure contains an axes object. The axes object contains 2 objects of type stem. These objects represent Original input, Resampled.

Задайте модель интерполяции сигнала

В режиме автоматического проектирования можно также задать базовую модель интерполяции сигнала D/A через DesignMethod свойство.

Установите DesignMethod к 'linear' и измените коэффициент интерполяции в 11.

release(firrc)
firrc.DesignMethod = 'linear';
firrc.InterpolationFactor = 11;

Передискретизируйте сигнал с помощью модели линейной интерполяции.

yLinear = firrc(x);

Постройте исходные и передискретизируемые сигналы. Выходные выборки лежат на кусочной линейной кривой. Обратите внимание, что ввод и вывод совпадает каждые три входных выборки и каждые 11 выходных выборок как ожидалось от отношения 11/3.

scale = firrc.InterpolationFactor/firrc.DecimationFactor;
delay = (length(firrc.Numerator)-1)/(2*firrc.DecimationFactor);

% Calculate output times for vector yLinear in input units
tyLinear = (((0:length(yLinear)-1)-delay)/scale)/sine.SampleRate;

stem(tx, x, 'filled',MarkerSize=4); hold on;
stem(tyLinear, yLinear);
plot(tyLinear, yLinear,Color=[1 0 0 0.3]);
hold off;
xlim([0.0 0.009])
ylim([-1.5 1.5])
legend('Original input','Resampled');

Figure contains an axes object. The axes object contains 3 objects of type stem, line. These objects represent Original input, Resampled.

Передискретизируйте звуковой сигнал от 48 кГц до 44 кГц и проигрывайте передискретизируемый сигнал с помощью audioDeviceWriter объект.

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

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

Создайте dsp.AudioFileReader объект. Объект читает звуковой файл, который имеет частоту дискретизации 48 кГц.

L = 11;
M = 12;
afr = dsp.AudioFileReader('audio48kHz.wav', ...
    'OutputDataType', 'single', ...
    'SamplesPerFrame', 4*M);

Создайте dsp.FIRRateConverter объект с коэффициентом интерполяции L = 11 и фактор децимации M = 12 (взаимно-простое представление отношения 44k/48k), разумное приближение стандартного уровня на 44,1 кГц. Объект проектирует фильтр с помощью designMultirateFIR(11,12) и хранит коэффициенты в Numerator свойство объекта.

firrc = dsp.FIRRateConverter(L,M)
firrc = 
  dsp.FIRRateConverter with properties:

    InterpolationFactor: 11
       DecimationFactor: 12
        NumeratorSource: 'Property'
              Numerator: [0 2.3076e-05 5.4790e-05 9.3620e-05 1.3665e-04 ... ]

  Show all properties

Создайте audioDeviceWriter объект. Задайте частоту дискретизации, чтобы быть 44 100 Гц.

adw = audioDeviceWriter(44100);

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

while ~isDone(afr)
    audio1 = afr();
    audio2 = firrc(audio1);
    adw(audio2);
end
release(afr);
release(adw);

Алгоритмы

КИХ-конвертер уровня реализован эффективно с помощью многофазной структуры.

Чтобы вывести многофазную структуру, начните с передаточной функции КИХ-фильтра: Этот КИХ-фильтр является объединенным реконструкционным фильтром и фильтром сглаживания.

H(z)=b0+b1z1+...+bNzN

N +1 является длиной КИХ-фильтра.

Можно перестроить это уравнение можно следующим образом:

H(z)=(b0+bLzL+b2Lz2L+..+bNL+1z(NL+1))+z1(b1+bL+1zL+b2L+1z2L+..+bNL+2z(NL+1))+z(L1)(bL1+b2L1zL+b3L1z2L+..+bNz(NL+1))

L является количеством многофазных компонентов, и его значение равняется коэффициенту интерполяции, который вы задаете.

Можно записать это уравнение как:

H(z)=E0(zL)+z1E1(zL)+...+z(L1)EL1(zL)

E0 (zL), E1 (zL)..., EL-1 (zL) многофазные компоненты КИХ-фильтра H (z).

Концептуально, КИХ-конвертер уровня содержит upsampler, сопровождаемый объединенной антиобработкой изображений, сглаживание КИХ фильтрует H (z), который сопровождается downsampler.

FIR rate converter contains an upsampler followed by a combined anti-imaging, anti-aliasing FIR filter, followed by a downsampler.

Замените H (z) на его многофазное представление.

Вот многоскоростная благородная идентичность для интерполяции.

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

Можно заменить оператор повышающей дискретизации, блок задержки и сумматор с переключателем коммутатора. С учетом downsampler, который следует, перемещения переключателя с шагом размера M. Переключатель получает первую выборку от ветви 0 и приближается против часовой стрелки направление, каждый раз пропуская M −1 ветви.

Как пример, рассмотрите конвертер уровня с набором L к 5 и набором M к 3. Многофазными компонентами является E0(z), E1(z), E2(z), E3(z) и E4(z). Переключатель запускается на первой ветви 0, пропускает ветви 1 и 2, получает следующую выборку от ветви 3, затем пропускает ветви 4 и 0, получает следующую выборку от ветви 2 и так далее. Последовательность ветвей, из которых переключатель получает выборку данных, [0, 3, 1, 4, 2, 0, 3, 1, ….].

Конвертер уровня реализует L/M преобразование первым применением коэффициента интерполяции L к входящим данным и использование переключателя коммутатора в конце, чтобы получить только 1 в выборках M, эффективно составляя dowsampling факторный M. Следовательно, частотой дискретизации при выходе КИХ-конвертера уровня является Lfs/M.

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

Преобразование фиксированной точки
Спроектируйте и симулируйте системы фиксированной точки с помощью Fixed-Point Designer™.

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