Почему я получаю два разных ответа, когда пытаюсь дискретизировать один и тот же аналоговый фильтр с помощью функций 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);
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ