Почему я получаю два разных ответа, когда пытаюсь дискретизировать один и тот же аналоговый фильтр с помощью функций ELLIP и ELLIPAP в Обработка сигналов Toolbox 6.12 (R2009b)?

Я пытаюсь дискретизировать аналоговый фильтр, используя функцию ELLIP с параметром «s» и функцию ELLIPAP. Характеристики аналогового фильтра одинаковы в обоих случаях. В случае использования функции ELLIP с аргументом «s» я дискретизирую фильтр с помощью билинейного преобразования, как показано в коде ниже.

Fs = 2e9; 
FN = Fs/2;
fp = 0.4*FN; 
fs = 0.42*FN;
wp = fp*2*pi; 
ws = fs*2*pi;
Ap = 1.2; 
As = 100;
% Calculate filter coefficients and frequency responses
[N, wc] = ellipord(wp, ws, Ap, As, 's'); 
[B, A] = ellip(N, Ap, As, wc, 's');
[bBZT, aBZT] = bilinear(B, A, Fs); 
[Ha, wa] = freqs(B, A);
figure;
plot(wa/(2*pi), 20*log10(abs(Ha)))  
[HB, fB]=freqz(bBZT, aBZT, 512, Fs);
hold on
plot(fB, 20*log10(abs(HB)), 'r'); 
legend('Analog Response', 'Digital reponse');

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

Fs = 2e9; 
FN = Fs/2;
fp = 0.4*FN; 
fs = 0.42*FN;
wp = fp*2*pi;
ws = fs*2*pi;
Ap = 1.2; 
As = 100;
% Calculate filter coefficients and frequency responses
[N, wc] = ellipord(wp, ws, Ap, As,'s'); 
[z, p, k] = ellipap(N, Ap, As); 
[A, B, C, D] = zp2ss(z, p, k); 
[At, Bt, Ct, Dt] = lp2lp(A, B, C, D, wc); 
[Bs, As] = ss2tf(At, Bt, Ct, Dt);
[Ad, Bd, Cd, Dd] = bilinear(At, Bt, Ct, Dt, Fs);
[bd, ad] = ss2tf(Ad, Bd, Cd, Dd);
[Ha, wa]=freqs(Bs, As);
figure; 
plot(wa/(2*pi), 20*log10(abs(Ha))) 
hold on
[HB, fB]=freqz(bd, ad, 512, Fs);
plot(fB, 20*log10(abs(HB)), 'r'); 
legend('Analog Response(using Analog prototype)', 'Digital response (using Analog prototype)');

Однако я наблюдаю разные ответы для дискретизированных фильтров, сгенерированных из приведенного выше кода.

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

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

В сценарии, использующем ELLIP, генерируется передаточная функция, которой почти всегда следует избегать, если вы хотите получить численно устойчивый фильтр. Модифицированный ниже сценарий даст один и тот же фильтр, независимо от того, используете ли вы ELLIP или ELLIPAP:

Fs=2e9; 
FN=Fs/2; % Sampling and Nyquist frequencies
fp=0.4*FN; 
fs=0.42*FN; %Passband and Stopband frequencies
wp=fp*2*pi; 
ws=fs*2*pi; %Passband and Stopband edge frequencies
Ap=1.2; 
As=100; % Passband and Stopband attenuation
% Calculate filter coefficients and frequency responses
[N, wc]=ellipord(wp, ws, Ap, As, 's'); % analog filter
%--------------------------------------------------------------------------
% Design using ELLIP for the analog prototype
%--------------------------------------------------------------------------
[A, B, C, D] = ellip(N, Ap, As, wc, 's');
[Ad, Bd, Cd, Dd] = bilinear(A, B, C, D, Fs);
[sos, g] = ss2sos(Ad, Bd, Cd, Dd);
hd1 = dfilt.df2sos(sos, g);

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ