Произвольное создание фильтра величины

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

КИХ-моделирование с методом выборки частоты

Этот раздел иллюстрирует случай, где амплитуда фильтра задана в полной области значений Найквиста (существует не ослаблено, или "не заботятся" об областях). Пример, который следует, использует один (полный) тип спецификации полосы и устойчивый алгоритм выборки частоты, чтобы спроектировать фильтр, амплитуда которого задана более чем три раздела: синусоидальный раздел, кусочный линейный раздел и квадратичный раздел. Необходимо выбрать большого порядка фильтра, потому что форма фильтра является вполне сложной:

N = 300;
B1 = 0:0.01:0.18;
B2 = [.2 .38 .4 .55 .562 .585 .6 .78];
B3 = 0.79:0.01:1;
A1 = .5+sin(2*pi*7.5*B1)/4;    % Sinusoidal section
A2 = [.5 2.3 1 1 -.2 -.2 1 1]; % Piecewise linear section
A3 = .2+18*(1-B3).^2;          % Quadratic section
F = [B1 B2 B3];
A = [A1 A2 A3];
d = fdesign.arbmag('N,F,A',N,F,A);
Hd = design(d,'freqsamp','SystemObject',true);
fvtool(Hd,'MagnitudeDisplay','Zero-phase','Color','White');

Figure Filter Visualization Tool - Zero-phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Zero-phase Response contains 2 objects of type line.

close(gcf)

В предыдущем примере нормированные точки частоты были распределены между 0 и рад/отсчет пи (включенное экстремальное значение). Можно также задать отрицательные частоты и получить комплексные фильтры. Следующий пример демонстрирует комплексный полосовой фильтр RF и использует окно Кайзера, чтобы смягчить последствия Явления Гиббса, которое происходит из-за разрыва величины на 70 дБ между - пи и частоты рад/отсчета пи:

load cfir.mat; % load a predefined set of frequency and amplitude vectors
N = 200;
d = fdesign.arbmag('N,F,A',N,F,A);
Hd = design(d,'freqsamp', 'window' ,{@kaiser,20},'SystemObject',true);
fvtool(Hd,'FrequencyRange','[-pi, pi)','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 2 objects of type line.

Моделирование сглаженных функций с КИХ-фильтром Equiripple

equiripple алгоритм хорошо подходит для моделирования сглаженных функций как показано в следующем примере, который моделирует экспоненциал с КИХ-фильтром минимального порядка. Пример задает маленькое значение пульсации через все частоты и задает веса, которые увеличиваются пропорционально до желаемой амплитуды, чтобы улучшать производительность на высоких частотах:

F = linspace(0,1,100);
A = exp(-2*pi*F); 
R = 0.045; % ripple
W = .1-20*log10(abs(A)); % weights
d = fdesign.arbmag('F,A,R',F,A,R);
Hd = design(d,'equiripple','weights',W,'SystemObject',true);
fvtool(Hd,'MagnitudeDisplay','Zero-phase', 'FrequencyRange','[0, pi)',...
    'Color','White');

Figure Filter Visualization Tool - Zero-phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Zero-phase Response contains 2 objects of type line.

Одно полоса по сравнению с многополосными КИХ-проектами Equiripple

В определенных приложениях это может представлять интерес сформировать полосу задерживания фильтра к, например, минимизировать интегрированные уровни бокового лепестка или улучшить робастность квантования. Следующий пример проектирует фильтр lowpass с полосой задерживания лестницы. Чтобы достигнуть проекта, это использует распределение весов, которые увеличивают затухание каждого шага на 5 дБ в полосе задерживания:

N = 150;
F = [0 .25 .3 .4 .401 .5 .501 .6 .601 .7 .701 .8 .801 .9 .901 1]; 
A = [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
W = 10.^([0 0 5 5 10 10 15 15 20 20 25 25 30 30 35 35]/20);
d = fdesign.arbmag('N,F,A',N,F,A);
Hd1 = design(d,'equiripple','weights',W,'SystemObject',true);

Следующий пример представляет альтернативный проект на основе использования многополосного подхода, который задает две полосы (полоса пропускания, и полоса задерживания) разделенный "не заботятся" об области (или полоса перехода):

B = 2;            % Number of bands
F1 = F(1:2);      % Passband
F2 = F(3:end);    % Stopband
% F(2:3)=[.25 .3] % Transition band
A1 = A(1:2);
A2 = A(3:end);
W1 = W(1:2);
W2 = W(3:end);
d = fdesign.arbmag('N,B,F,A',N,B,F1,A1,F2,A2);
Hd2 = design(d,'equiripple','B1Weights',W1,'B2Weights',W2,...
    'SystemObject',true);
hfvt = fvtool(Hd1,Hd2,'MagnitudeDisplay','Magnitude (dB)','Legend','On',...
    'Color','White');
legend(hfvt, 'Single-Band Design', 'Multi-Band Design');

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 Single-Band Design, Multi-Band Design.

Заметьте ясное преимущество многополосного подхода. Расслабляющими ограничениями в области перехода equiripple алгоритм сходится к решению с более низкими неравномерностями в полосе пропускания и большим затуханием в полосе задерживания. Другими словами, характеристики частоты первого фильтра могли быть соответствующими низшему порядку. Следующий пример иллюстрирует этот последний комментарий путем получения эквивалентных фильтров с помощью проектов минимального порядка.

Проекты минимального порядка требуют спецификации одного значения пульсации на полосу. В данном примере установите пульсацию на 0,0195 во всех полосах.

R = 0.0195;

% Single-band minimum order design
d = fdesign.arbmag('F,A,R',F,A,R);
Hd1 = design(d,'equiripple','Weights',W,'SystemObject',true);

% Multi-band minimum order design
d = fdesign.arbmag('B,F,A,R',B,F1,A1,R,F2,A2,R);
Hd2 = design(d,'equiripple','B1Weights',W1,'B2Weights',W2,...
    'SystemObject',true);

hfvt = fvtool(Hd1,Hd2,'Color','White');
legend(hfvt, 'Single-Band Minimum Order Design', ...
  'Multi-Band Minimum Order Design');

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 Single-Band Minimum Order Design, Multi-Band Minimum Order Design.

Неравномерность в полосе пропускания и затухание в полосе задерживания обоих соответствий проектов. Однако проект одно полосы имеет порядок 152, в то время как многополосный проект имеет порядок 72.

order(Hd)
ans = 32

Ограниченные многополосные проекты Экюриппла

Многополосные проекты equiripple позволяют вам задавать ограничения пульсации для различных полос, задавать одно диапазоны частот, и сила указала, что частота указывает на заданные значения.

Ограниченные проекты полосы

Следующий пример проектирует 80-й фильтр полосы пропускания порядка с затуханием 60 дБ в первой полосе задерживания и 40 дБ во второй полосе задерживания. Путем ослабления затухания второй полосы задерживания пульсация в полосе пропускания уменьшается при поддержании того же порядка фильтра.

N = 80; % filter order
B = 3;  % number of bands

d = fdesign.arbmag('N,B,F,A,C',N,B,[0 0.25],[0 0],true,...
  [0.3 0.6],[1 1],false,[0.65 1],[0 0],true)
d = 
  arbmag with properties:

               Response: 'Arbitrary Magnitude'
          Specification: 'N,B,F,A,C'
            Description: {4x1 cell}
    NormalizedFrequency: 1
            FilterOrder: 80
                 NBands: 3
          B1Frequencies: [0 0.2500]
           B1Amplitudes: [0 0]
          B1Constrained: 1
               B1Ripple: 0.2000
          B2Frequencies: [0.3000 0.6000]
           B2Amplitudes: [1 1]
          B2Constrained: 0
          B3Frequencies: [0.6500 1]
           B3Amplitudes: [0 0]
          B3Constrained: 1
               B3Ripple: 0.2000

B1Constrained и B3Constrained свойства собирались в истину указать, что первые и третьи полосы являются ограниченными полосами. Задайте значение пульсации для i-ой принужденной полосы, использующей BiRipple свойство:

d.B1Ripple = 10^(-60/20); % Attenuation for the first stopband
d.B3Ripple = 10^(-40/20); % Attenuation for the second stopband

Hd = design(d,'equiripple','SystemObject',true)
Hd = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [-0.0036 0.0049 0.0052 -0.0022 -0.0097 -0.0044 ... ]
    InitialConditions: 0

  Show all properties

fvtool(Hd,'Legend','Off','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 2 objects of type line.

Одно диапазоны частот

Следующий пример проектирует минимальный порядок equiripple фильтр с двумя метками в точно 0.25*pi и 0.55*pi рад/отсчет, и с пульсацией 0,15 в полосах пропускания.

B = 5; % number of bands
d = fdesign.arbmag('B,F,A,R',B);

d.B1Frequencies = [0 0.2];  
d.B1Amplitudes = [1 1];
d.B1Ripple = 0.15;
d.B2Frequencies = 0.25; % single-frequency band
d.B2Amplitudes = 0; 
d.B3Frequencies = [0.3 0.5]; 
d.B3Amplitudes = [1 1]; 
d.B3Ripple = 0.15;
d.B4Frequencies = 0.55; % single-frequency band
d.B4Amplitudes = 0; 
d.B5Frequencies = [0.6 1];  
d.B5Amplitudes = [1 1];
d.B5Ripple = 0.15;
Hd = design(d,'equiripple','SystemObject',true);
fvtool(Hd,'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 2 objects of type line.

Принудительные точки частоты

Следующий пример проектирует фильтр highpass с ребром полосы задерживания на уровне 100 Гц и ребром полосы пропускания на уровне 150 Гц. Предположим, что вы хотите отклонить сильную интерференцию на 60 Гц, не имея необходимость добавлять дополнительный фильтр или не имея необходимость увеличивать порядка фильтра на большую сумму. Можно сделать это путем принуждения ответа величины фильтра highpass, чтобы быть 0 на уровне 60 Гц:

B = 2;    % number of bands
N = 92;   % filter order
Fs = 2e3; % sampling frequency
d = fdesign.arbmag('N,B,F,A',N,B,[0 60 100],[0 0 0],[150 1000],[1 1],Fs);

Используйте B1ForcedFrequencyPoints проектное решение, чтобы обеспечить точку на 60 Гц к ее заданному амплитудному значению.

Hd = design(d,'equiripple','B1ForcedFrequencyPoints',60,...
    'SystemObject',true);
hfvt = fvtool(Hd,'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 2 objects of type line.

Масштабируйте в полосу задерживания фильтра highpass, чтобы заметить, что амплитуда является нулем в заданной точке частоты на 60 Гц:

hfvt.MagnitudeDisplay = 'Magnitude';
xlim([0 100])
ylim([0 0.015])

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

Одно полоса по сравнению с многополосными БИХ-проектами

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

Nb = 12; 
Na = 10;
F = linspace(0,1,100);
As = ones(1,100)-F*0.2;
Absorb = [ones(1,30),(1-0.6*bohmanwin(10))',...
    ones(1,5), (1-0.5*bohmanwin(8))',ones(1,47)];
A = As.*Absorb;
d = fdesign.arbmag('Nb,Na,F,A',Nb,Na,F,A);
W = [ones(1,30) ones(1,10)*.2 ones(1,60)];
Hd = design(d, 'iirlpnorm', 'Weights', W, 'Norm', 2, 'DensityFactor',30,...
    'SystemObject',true);
fvtool(Hd, 'MagnitudeDisplay','Magnitude (dB)', ...
    'NormalizedFrequency','On','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 2 objects of type line.

В других случаях, где ограничения могут быть ослаблены в одной или нескольких полосах перехода, многополосный подход предоставляет те же преимущества как в КИХ-случае (а именно, лучшая полоса пропускания и характеристики полосы задерживания). Следующий пример иллюстрирует эти различия путем моделирования канала радиосвязей Релеевского замирания:

Nb = 4;
Na = 6;
F = [0:0.01:0.4 .45 1];
A = [1.0./(1-(F(1:end-2)./0.42).^2).^0.25 0 0];
d = fdesign.arbmag('Nb,Na,F,A',Nb,Na,F,A); % single-band design
Hd1 = design(d,'iirlpnorm','SystemObject',true);

B = 2;
F1 = F(1:end-2);          % Passband
F2 = F(end-1:end);        % Stopband
% F(end-2:end-1)=[.4 .45] % Transition band
A1 = A(1:end-2);  
A2 = A(end-1:end);
d = fdesign.arbmag('Nb,Na,B,F,A',Nb,Na,B,F1,A1,F2,A2); % multi-band design
Hd2 = design(d,'iirlpnorm','SystemObject',true);
hfvt = fvtool(Hd1,Hd2,'Color','White');
legend(hfvt, 'Single-Band Design', 'Multi-Band Design');

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 Single-Band Design, Multi-Band Design.