Имеется Фильтр низких частот Parks-McClellana.
с параметрами:
P1 = 34; % Период отсечки (в барах)
D1 = 23; % Период отсечки переходного процесса (в барах)
A1 = 40; % Затухание в полосе задержки, -Дб
rp = 0.08; % Биения в полосе пропускания, Дб
часть кода была взята отсюда:
http://www.mathworks.com/access/helpdes ... pmord.html
Помогите переделать его в полосовой фильтр Parks-McClellana с параметрами:
P1 = 10;
D1 = 8;
P2 = 40
D2 = 44
A1 = 40;
A2 = 40
rp = 0.08;
заранее спасибо
-------------------------------------------------------------------------------------------------
clear all;
x=[1.9985,1.9885,1.9871,1.9921,1.9929,1.9889,1.9933,1.9778,1.9812,1.979,1.9858,1.9771,1.975,1.9746,1.9705,1.9747,1.986,1.9846,1.9837,1.9827,1.9812,1.9758,1.9803,.9823];
fs = 1; % Частота дискретизации 1 бар в ед.времени
P1 = 34; % Период отсечки (в барах)
D1 = 23; % Период отсечки переходного процесса (в барах)
A1 = 40; % Затухание в полосе задержки, -Дб
rp = 0.08; % Биения в полосе пропускания, Дб
mydelay = 0; % Задержка (в барах)
f = [1/P1 1/D1]; % частоты, соответствующие периодам отсечки
a = [1 0]; % желаемые амплитуды в полосах пропускания (1) и задерживания (0)
dev = [(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-A1/20)];
[n,fo,ao,w] = firpmord(f,a,dev,fs); % вычисление минимального порядка фильтра
% порядок фильтра равен n+1
b = firpm(n,fo,ao) ; % вычисление симметричной импульсной характеристики
h = b((floor((n+1)/2)+1-mydelay):end); % вычисление половины импульсной характеристики (с учетом задержки)
h = h/sum(h); % нормализация урезанной импульсной характеристики (чтобы сумма её отсчетов была равна единице)
y = filter(h,1,x); % вычисление выхода фильтра
t = length(h):length(x);
plot(t,x(length(h):end),'b',t,y(length(h):end),'r'); % рисунок ряда цен и выхода фильтра
pause
freqz(h,1,1000,fs) % частотная характеристика фильтра
pause
impz(h,1); % импульсная характеристика фильтра
----------------------------------------------------------------------------