Этот пример показывает, как создать Систему object™ состоявший из других Системных объектов. В этом примере создайте фильтр мультиметки с помощью двух Системных объектов dsp.NotchPeakFilter
. Фильтры мультиметки используются во многих приложениях. Примеры включают аудио фазовращатели и приложения, которые требуют удаления нескольких вмешивающихся тонов.
Создайте Системный объект Скользящего среднего значения, объясняет подробно, как записать Системный объект с помощью файла шаблона. В этом примере целый Системный объект обеспечивается для удобства в dspdemo.CompositeObj_MultiNotch
. Чтобы просмотреть код MATLAB®, в командной строке, войдите:
edit dspdemo.CompositeObj_MultiNotch
dspdemo.CompositeObj_MultiNotch
имеет пять публичных свойств. Публичные свойства доступны для каждого пользователя. Первое свойство, SampleRate
, является ненастраиваемым свойством. Ненастраиваемые свойства не могут измениться, когда фильтр заблокирован (после того, как вы используете step
на фильтре). Остающиеся свойства, CenterFrequency1
, CenterFrequency2
, QualityFactor1
и QualityFactor2
управляют настройками в двух фильтрах метки, содержавшихся в dspdemo.CompositeObj_MultiNotch
. Эти четыре свойства являются настраиваемыми. Можно изменить значения этих свойств при потоковой передаче данных.dspdemo.CompositeObj_MultiNotch
использует dsp.NotchPeakFilter
, чтобы разработать два фильтра метки. Фильтры метки настраиваются в методе setupImpl
.
methods (Access=protected) function setupImpl(obj,~) % Construct two notch filters with default values obj.NotchFilter1 = dsp.NotchPeakFilter(... 'Specification', 'Quality factor and center frequency',... 'CenterFrequency',400); obj.NotchFilter2 = dsp.NotchPeakFilter(... 'Specification', 'Quality factor and center frequency',... 'CenterFrequency',800); end end
Способность создать больше чем один экземпляр Системного объекта и имеющий каждый экземпляр справляется, его собственное состояние является одним из самых больших преимуществ использования Системных объектов по функциям. Частные свойства NotchFilter1
и NotchFilter2
используются, чтобы сохранить два фильтра метки.
properties (Access=private) % This example class contains two notch filters (more can be added % in the same way) NotchFilter1 NotchFilter2 end
Свойство SampleRate
, а также остающиеся четыре публичных свойств реализовано как зависимые свойства в этом примере. Каждый раз, когда вы присваиваете значение одному из зависимых свойств, значение установлено в соответствующем фильтре одно метки. Когда вы читаете одно из зависимых свойств, значение читается из соответствующего фильтра одно метки. Найдите следующий блок кода в dspdemo.CompositeObj_MultiNotch
.
properties (Dependent) %CenterFrequency1 Center frequency of first notch % Specify the first notch center frequency as a finite positive % numeric scalar in Hertz. The default is 400 Hz. This property % is tunable. CenterFrequency1; %QualityFactor1 Quality factor of first notch % Specify the quality factor (Q factor) for the first notch % filter. The default value is 5. This property is tunable. QualityFactor1; %CenterFrequency2 Center frequency of second notch % Specify the second notch center frequency as a finite positive % numeric scalar in Hertz. The default is 800 Hz. This property % is tunable. CenterFrequency2; %QualityFactor2 Quality factor of second notch % Specify the quality factor (Q factor) for the first notch % filter. The default value is 5. This property is tunable. QualityFactor2; end
Чтобы использовать dspdemo.CompositeObj_MultiNotch
, инициализируйте фильтр и любые другие необходимые компоненты. В этом примере инициализируйте средство чтения звукового файла, фильтр мультиметки, средство оценки передаточной функции, плоттер массивов и аудиоплеер.
FrameSize = 1024; AFR = dsp.AudioFileReader('guitar10min.ogg','SamplesPerFrame',FrameSize); Fs = AFR.SampleRate; MNF = dspdemo.CompositeObj_MultiNotch('SampleRate',Fs); TFE = dsp.TransferFunctionEstimator(... 'FrequencyRange','onesided','SpectralAverages',5); AP = dsp.ArrayPlot('PlotType','Line','YLimits',[-85 15],... 'SampleIncrement',Fs/FrameSize); P = audioDeviceWriter;
Чтобы проиллюстрировать приспособляемость двух частот центра фильтра метки, отличайтесь центральные частоты синусоидально по циклу. Стартовые центральные частоты составляют 500 и 2 000 Гц. Первая центральная частота колеблется в области значений [100, 900] Гц с частотой 0,2 Гц. Вторая центральная частота колеблется в области значений [1200, 2800] Гц с частотой 0,5 Гц. Поскольку CenterFrequency1
и CenterFrequency2
являются зависимыми свойствами, изменение их значений в цикле изменяет центральные частоты в двух фильтрах метки, содержавшихся в dspdemo.CompositeObj_MultiNotch
. Чтобы визуализировать фильтр мультиметки, оцените и стройте передаточную функцию постоянно. Добротности остаются постоянными. Симуляция запускается в течение 20 секунд.
MNF.QualityFactor1 = .5; MNF.QualityFactor2 = 1; f0 = 0.2; f1 = 0.5; k = 0; tic, while toc < 20 x = AFR(); t = k*FrameSize/Fs; k = k+1; MNF.CenterFrequency1 = 500 + 400*sin(2*pi*f0*t); MNF.CenterFrequency2 = 2000 + 800*sin(2*pi*f1*t); CF1(k) = MNF.CenterFrequency1; CF2(k) = MNF.CenterFrequency2; y = MNF(x); H = TFE(x(:,1),y(:,1)); magdB = 20*log10(abs(H)); AP(magdB); P(y); end
Выполните этот код, чтобы показать, как две частоты центра метки отличались по симуляции.
subplot(2,1,1) plot(CF1); title('Center Frequency 1'); ylabel('Notch CF (Hz)'); subplot(2,1,2) plot(CF2); title('Center Frequency 2'); ylabel('Notch CF (Hz)'); xlabel('Iteration')