exponenta event banner

dsp. Дифференциатор

Полнополосный дифференцирующий фильтр прямой формы FIR

Описание

dsp.Differentiator Система object™ применяет к входному сигналу полнополосный дифференцирующий фильтр для дифференцирования всех его частотных составляющих. Для проектирования фильтра дифференциатора этот объект использует конструкцию эквиптного фильтра FIR. Идеальной частотной характеристикой дифференциатора является D (λ) =для −π≤ω≤π. Можно создать фильтр с минимальным порядком в указанном порядке. Этот объект поддерживает операции с фиксированной точкой.

Для фильтрации каждого канала входа:

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

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

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

Создание

Описание

пример

DF = dsp.Differentiator возвращает дифференциатор, DF, который независимо фильтрует каждый канал ввода с течением времени, используя заданные проектные характеристики.

DF = dsp.Differentiator(Name,Value) задает для каждого свойства указанное значение. Неопределенные свойства имеют значения по умолчанию.

Свойства

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

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

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

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

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

  • true - Объект проектирует фильтр с минимальным порядком, соответствующим PassbandRipple значение.

  • false - Объект проектирует фильтр с порядком, указанным в FilterOrder собственность.

Это свойство невозможно настроить.

Порядок фильтра, заданный как нечетное положительное целое число.

Это свойство невозможно настроить.

Зависимости

Порядок фильтрации можно указать только в том случае, если 'DesignForMinimumOrder' имеет значение false.

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

Максимальная пульсация полосы пропускания в дБ, заданная как положительный действительный скаляр.

Это свойство невозможно настроить.

Зависимости

Можно указать пульсацию полосы пропускания только тогда, когда 'DesignForMinimumOrder' имеет значение true.

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

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

Это свойство невозможно настроить.

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

Длины коэффициентов в словах и дробях, указанные как подписанные или неподписанные numerictype объект. Значение по умолчанию, numerictype(1,16), соответствует знаковому объекту числового типа с 16-битовыми коэффициентами. Чтобы получить наилучшую возможную точность, длина дроби вычисляется на основе значений коэффициентов.

Это свойство невозможно настроить.

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

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

Это свойство невозможно настроить.

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

Синтаксис

Описание

пример

y = DF(x) применяет к входному сигналу полнополосный дифференцирующий фильтр, x. y является дифференцированной версией x.

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

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

Ввод данных, заданный как вектор или матрица. Если входной сигнал является матрицей, каждый столбец матрицы обрабатывается как независимый канал. Количество строк во входном сигнале обозначает длину канала. Характеристики типа данных (двойные, одиночные или фиксированные) и характеристики реального комплекса (вещественные или комплексные значения) должны быть одинаковыми для входных и выходных данных.

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

Оценка групповой задержки линейного фазового КИХ-фильтра с использованием dsp.TransferFunctionEstimator объект, за которым следует dsp.PhaseExtractor и dsp.Differentiator объекты. Групповая задержка линейного фазового КИХ-фильтра задается как, $GD = -(d\theta(\omega)/d\omega) = - \frac{N}{2}$где$\theta(\omega)$ - фазовая информация фильтра, -$\omega$ частотный вектор, а N - порядок фильтра.

Настройка объектов

Создайте фильтр нижних частот FIR линейной фазы. Установите порядок 200, частоту полосы пропускания 255 Гц, пульсацию полосы пропускания 0,1 дБ и затухание полосы останова 80 дБ. Укажите частоту дискретизации 512 Гц.

Fs = 512;
LPF = dsp.LowpassFilter('SampleRate',Fs,'PassbandFrequency',255,...
    'DesignForMinimumOrder',false,'FilterOrder',200);

Чтобы оценить передаточную функцию фильтра нижних частот, создайте блок оценки передаточной функции. Укажите окно, которое должно быть Hann. Установите длину БПФ 1024 и число спектральных средних значений 200.

TFE = dsp.TransferFunctionEstimator('FrequencyRange','twosided',...
    'SpectralAverages',200,'FFTLengthSource','Property',...
    'FFTLength',1024);

Чтобы извлечь развернутую фазу из частотной характеристики фильтра, создайте экстрактор фазы.

PE = dsp.PhaseExtractor;

Чтобы дифференцировать фазу, $\theta$создайте фильтр дифференциатора. Это значение используется при вычислении групповой задержки.

DF = dsp.Differentiator;

Чтобы сгладить входные данные, создайте фильтр FIR с переменной полосой пропускания.

Gain1 = 512/pi;
Gain2 = -1;
VBFilter = dsp.VariableBandwidthFIRFilter('CutoffFrequency',10,...
    'SampleRate',Fs);

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

AP = dsp.ArrayPlot('PlotType','Line','YLimits',[-500 400],...
    'YLabel','Amplitude','XLabel','Number of samples');

Запустить алгоритм

for-loop - это цикл потоковой передачи, который оценивает групповую задержку фильтра. В контуре алгоритм фильтрует входной сигнал, оценивает передаточную функцию фильтра и дифференцирует фазу фильтра для вычисления групповой задержки.

Niter = 1000; % Number of iterations
for k = 1:Niter
        x = randn(512,1);  % Input signal = white Gaussian noise
        y = LPF(x);   % Filter noise with Lowpass FIR filter
        H = TFE(x,y); % Compute transfer function estimate
        Phase = PE(H); % Extract the Unwrapped phase
        phaseaftergain1 = Gain1*Phase;
        DiffOut = DF(phaseaftergain1); % Differentiate the phase
        phaseaftergain2 = Gain2 * DiffOut;
        VBFOut = VBFilter(phaseaftergain2); % Smooth the group delay
        AP(VBFOut); % Display the group delay
end

Как видно, групповая задержка фильтра нижних частот равна 100.

Создайте ЧМ-сигнал для сигнала несущей 100 Гц, дискретизированного на частоте 1,5 кГц.

Fc = 1e2;   % Carrier
Fs = 1.5e3; % Sample rate
sinewave = dsp.SineWave('Frequency',10,...
                            'SamplesPerFrame',1e3,...
                            'SampleRate',Fs);

Преобразуйте ЧМ-сигнал в AM-сигнал.

ts = timescope(2,...
                      'TimeSpanSource','Property',...
                      'TimeSpan',0.3,...
                      'BufferLength',10*Fs,...
                      'SampleRate',Fs,...
                      'ShowGrid',true,...
                      'YLimits',[-1.5 1.5],...
                      'LayoutDimensions',[2 1]);

df = dsp.Differentiator;

tic
while toc<2.2
    x = step(sinewave);
    fm_y = modulate(x,Fc,Fs,'fm');
    am_y = step(df,fm_y);
    step(ts,fm_y,am_y);
end

release(df);
release(ts);

Алгоритмы

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