exponenta event banner

dsp. HDLFIRRateConverter

Повышающая, фильтрующая и понижающая выборки - оптимизирована для генерации кода HDL

Описание

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

Объект увеличивает выборку на целочисленный коэффициент L, применяет фильтр FIR и понижает выборку на целочисленный коэффициент M. Объект принимает и возвращает аргументы управляющего сигнала для ускорения потока выборок. Подробные сведения об интерфейсе управления потоком см. в разделе Управление потоком.

Для повторной выборки и фильтрации входных данных:

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

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

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

Создание

Описание

HDLFIRRC = dsp.HDLFIRRateConverter возвращает объект System, HDLFIRRC, который производит повторную выборку каждого канала входа. Объект увеличивает выборку на целочисленный коэффициент L, применяет фильтр FIR и понижает выборку на целочисленный коэффициент M. По умолчанию L/M равно 3/2.

пример

HDLFIRRC = dsp.HDLFIRRateConverter(L,M,num) устанавливает InterpolationFactor свойство для L, DecimationFactor свойство для M, и Numerator свойство для num.

HDLFIRRC = dsp.HDLFIRRateConverter(___,Name,Value) задает свойства, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в отдельные кавычки. Например:

HDLFIRRC = dsp.HDLFIRRateConverter(L,M,Num,'ReadyPort',true,'RequestPort',true);

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Коэффициент повышения дискретизации, L, задается как положительное целое число.

Коэффициент понижающей дискретизации, M, задается как положительный целочисленный скаляр.

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

Коэффициенты фильтра можно генерировать с помощью функций проектирования обработки сигналов Toolbox™ фильтров, таких как fir1. Проектирование фильтра нижних частот с нормированной частотой отсечки не более min(1/L,1/M). Объект инициализирует состояние внутреннего фильтра как нулевое.

Позволить ready выходной аргумент объекта. Если этот параметр включен, объект возвращает логическое скалярное значение. ready, когда вы вызываете объект. Когда ready является 1 (true), объект готов для нового входного образца при следующем вызове.

Позволить request входной аргумент объекта. Когда request является 1 (true), объект возвращает новый выходной образец для текущего вызова объекта.

Режим округления, используемый для операций с фиксированной точкой. Это свойство не применяется при вводе single или double тип. 'Simplest' режим не поддерживается.

Режим переполнения, используемый для операций с фиксированной точкой. Это свойство не применяется при вводе single или double тип.

Тип данных коэффициентов фильтра FIR, указанный как numerictype(s,wl,fl) объект с signedness, word length, и fractional length свойства.

Тип данных выходных выборок данных, указанный как "Same word length as input', 'Full precision', или как numerictype(s,wl,fl) объект с signedness, word length, и fractional length свойства.

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

Описание

пример

[dataOut,validOut] = HDLFIRRC(dataIn,validIn) передискретизирует dataIn согласно свойствам InterpolationFactor (L) и DecimationFactor (M). Чтобы избежать отбрасывания образцов при использовании этого синтаксиса, примените новые допустимые входные образцы с помощью validIn установить в значение true, только каждый ceil(L/M) вызовы объекта. Наборы объектов validOut кому true когда dataOut является новым допустимым образцом.

пример

[dataOut,ready,validOut] = HDLFIRRC(dataIn,validIn) выполняет повторную выборку входных данных и возвращает ready чтобы указать, может ли объект принять новый образец при следующем вызове.

Этот синтаксис применяется при установке для свойства ReadyPort значения true. Например:

HDLFIRRC = dsp.HDLFIRRateConverter(...,'ReadyPort',true);
...
[dataOut,validOut,ready] = rateConverter(dataIn,validIn);

пример

[dataOut,ready,validOut] = HDLFIRRC(dataIn,validIn,request) выполняет повторную выборку входных данных, указывает, может ли объект принять новую выборку, и, если request является true, возвращает следующий доступный образец.

Этот синтаксис применяется при установке для свойства RequestPort значения true. Например:

HDLFIRRC = dsp.HDLFIRRateConverter(...,'RequestPort',true);
...
[dataOut,validOut] = rateConverter(dataIn,validIn,request);

Вы можете подключить ready вывод дочернего объекта в request вход вышестоящего объекта.

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

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

Ввод данных, заданный как скаляр или как вектор строки, где каждый элемент представляет независимый канал.

Данные могут быть реальными или сложными.

double и single типы данных поддерживаются для моделирования, но не для генерации кода HDL.

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

Достоверность входных данных, указанных как логический скаляр.

Когда validIn является 1 (true), объект фиксирует значение на dataIn. Можно применить действительный образец данных каждый ceil(L/M) вызовы объекта. Вы можете использовать дополнительный ready выходной сигнал, указывающий, когда объект может принять новую выборку.

Типы данных: logical

Запрос нового выходного образца, заданного как логический скаляр.

Когда request является 1 (true), и доступна новая выборка выходных данных, объект возвращает выборку с validOut установить в значение 1 Правда. Если образец отсутствует, объект возвращается validOut установить в значение 0 (ложь). Объект принимает этот аргумент при установке для свойства RequestPort значения true.

Типы данных: logical

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

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

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

double и single типы данных поддерживаются для моделирования, но не для генерации кода HDL.

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

Достоверность выходных данных, возвращаемых как логический скаляр.

Когда validOut является 1 (true), вывод данных действителен. Когда validOut является 0 (false), вывод данных недопустим.

Типы данных: logical

Индикатор готовности объекта к новому входному образцу, возвращаемый в виде логического скаляра.

Объект возвращает ready = 1 (true), чтобы указать, что объект может принять новую выборку входных данных при следующем вызове. Объект возвращает эти дополнительные выходные данные при установке для свойства ReadyPort значения true.

Типы данных: logical

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

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

release(obj)

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

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Преобразование сигнала с 48 кГц в 32 кГц с помощью dsp.HDLFIRRateConverter object™ системы.

Определите частоту дискретизации и длину входного сигнала, а также форму косинусного сигнала 2 кГц. Набор validIn = true для каждого образца.

Fs = 48e3;                  
Ns = 100;                  
t = (0:Ns-1).'/Fs;         
dataIn = cos(2*pi*2e3*t);  
validIn = true(Ns,1);

Предварительно ассигновать dataOut и validOut сигналы для более быстрого моделирования.

dataOut = zeros(Ns,1);
validOut = false(Ns,1);

Создайте объект System. Сконфигурируйте его для выполнения преобразования скорости с коэффициентом 2/3 с помощью фильтра equiriple.

Numerator = firpm(70,[0 0.25 0.32 1],[1 1 0 0]);
firrc = dsp.HDLFIRRateConverter(2,3,Numerator);

Вызовите объект System, чтобы выполнить преобразование курса и получить каждую выборку вывода.

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

for k = 1:Ns
    [dataOut(k),validOut(k)] = firrc(dataIn(k),validIn(k));
end

Поскольку входная частота дискретизации выше, чем выходная частота дискретизации, не каждый член dataOut является действительным. Использовать validOut для извлечения действительных образцов из dataOut.

y = dataOut(validOut);

Просмотрите входные и выходные сигналы с помощью логического анализатора.

la = dsp.LogicAnalyzer('NumInputPorts',4,'SampleTime',1/Fs,'TimeSpan',Ns/Fs);
modifyDisplayChannel(la,1,'Name','dataIn','Format','Analog','Height',8)
modifyDisplayChannel(la,2,'Name','validIn')
modifyDisplayChannel(la,3,'Name','dataOut','Format','Analog','Height',8)
modifyDisplayChannel(la,4,'Name','validOut')
la(dataIn,validIn,dataOut,validOut)

Преобразование сигнала с 40 МГц в 100 МГц с помощью dsp.HDLFIRRateConverter object™ системы. Чтобы избежать переполнения объекта по мере увеличения дискретизации сигнала, управляйте скоростью ввода вручную.

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

Fs = 40e6;                  
Ns = 50;                  
t = (0:Ns-1).'/Fs;         
x = fi(cos(2*pi*1.2e6*t),1,16,14);

Определите параметры пересчета ставок. Используйте коэффициент интерполяции 5 и коэффициент прореживания 2. Рассчитайте, как часто объект может принимать новый входной образец.

L = 5;   
M = 2;   
stepsPerInput = ceil(L/M);
numSteps = stepsPerInput*Ns;

Произвести dataIn и validIn на основе того, как часто объект может принимать новый образец.

dataIn = zeros(numSteps,1,'like',x);
dataIn(1:stepsPerInput:end) = x;
validIn = false(numSteps,1);
validIn(1:stepsPerInput:end) = true;

Создайте объект System. Сконфигурируйте его для выполнения преобразования скорости с использованием указанных коэффициентов и равнозначного фильтра FIR.

Numerator = firpm(70,[0 0.15 0.25 1],[1 1 0 0]);         
rateConverter = dsp.HDLFIRRateConverter(L,M,Numerator);

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

la = dsp.LogicAnalyzer('NumInputPorts',4,'SampleTime',1/Fs,'TimeSpan',numSteps/Fs);
modifyDisplayChannel(la,1,'Name','dataIn','Format','Analog','Height',8)
modifyDisplayChannel(la,2,'Name','validIn')
modifyDisplayChannel(la,3,'Name','dataOut','Format','Analog','Height',8)
modifyDisplayChannel(la,4,'Name','validOut')

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

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

for k = 1:numSteps
    [dataOut,validOut] = rateConverter(dataIn(k),validIn(k));    
    la(dataIn(k),validIn(k),dataOut,validOut)    
end

Преобразование сигнала с 40 МГц в 100 МГц с помощью dsp.HDLFIRRateConverter object™ системы. Используйте дополнительный параметр ready выходной сигнал, чтобы избежать переполнения объекта по мере увеличения дискретизации данных. ready сигнал указывает, что объект может принять новую выборку данных при следующем вызове объекта.

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

Fs = 40e6;                                  
Ns = 50;                                    
t = (0:Ns-1).'/Fs;                          
x = fi(cos(2*pi*1.2e6*t),1,16,14);          
inputSource = dsp.SignalSource(x);

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

L = 5;                                      
M = 2;                                      
numSteps = floor(Ns*L/M);

Создайте системный объект преобразователя скорости FIR HDL. Сконфигурируйте его для выполнения преобразования скорости с использованием указанных коэффициентов и равнозначного фильтра FIR. Включить дополнительный ready выходной порт.

Numerator = firpm(70,[0 0.15 0.25 1],[1 1 0 0]);     
rateConverter = dsp.HDLFIRRateConverter(L,M,Numerator,'ReadyPort',true);

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

la = dsp.LogicAnalyzer('NumInputPorts',5,'SampleTime',1/Fs,'TimeSpan',numSteps/Fs);
modifyDisplayChannel(la,1,'Name','dataIn','Format','Analog','Height',8)
modifyDisplayChannel(la,2,'Name','validIn')
modifyDisplayChannel(la,3,'Name','dataOut','Format','Analog','Height',8)
modifyDisplayChannel(la,4,'Name','validOut')
modifyDisplayChannel(la,5,'Name','ready')

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

ready = true;

Вызовите объект System, чтобы выполнить преобразование курса и получить каждую выборку вывода. Примените новый входной образец, если объект указывает, что он готов. В противном случае установите validIn кому false.

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

for k = 1:numSteps
    if ready
        dataIn = inputSource();
    end
    validIn = ready;
    [dataOut,validOut,ready] = rateConverter(dataIn,validIn);
    la(dataIn,validIn,dataOut,validOut,ready)
end

Преобразование сигнала с 40 МГц в 100 МГц с помощью dsp.HDLFIRRateConverter object™ системы. Используйте дополнительный параметр request входной сигнал для управления скоростью передачи выходных данных. Когда объект получает request сигнал возвращает новую выборку выходных данных. В этом примере моделируется тактовая частота 200 МГц путем запроса выходной выборки каждый второй вызов объекта.

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

Fs = 40e6;                                  
Ns = 50;                                    
t = (0:Ns-1).'/Fs;                          
x = fi(cos(2*pi*1.2e6*t),1,16,14);          
inputSource = dsp.SignalSource(x);

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

L = 5;                                      
M = 2;                 
numSteps = floor(2*Ns*L/M);

Создайте системный объект преобразователя скорости FIR HDL. Сконфигурируйте его для выполнения преобразования скорости с использованием указанных коэффициентов и равнозначного фильтра FIR. Включить дополнительный ready и request порты.

Numerator = firpm(70,[0 0.15 0.25 1],[1 1 0 0]);      
rateConverter = dsp.HDLFIRRateConverter(L,M,Numerator,...
                                        'ReadyPort',true,...
                                        'RequestPort',true);

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

la = dsp.LogicAnalyzer('NumInputPorts',6,'SampleTime',1/Fs,'TimeSpan',numSteps/Fs);
modifyDisplayChannel(la,1,'Name','dataIn','Format','Analog','Height',8)
modifyDisplayChannel(la,2,'Name','validIn')
modifyDisplayChannel(la,3,'Name','request')
modifyDisplayChannel(la,4,'Name','dataOut','Format','Analog','Height',8)
modifyDisplayChannel(la,5,'Name','validOut')
modifyDisplayChannel(la,6,'Name','ready')

Генерировать сигнал, который запрашивает новую выходную выборку каждый второй вызов объекта.

request = false(numSteps,1);
request(1:2:end) = true;

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

ready = true;

Вызовите объект System, чтобы выполнить преобразование курса и получить каждую выборку вывода. Примените новый входной образец, если объект указывает, что он готов. В противном случае установите validIn кому false. Объект возвращает допустимые выходные выборки, когда request имеет значение true.

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

for k = 1:numSteps  
    if ready
        dataIn = inputSource();
    end
    validIn = ready;
    [dataOut,validOut,ready] = rateConverter(dataIn,validIn,request(k));
    la(dataIn,validIn,request(k),dataOut,validOut,ready)    
end

Создайте функцию преобразования скорости, предназначенную для создания кода HDL, и испытательный стенд для ее выполнения. Функция преобразует сигнал с 40 МГц в 100 МГц. Во избежание переполнения объекта тестовый стенд вручную управляет скоростью ввода.

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

Fs = 40e6;
Ns = 50;
t = (0:Ns-1).'/Fs;
x = fi(cos(2*pi*1.2e6*t), 1, 16, 14);

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

L = 5;
M = 2;
stepsPerInput = ceil(L/M);
numSteps = stepsPerInput*Ns;

Произвести dataIn и validIn на основе того, как часто объект может принимать новый образец.

dataIn = zeros(numSteps,1,'like',x);
dataIn(1:stepsPerInput:end) = x;
validIn = false(numSteps,1);
validIn(1:stepsPerInput:end) = true;

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

la = dsp.LogicAnalyzer('NumInputPorts',4,'SampleTime',1/Fs,'TimeSpan',numSteps/Fs);
modifyDisplayChannel(la,1,'Name','dataIn','Format','Analog','Height',8)
modifyDisplayChannel(la,2,'Name','validIn')
modifyDisplayChannel(la,3,'Name','dataOut','Format','Analog','Height',8)
modifyDisplayChannel(la,4,'Name','validOut')

Запишите функцию, которая создает и вызывает объект System.

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

function [dataOut,validOut] = HDLFIRRC5_2(dataIn,validIn)
%HDLFIRRC5_2
% Processes one sample of data using the dsp.HDLFIRRateConverter System
% object. dataIn is a fixed-point scalar value. validIn is a logical scalar value.
% You can generate HDL code from this function.

  persistent firrc5_2;
  if isempty(firrc5_2)  
    Numerator = firpm(70,[0,.15,.25,1],[1,1,0,0]);   
    firrc5_2 = dsp.HDLFIRRateConverter(5,2,Numerator);
  end    
  [dataOut,validOut] = firrc5_2(dataIn,validIn);
end

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

for k = 1:numSteps
    [dataOut,validOut] = HDLFIRRC5_2(dataIn(k),validIn(k));
    la(dataIn(k),validIn(k),dataOut,validOut)
end

Алгоритмы

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

Этот объект реализует алгоритмы, описанные на странице ссылок блока оптимизированного HDL преобразования скорости передачи данных (FIR Rate Conversion).

Представлен в R2015b