Этот пример показов, как спроектировать различные конечные импульсные характеристики и БИХ-цифровые фильтры с designfilt
функция в продукте Signal Processing Toolbox ®.
Галерея предназначена для того, чтобы вы идентифицировали интересующий вас фильтр, просмотрели код и использовали его в собственном проекте. Он содержит примеры для каждого из доступных ответов фильтра, предлагаемых designfilt
. Обратите внимание, однако, что это лишь некоторые из возможных способов, с помощью которых можно проектировать фильтры для каждого типа отклика. Исчерпывающий список наборов спецификаций см. в документации по Signal Processing Toolbox.
Кроме тех случаев, когда указано обратное, в этом примере все частотные модули находятся в герце, и все значения пульсации и ослабления находятся в децибелах.
Эквириппл- Проект
Fpass = 100; Fstop = 150; Apass = 1; Astop = 65; Fs = 1e3; d = designfilt('lowpassfir', ... 'PassbandFrequency',Fpass,'StopbandFrequency',Fstop, ... 'PassbandRipple',Apass,'StopbandAttenuation',Astop, ... 'DesignMethod','equiripple','SampleRate',Fs); fvtool(d)
Максимально Плоский Проект
Fpass = 100; Fstop = 150; Apass = 0.5; Astop = 65; Fs = 1e3; d = designfilt('lowpassiir', ... 'PassbandFrequency',Fpass,'StopbandFrequency',Fstop, ... 'PassbandRipple',Apass,'StopbandAttenuation',Astop, ... 'DesignMethod','butter','SampleRate',Fs); fvtool(d)
Ripple в Passband и Stop Band
N = 8; Fpass = 100; Apass = 0.5; Astop = 65; Fs = 1e3; d = designfilt('lowpassiir', ... 'FilterOrder',N, ... 'PassbandFrequency',Fpass, ... 'PassbandRipple',Apass,'StopbandAttenuation',Astop, ... 'SampleRate',Fs); fvtool(d)
Эквириппл- Проект
Fstop = 350; Fpass = 400; Astop = 65; Apass = 0.5; Fs = 1e3; d = designfilt('highpassfir','StopbandFrequency',Fstop, ... 'PassbandFrequency',Fpass,'StopbandAttenuation',Astop, ... 'PassbandRipple',Apass,'SampleRate',Fs,'DesignMethod','equiripple'); fvtool(d)
Максимально Плоский Проект
Fstop = 350; Fpass = 400; Astop = 65; Apass = 0.5; Fs = 1e3; d = designfilt('highpassiir','StopbandFrequency',Fstop ,... 'PassbandFrequency',Fpass,'StopbandAttenuation',Astop, ... 'PassbandRipple',Apass,'SampleRate',Fs,'DesignMethod','butter'); fvtool(d)
Ripple в Passband и Stop Band
N = 8; Fpass = 400; Astop = 65; Apass = 0.5; Fs = 1e3; d = designfilt('highpassiir', ... 'FilterOrder',N, ... 'PassbandFrequency',Fpass, ... 'StopbandAttenuation',Astop,'PassbandRipple',Apass, ... 'SampleRate',Fs); fvtool(d)
Эквириппл- Проект
Fstop1 = 150; Fpass1 = 200; Fpass2 = 300; Fstop2 = 350; Astop1 = 65; Apass = 0.5; Astop2 = 65; Fs = 1e3; d = designfilt('bandpassfir', ... 'StopbandFrequency1',Fstop1,'PassbandFrequency1', Fpass1, ... 'PassbandFrequency2',Fpass2,'StopbandFrequency2', Fstop2, ... 'StopbandAttenuation1',Astop1,'PassbandRipple', Apass, ... 'StopbandAttenuation2',Astop2, ... 'DesignMethod','equiripple','SampleRate',Fs); fvtool(d)
Асимметричные ослабления полосы
N = 50; Fstop1 = 150; Fpass1 = 200; Fpass2 = 300; Fstop2 = 350; Wstop1 = 3; Wstop2 = 100; Fs = 1e3; d = designfilt('bandpassfir', ... 'FilterOrder',N, ... 'StopbandFrequency1',Fstop1,'PassbandFrequency1', Fpass1, ... 'PassbandFrequency2',Fpass2,'StopbandFrequency2', Fstop2, ... 'StopbandWeight1',Wstop1,'StopbandWeight2',Wstop2, ... 'DesignMethod','equiripple','SampleRate',Fs); fvtool(d)
Максимально Плоский Проект
Fstop1 = 150; Fpass1 = 200; Fpass2 = 300; Fstop2 = 350; Astop1 = 65; Apass = 0.5; Astop2 = 65; Fs = 1e3; d = designfilt('bandpassiir', ... 'StopbandFrequency1',Fstop1,'PassbandFrequency1', Fpass1, ... 'PassbandFrequency2',Fpass2,'StopbandFrequency2', Fstop2, ... 'StopbandAttenuation1',Astop1,'PassbandRipple', Apass, ... 'StopbandAttenuation2',Astop2, ... 'DesignMethod','butter','SampleRate', Fs); fvtool(d)
Ripple в Passband и Stop Band
N = 8; Fpass1 = 200; Fpass2 = 300; Astop1 = 65; Apass = 0.5; Astop2 = 65; Fs = 1e3; d = designfilt('bandpassiir', ... 'FilterOrder',N, ... 'PassbandFrequency1', Fpass1,'PassbandFrequency2', Fpass2, ... 'StopbandAttenuation1', Astop1, 'PassbandRipple', Apass, ... 'StopbandAttenuation2', Astop2, ... 'SampleRate', Fs); fvtool(d)
Эквириппл- Проект
Fpass1 = 100; Fstop1 = 150; Fstop2 = 350; Fpass2 = 400; Apass1 = 0.5; Astop = 65; Apass2 = 0.5; Fs = 1e3; d = designfilt('bandstopfir', ... 'PassbandFrequency1',Fpass1,'StopbandFrequency1',Fstop1, ... 'StopbandFrequency2',Fstop2,'PassbandFrequency2',Fpass2, ... 'PassbandRipple1',Apass1,'StopbandAttenuation',Astop, ... 'PassbandRipple2', Apass2, ... 'DesignMethod','equiripple','SampleRate', Fs); fvtool(d)
Asymmetric Неравномерности в Полосе Пропускания
N = 30; Fpass1 = 100; Fstop1 = 150; Fstop2 = 350; Fpass2 = 400; Wpass1 = 1; Wpass2 = 10; Fs = 1e3; d = designfilt('bandstopfir', ... 'FilterOrder',N, ... 'PassbandFrequency1',Fpass1,'StopbandFrequency1',Fstop1, ... 'StopbandFrequency2',Fstop2,'PassbandFrequency2',Fpass2, ... 'PassbandWeight1',Wpass1,'PassbandWeight2',Wpass2, ... 'DesignMethod','equiripple','SampleRate', Fs); fvtool(d)
Максимально Плоский Проект
Fpass1 = 100; Fstop1 = 150; Fstop2 = 350; Fpass2 = 400; Apass1 = 0.5; Astop = 65; Apass2 = 0.5; Fs = 1e3; d = designfilt('bandstopiir', ... 'PassbandFrequency1',Fpass1,'StopbandFrequency1',Fstop1, ... 'StopbandFrequency2',Fstop2,'PassbandFrequency2',Fpass2, ... 'PassbandRipple1',Apass1,'StopbandAttenuation',Astop, ... 'PassbandRipple2', Apass2, ... 'DesignMethod','butter','SampleRate', Fs); fvtool(d)
Ripple в Passband и Stop Band
N = 8; Fpass1 = 125; Fpass2 = 375; Apass = 0.5; Astop = 65; Fs = 1e3; d = designfilt('bandstopiir', ... 'FilterOrder',N, ... 'PassbandFrequency1',Fpass1,'PassbandFrequency2',Fpass2, ... 'PassbandRipple',Apass,'StopbandAttenuation', Astop, ... 'SampleRate',Fs); fvtool(d)
Однополосный произвольный проект величины
N = 300; % Frequencies are in normalized units F1 = 0:0.01:0.18; F2 = [.2 .38 .4 .55 .562 .585 .6 .78]; F3 = 0.79:0.01:1; FreqVect = [F1 F2 F3]; % vector of frequencies % Define desired response using linear units A1 = .5+sin(2*pi*7.5*F1)/4; % Sinusoidal section A2 = [.5 2.3 1 1 -.2 -.2 1 1]; % Piecewise linear section A3 = .2+18*(1-F3).^2; % Quadratic section AmpVect = [A1 A2 A3]; d = designfilt('arbmagfir',... 'FilterOrder',N,'Amplitudes',AmpVect,'Frequencies',FreqVect,... 'DesignMethod','freqsamp'); fvtool(d,'MagnitudeDisplay','Zero-phase')
Многополосный Lowpass Проект с ступенчатыми уровнями ослабления на Stop Band
N = 150; B = 2; % Number of bands % Frequencies are in normalized units F1 = [0 .25]; % Passband F2 = [.3 .4 .401 .5 .501 .6 .601 .7 .701 .8 .801 .9 .901 1]; % Stopband A1 = ones(size(F1)); % Desired amplitudes for band 1 in linear units A2 = zeros(size(F2)); % Desired amplitudes for band 2 in linear units % Vector of weights W = 10.^([0 0 5 5 10 10 15 15 20 20 25 25 30 30 35 35]/20); W1 = W(1:2); % Weights for band 1 W2 = W(3:end); % Weights for band 2 d = designfilt('arbmagfir', ... 'FilterOrder',N,'NumBands',B, ... 'BandFrequencies1',F1,'BandAmplitudes1',A1, ... 'BandFrequencies2',F2,'BandAmplitudes2',A2, ... 'BandWeights1',W1,'BandWeights2', W2); fvtool(d)
Полный проект полосы
N = 41; Fs = 1e3; d = designfilt('differentiatorfir', ... 'FilterOrder',N, 'DesignMethod','equiripple','SampleRate',Fs); fvtool(d,'MagnitudeDisplay','zero-phase','OverlayedAnalysis','phase')
Частичные Полосы Проекта
N = 40; Fpass = 100; Fstop = 150; Fs = 1e3; d = designfilt('differentiatorfir', ... 'FilterOrder',N, ... 'PassbandFrequency',Fpass,'StopbandFrequency',Fstop, ... 'DesignMethod','equiripple','SampleRate',Fs); fvtool(d,'MagnitudeDisplay','zero-phase','OverlayedAnalysis','phase')
Эквириппл- Проект
N = 40; Tw = 50; Fs = 1e3; d = designfilt('hilbertfir', ... 'FilterOrder',N,'TransitionWidth',Tw, ... 'DesignMethod','equiripple','SampleRate',Fs); fvtool(d,'MagnitudeDisplay','Zero-phase','OverlayedAnalysis','phase')