|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrey Dashkovsky 2:5002/46.4 26 Mar 2002 21:56:15 To : Alexey Skazik Subject : Отношение сигнал-шyм, ? -------------------------------------------------------------------------------- 25 Мар 02 23:51, you wrote to me: AD>> вырезав эту частоту. Если же всётаки хочется вырезать случайную AD>> помеху AD>> - используются более хитрые фильтры, например аддаптивные принцип AD>> которых заключается в: 1. меряем сигнал с шумом. 2. меряем где-то AD>> рядом, где сам сигнал уже не слышим параллельно. 3. через хитрые AD>> диферинциалы разными методами просчитываются и AD>> корректируются коэффициенты фильтра так чтобы сигнал да выходе AD>> максимально соответствовал искомому сигналу без помехи, если AD>> нужно могу поискать формулы. AS> Интересно. Хорошо бы не формулы, а ссылки на литературу. :) AS> Особенно по пункту (3). Очень жаль, но я это брал из лекция, а литературы у меня нету. вот лабы сохранились на matlab'е: function adapt(t,x,tip,alfa,nb,na,yy,s); plot1(t,x,'Сигнал для фильтрации','время','значение сигнала');pause; xx=t; % - простой фильтр, отсеевает высокие частоты или сглаживает % как любой адаптивный фильтр, какое-то время настраивается, потом фильтрует. if tip==1, w=1;% - помеха равна 1 for i=1:max(size(x)), y(i)=w; % запоминается помеха xx(i)=x(i)-w; % вычитается помеха из сигнала w=w+alfa*2*(xx(i)-w); % корректируется константа end % - кажется этот фильтр фильтровал 50Гц, тут немного похитрее. elseif tip==2, aa(1)=0;aa(2)=0;xx(1)=0;y(1)=0; dd=2*pi*50/360; for i=2:max(size(x)), dy=(x(i)-aa(i))-(x(i-1)-aa(i-1)); if dy>0, aa(i)=aa(i)+alfa; elseif dy<0, aa(i)=aa(i)-alfa; end y(i)=x(i)-aa(i); xx(i)=x(i)-y(i); aa(i+1)=2*cos(dd)*aa(i)-aa(i-1); end % - дальше идут КИХ и БИХ адаптивные фильтры, которые кстати не очень фильтровали ввиду того, что они требуют более тщательного подбора коэффициентов elseif tip==3, b=zeros(max(size(x))+1,nb);b(1,1)=1; for i=1:max(size(x)), sb=0; for j=1:nb, if i-j+1>0, sb=sb+yy(i-j+1)*b(i,j); end end y(i)=sb; for j=1:nb, if i-j+1>0, b(i+1,j)=b(i,j)+alfa*2*(x(i)-y(i))*x(i-j+1); else b(i+1,j)=0; end; end; end; plot(b);title('Коеффициенты b');pause; xx=y'-x; elseif tip==4, b=zeros(max(size(x))+1,nb);a=zeros(max(size(x))+1,na); a(1,1)=1;b(1,1)=1; for i=1:max(size(x)), sa=0; for j=2:na, if i-j+1>0, sa=sa+y(i-j+1)*a(i,j); end end sb=0; for j=1:nb, if i-j+1>0, sb=sb+yy(i-j+1)*b(i,j); end end y(i)=(sb-sa)./a(1); for j=1:na, if i-j+1>0, a(i+1,j)=y(i-j+1); else a(i+1,j)=0; end; for l=1:na, if i-l>0, a(i+1,j)=a(i+1,j)+a(i,l)*a(i-l,j); end; end; a(i+1,j)=a(i,j)+alfa*2*(x(i)-y(i))*a(i+1,j); end; for j=1:nb, if i-j+1>0, b(i+1,j)=x(i-j+1); else b(i+1,j)=0; end; for l=1:na, if i-l>0, b(i+1,j)=b(i+1,j)+a(i,l)*b(i-l,j); end; end; b(i+1,j)=b(i,j)+alfa*2*(x(i)-y(i))*b(i+1,j); end; end; y=y'; xx=x-y; plot(b);title('b');pause; plot(a);title('a');pause; end; plot(t,xx);title('шум');grid;pause; %.*max(abs(y))./max(abs(x)) plot9(t,y,t,x,s,'время','значение');pause; end; Сами формулы тоже где-то в лекциях должны быть. Andrey ... Любишь кататься - люби и с санками еб@ться. --- GoldED+/386 1.1.4.7 * Origin: Всёфигня кроме пчёл,хотя пчёлы,еслиподумать,тоже фигня (2:5002/46.4) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/143013ca0e07d.html, оценка из 5, голосов 10
|