(MATLAB) Разница между fvtool (FilterObject) и fvtool (FilterObject.SOSMatrix) - PullRequest
1 голос
/ 10 июня 2019

Я разрабатываю цифровой фильтр для усиления низких частот и использую для этого произвольную величину IIR.Код представлен ниже:

% Acquisition Frequency
FreqAq = 1024;

% Low Frequency Gain
LFGain = 10^(14.4/20);

% Frequency Intervals
FreqIntv = [2 6 600]/FreqAq;

% Numerator Order
NumOrder = 40;

% Denominator Order
DenOrder = 45;

% Frequency Spectrum
Freq = linspace(0,FreqAq,FreqAq + 1)/FreqAq;

% Amplitude Design
bLF = log(1/LFGain)/(FreqIntv(1) - FreqIntv(2));
aLF = LFGain*exp(bLF*FreqIntv(1));

A = [LFGain*ones(1,find(Freq ==  FreqIntv(1))),...
          aLF*exp(-bLF*Freq(find(Freq == FreqIntv(1)) + 1:find(Freq == FreqIntv(2)))),...
          ones(1,find(Freq == FreqIntv(3)) - find(Freq == FreqIntv(2))),...
          ones(1,length(Freq) - find(Freq == FreqIntv(3)))];

% Arbitrary response magnitude filter specification object
d = fdesign.arbmag('Nb,Na,F,A',NumOrder,DenOrder,Freq,A);

% Filter Weights
W = [ones(1,find(Freq ==  FreqIntv(1)))*1 ...
     ones(1,length(Freq(find(Freq == FreqIntv(1)) + 1:find(Freq == FreqIntv(2)))))*.1 ...
     ones(1,find(Freq == 10/FreqAq,1,'first') - find(Freq == FreqIntv(2)))*1 ones(1,find(Freq == FreqIntv(3)) - find(Freq == 10/FreqAq,1,'first'))...
     ones(1,length(Freq) - find(Freq == FreqIntv(3)))*1];

% Filter Design
Hd = design(d, 'iirlpnorm', 'Weights', W, 'Norm', 2, 'DensityFactor',30,...
    'SystemObject',true);

При фильтрации данных я не получаю то, что ожидал.

DataFiltered = sosfilt(Hd.SOSMatrix,Data)

Чтобы проверить, что было не так, я построил график:

fvtool(Hd, 'MagnitudeDisplay','Magnitude (dB)', ...
    'NormalizedFrequency','On','Color','White');

fvtool(Hd.SOSMatrix, 'MagnitudeDisplay','Magnitude (dB)', ...
    'NormalizedFrequency','On','Color','White');

и заметил, что второй сдвинут примерно на + 35 дБ, то есть тот, который используется для фильтра.

Кажется, я не понимаю, что не так с моим кодом, если способ, которым я отфильтровал данные, неверен, или есть какая-либо разница между тем, как вычисляется величина.Любая информация будет принята с благодарностью!

Заранее благодарим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...