Проверка фильтра
Проверка фильтра
Добрый день, ситуация такая:
Сделал расчёт коэффициентов БИХ фильтра, получился фильтр Батрворта 4го порядка, далее получил разностное уравнение, теперь нужно пропустить через это разностное уравнение синусоидальный сигнал, и проверить что он выдаст. Всё это дело нужно провернуть в матлабе
Вот полученное разностное уравнение:
y(n)= x(n-4)+4x(n-3)+7x(n-2)+6x(n-1)+10,23x-0,02964y(n-4)+0,11856y(n-3)-1,19019y(n-2)+2,14326y(n-1)-1,04199y
Я так полагаю, что тут нужно делать через корреляцию разностного уравнения и синусоидального сигнала, как это сделать?
Сделал расчёт коэффициентов БИХ фильтра, получился фильтр Батрворта 4го порядка, далее получил разностное уравнение, теперь нужно пропустить через это разностное уравнение синусоидальный сигнал, и проверить что он выдаст. Всё это дело нужно провернуть в матлабе
Вот полученное разностное уравнение:
y(n)= x(n-4)+4x(n-3)+7x(n-2)+6x(n-1)+10,23x-0,02964y(n-4)+0,11856y(n-3)-1,19019y(n-2)+2,14326y(n-1)-1,04199y
Я так полагаю, что тут нужно делать через корреляцию разностного уравнения и синусоидального сигнала, как это сделать?
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Проверка фильтра
Ну если вам просто требуется проверить выход вашего фильтра, то можно воспользоваться стандартной функцией filter и передать в него коэффициенты b как коэффициенты нерекурсивной ветви (те что перед х), вектор а это коэффициенты рекурсивной части.
Только я не понял почему в вашем разностном уравнении присутствует -1,04199y. Это кажется странным, что выход зависит от себя самого
Только я не понял почему в вашем разностном уравнении присутствует -1,04199y. Это кажется странным, что выход зависит от себя самого
Re: Проверка фильтра
Мне нужно именно код написать, что бы можно было потом параметры входного синусоидального сигнала менять а по поводу -1,04199y - не знаю...Вот если что передаточная
- Вложения
-
- Снимок.PNG (2.4 КБ) 4493 просмотра
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Проверка фильтра
b =[10.23 6 7 4 1];
a =[1.04199 2.13426 -1.19019 0.11856 -0.02964];
y=filter(b, a, x)
Здесь x вектор входного сигнала y - выход фильтра
a =[1.04199 2.13426 -1.19019 0.11856 -0.02964];
y=filter(b, a, x)
Здесь x вектор входного сигнала y - выход фильтра
Re: Проверка фильтра
Если через корреляцию делать, вот код есть, можно ли в него записать это уравнение и сгенерировать синусоидальный сигнал?
x=5;
y=3;
N=x+y-1;
a=zeros(1,N);
b=zeros(1,N);
cor=zeros(1,N);
a(1:x)=1;
b(1:y)=1;
for i=0:1:N-1;
c=a.*b;
tmp=sum(c)/N;
j=i+1;
cor(j)=tmp;
b=circshift(b,[0,-1]);
end;
cor=circshift(cor,[0,-y]);
b1=wrev(b);
for i=0:1:N-1
c=a.*b1;
tmp=sum(c)/N;
j=i+1;
conv(j)=tmp;
b1=circshift(b1,[0,-1]);
end
x=5;
y=3;
N=x+y-1;
a=zeros(1,N);
b=zeros(1,N);
cor=zeros(1,N);
a(1:x)=1;
b(1:y)=1;
for i=0:1:N-1;
c=a.*b;
tmp=sum(c)/N;
j=i+1;
cor(j)=tmp;
b=circshift(b,[0,-1]);
end;
cor=circshift(cor,[0,-y]);
b1=wrev(b);
for i=0:1:N-1
c=a.*b1;
tmp=sum(c)/N;
j=i+1;
conv(j)=tmp;
b1=circshift(b1,[0,-1]);
end
Re: Проверка фильтра
Чёт у меня не понятная штука получилась, какая-то, когда я в матлаб это дело забил:Бахурин Сергей писал(а): ↑18 дек 2017, 20:26b =[10.23 6 7 4 1];
a =[1.04199 2.13426 -1.19019 0.11856 -0.02964];
y=filter(b, a, x)
Здесь x вектор входного сигнала y - выход фильтра
Fs = 8000;
dt = 1/Fs;
StopTime = 0.25;
t = (0:dt:StopTime-dt)';
Fc = 4000;
x = sin(2*pi*Fc*t);
b =[10.23 6 7 4 1];
a =[1.04199 2.13426 -1.19019 0.11856 -0.02964];
y=filter(b, a, x)
figure;
plot(t,y);
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Проверка фильтра
Это означает, что фильтр неустойчив.
Вместо ваших коэффициентов введите что возвращает
[b,a]=butter(7, 0.1)
И проверьте ещё раз.
Вместо ваших коэффициентов введите что возвращает
[b,a]=butter(7, 0.1)
И проверьте ещё раз.
Re: Проверка фильтра
Т.е надо заново пересчитывать коэффициенты?
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Проверка фильтра
Видимо да. Можете попробовать построить характеристики фильтра командой fvtool(b,a) откроется окно в котором будет ачх фчх, и можно посмотреть расположение нулей и полюсов. Если полюс (крестиком обозначен) за пределами окружности, значит фильтр неустойчив.
Re: Проверка фильтра
А как сделать, что бы вот это работало:
Fs = 8000;
dt = 1/Fs;
StopTime = 0.25;
t = (0:dt:StopTime-dt)';
Fc = 4000;
x = sin(2*pi*Fc*t);
y(n)= x(n-4)+4x(n-3)+7x(n-2)+6x(n-1)+10,23x-0,02964y(n-4)+0,11856y(n-3)-1,19019y(n-2)+2,14326y(n-1)-1,04199y;
z=conv(x,y)
figure;
plot(t,z);
Как бы коэффициенты я другие расчитаю(что бы фильтр устойчивый был), но нужно, что бы проверка фильтра происходила в такой форме, через свёртку
Fs = 8000;
dt = 1/Fs;
StopTime = 0.25;
t = (0:dt:StopTime-dt)';
Fc = 4000;
x = sin(2*pi*Fc*t);
y(n)= x(n-4)+4x(n-3)+7x(n-2)+6x(n-1)+10,23x-0,02964y(n-4)+0,11856y(n-3)-1,19019y(n-2)+2,14326y(n-1)-1,04199y;
z=conv(x,y)
figure;
plot(t,z);
Как бы коэффициенты я другие расчитаю(что бы фильтр устойчивый был), но нужно, что бы проверка фильтра происходила в такой форме, через свёртку