Проект достигания максимума и отметки фильтров

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

Фильтры метки второго порядка

Предположим, что необходимо устранить интерференцию на 60 Гц в сигнал, произведенный на уровне 3 000 Гц. Фильтр метки может использоваться для такой цели. Функция iirnotch может быть использован для расчета коэффициенты фильтра метки второго порядка.

Вот пример:

F0 = 60;   % Interference is at 60 Hz
Fs = 3000; % Sampling frequency is 3000 Hz
BW = 6;    % Choose a bandwidth factor of 6Hz
[num1,den1] = iirnotch(F0/(Fs/2),BW/(Fs/2));
fvtool(num1,den1,'Fs',Fs,'Color','white');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains an object of type line.

Эквивалентный способ спроектировать фильтр состоит в том, чтобы задать добротность и получить полосу пропускания на 3 дБ. Добротность задана как отношение метки или пиковой частоты F0 и полоса пропускания на 3 дБ BW. Математически, Q фактор дают Q=F0/BW. В вышеупомянутом случае значение добротности равняется 10. Определение полосы пропускания является более удобным способом достигнуть точно желаемой формы для спроектированного фильтра. Там Q фактор фильтра мера того, как хорошо желаемая частота изолируется от других частот. Для фиксированного порядка фильтра более высокий фактор Q выполняется путем продвижения полюсов ближе к нулям.

Визуализируйте ответ величины фильтра с помощью fvtool.

Q2 = 100;    % Choose a Q factor of 100
[num2,den2] = iirnotch(F0/(Fs/2),F0/(Q2*Fs/2));
fvt = fvtool(num1,den1,num2,den2,'Fs',Fs,'Color','white');
legend(fvt,'Q = 10','Q = 100');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Q = 10, Q = 100.

Фильтры Пика второго порядка

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

F0 = 1000;   % Interference is at 60 Hz
Fs = 3000;   % Sampling frequency is 3000 Hz
Q1 = 10;
[num1,den1] = iirpeak(F0/(Fs/2),F0/(Q1*Fs/2));
Q2 = 100;
[num2,den2] = iirpeak(F0/(Fs/2),F0/(Q2*Fs/2));
fvt = fvtool(num1,den1,num2,den2,'Fs',Fs,'Color','white');
legend(fvt,'Q = 10','Q = 100');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Q = 10, Q = 100.

Время варьируясь Реализация фильтра Метки Второго порядка

Используя изменяющиеся во времени фильтры требует изменения коэффициентов фильтра, в то время как симуляция запускается. DSP System Toolbox™ обеспечивает определенные функции, такие как the iirnotch функционируйте и dsp.NotchPeakFilter возразите, чтобы спроектировать изменяющиеся во времени настраиваемые фильтры метки. Эти функции вычисляют коэффициенты фильтра непосредственно.

Динамическая симуляция со статическим фильтром

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

Запустите путем создания динамической (переданной потоком) симуляции с фильтрами, коэффициенты которых не изменяются. Создайте два фильтра метки второго порядка, одно использование dsp.SOSFilter возразите и второе использование dsp.NotchFilter объект. В первом фильтре, набор центральная частота к 1 кГц и полоса пропускания на уровне-3 дБ к 50 Гц. Вычислите коэффициенты этого фильтра непосредственно с помощью iirnotch функция. Во втором фильтре, набор центральная частота к 3 кГц и полоса пропускания на уровне-3 дБ к 50 Гц. Частота дискретизации для обоих фильтров составляет 8 кГц.

Fs = 8e3;    % 8 kHz sampling frequency
F01 = 1e3;   % Notch at 1 kHz for Filter 1
BW = 500;    % 500 Hz bandwidth for both filters
[b, a] = iirnotch(F01/(Fs/2), BW/(Fs/2))    % Filter 1 coefficients
b = 1×3

    0.8341   -1.1796    0.8341

a = 1×3

    1.0000   -1.1796    0.6682

sosFilter = dsp.SOSFilter(b,a);

F02 = 3e3;    % Notch at 3 kHz for Filter 2
npFilter = dsp.NotchPeakFilter('CenterFrequency',F02,'Bandwidth',BW,...
    'SampleRate',Fs);

scope = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum', false, ...
    'SampleRate', Fs, ...
    'AveragingMethod',"Exponential",...
    'ForgettingFactor',.95,...
    'Method','Filter bank',...
    'ChannelNames',{'Filter 1','Filter 2'},...
    'ShowLegend',true);

samplesPerFrame = 256;
nFrames = 8192;
for k = 1:nFrames
   x = randn(samplesPerFrame, 1);
   y1 = sosFilter(x);
   y2 = npFilter(x);
   scope([y1,y2]);
end

Figure Spectrum Analyzer contains an axes object and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes object contains 2 objects of type line. These objects represent Filter 1, Filter 2.

Динамическая симуляция с изменяющимся во времени фильтром

Для изменяющегося во времени фильтра коэффициенты изменяющихся во времени фильтров изменяются в зависимости от времени из-за изменений во время выполнения в расчетных параметрах (например, центральная частота для фильтра метки). Создайте два фильтра метки второго порядка со временем различные расчетные параметры. Подобно вышеупомянутому примеру используйте iirnotch функционируйте и dsp.SOSFilter объект реализовать первый фильтр и dsp.NotchFilter объект реализовать второй фильтр. Варьируйтесь расчетные параметры обоих фильтров в зависимости от времени.

% Notch filter parameters - how they vary over time
Fs = 8e3;                       % 8 kHz sampling frequency
F01 = 1e3 * [0.5, 1, 1.5, 3];   % Notch frequencies for Filter 1
F02 = 1e3 * [3.5, 3, 2.5, 2];   % Notch frequencies for Filter 2
BW = 500 * ones(1,4);           % 500 Hz bandwidth for both filters

myChangingParams1 = struct('f0', num2cell(F01/(Fs/2)), 'bw', num2cell(BW/(Fs/2)));
myChangingParams2 = struct('F0', num2cell(F02), 'BW', num2cell(BW));
paramsChangeTimes = [0, 70, 140, 210]; % in seconds

% Simulation time management
nSamplesPerFrame = 256;
tEnd = 300;
nSamples = ceil(tEnd * Fs);
nFrames = floor(nSamples / nSamplesPerFrame);

% Object creation
sosFilter = dsp.SOSFilter; %Filter 1 object
npFilter = dsp.NotchPeakFilter('SampleRate',Fs);
scope = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum', false, ...
    'SampleRate', Fs, ...
    'AveragingMethod',"Exponential",...
    'ForgettingFactor',.75,......
    'RBWSource', 'Auto',...
    'Method','Filter bank',...
    'ChannelNames',{'Filter 1','Filter 2'},...
    'ShowLegend',true);
paramtbl1 = ParameterTimeTable('Time', paramsChangeTimes, ...
    'Values', myChangingParams1, ...
    'SampleRate', Fs/nSamplesPerFrame);
paramtbl2 = ParameterTimeTable('Time', paramsChangeTimes, ...
    'Values', myChangingParams2, ...
    'SampleRate', Fs/nSamplesPerFrame);

% Actual simulation loop
for frameIdx = 1:nFrames
    % Get current F0 and BW
    [params1, update1] = paramtbl1();
    [params2, update2] = paramtbl2();
    if(update1)
        % Recompute filter coefficients if parameters changed
        [b, a] = iirnotch(params1.f0, params1.bw);
        % Set filter coefficients to new values
        sosFilter.Numerator = b;
        sosFilter.Denominator = a;
    end
    if(update2)
        npFilter.CenterFrequency = params2.F0;
        npFilter.Bandwidth = params2.BW;
    end
    % Generate vector of white noise samples
    x = randn(nSamplesPerFrame, 1);
    % Filter noise
    y1 = sosFilter(x);
    y2 = npFilter(x);
    % Visualize spectrum
    scope([y1,y2]);
end

Figure Spectrum Analyzer contains an axes object and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes object contains 2 objects of type line. These objects represent Filter 1, Filter 2.

Настраиваемый худой фильтр может быть реализован так же с помощью dsp.NotchPeakFilter объект или использование iirpeak функция и dsp.SOSFilter объект.

Примечание: Эти настраиваемые худые и отмечающие фильтры поддерживают генерацию кода.

Фильтр Метки высшего порядка

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

notchspec = fdesign.notch('N,F0,Q',2,.4,100);
notchfilt = design(notchspec,'SystemObject',true);
notchspec.FilterOrder = 6;
notchfilt1 = design(notchspec,'SystemObject',true);
fvt= fvtool(notchfilt, notchfilt1, 'Color','white');
legend(fvt,'2nd Order Filter','6th Order Filter');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent 2nd Order Filter, 6th Order Filter.

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

N = 8; F0 = 0.4; BW = 0.1;
notchspec = fdesign.notch('N,F0,BW',N,F0,BW);
notchfilt = design(notchspec,'SystemObject',true);
notchspec1 = fdesign.notch('N,F0,BW,Ap,Ast',N,F0,BW,0.5,60);
notchfilt1 = design(notchspec1,'SystemObject',true);
fvt= fvtool(notchfilt, notchfilt1, 'Color','white');
legend(fvt,'Maximally Flat 8th Order Filter',...
    '8th Order Filter With Passband/Stopband Ripples', ...
    'Location','SouthEast');
axis([0 1 -90 0.5]);

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Maximally Flat 8th Order Filter, 8th Order Filter With Passband/Stopband Ripples.

Фильтры Пика высшего порядка

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

Вот пример высшего порядка, достигающего максимума фильтр:

N = 6; F0 = 0.7; BW = 0.001;
peakspec = fdesign.peak('N,F0,BW',N,F0,BW);
peakfilt = design(peakspec,'SystemObject',true);
peakspec1 = fdesign.peak('N,F0,BW,Ast',N,F0,BW,80);
peakfilt1 = design(peakspec1,'SystemObject',true);
fvt= fvtool(peakfilt, peakfilt1, 'Color','white');
legend(fvt,'Maximally Flat 6th Order Filter',...
    '6th Order Filter With 80 dB Stopband Attenuation','Location','SouthEast');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Maximally Flat 6th Order Filter, 6th Order Filter With 80 dB Stopband Attenuation.