![]() |
基于MP的信号降噪程序,高人帮忙看一下
信号:
A=2; f_signal=20; fs=1000; N=64; snr=10; t=(0:N-1)/fs; x=A*cos(2*pi*f_signal*t); signal=awgn(x,snr,'measured'); 主程序: tic xinhao1; %%%%%%%%%%%%%%%%%%%%%%%分解参数的设定%%%%%%%%%%%%%%%%%%%%%%%%%%%%% interative_number=30; [a,N]=size(signal); signal_reconstruct=zeros(1,N); signal_r=signal; a_base=1/2; j_min=0; j_max=log2(N); u_base=1/2; p_min=0; v_base=pi; k_min=0; w_base=pi/6; i_min=0; i_max=12; M=52*(N*log2(N)+N-1); %%%%%%%%%%%%%分解的程序%%%%%%%% for n=1:interative_number [proj,scale,translation,freq,phase]=select_best_gabor(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max);%用一个子程序来实现最佳原子参数的选取 t=0:N-1; t=(t-translation)/scale; g=(1/sqrt(scale))*exp(-pi*t.*t).*cos(freq*t+phase);%原子 g=g/sqrt(sum(g.*g));%归一化最佳原子 signal_reconstruct=signal_reconstruct+proj*g;%重建信号 signal_r=signal_r-proj*g;%残余信号 figure(1) subplot(5,1,1);plot(x); subplot(5,1,2);plot(signal); subplot(5,1,3);plot(g); subplot(5,1,4);plot(signal_reconstruct); subplot(5,1,5);plot(signal_r); %output('Press a key') %pause end mse=sqrt(sum((signal-signal_reconstruct).^2)/N) toc 子函数: function [proj,scale,translation,freq,phase]=select_best_gabor(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max); proj_trans=0; proj=0; size_dic=0; for j=j_min:j_max for p=p_min:N*2^(-j+1) for k=k_min:2^(j+1) for i=i_min:i_max size_dic=size_dic+1; s=a_base^j; u=p*s*u_base; v=k*(1/s)*v_base; w=i*u_base; t=0:N-1; t=(t-u)/s; g=(1/sqrt(s))*exp(-pi*t.*t).*cos(v*t+w); g=g/sqrt(sum(g.*g)); proj_trans=sum(signal_r.*g);%做内积 if abs(proj_trans)>abs(proj) %选取内积的模最大的原子的参数做为最佳原子的参数 proj=proj_trans; scale=s; translation=u; freq=v; phase=w; end end end end end 程序能够运行,但就是结果并没有达到降噪的结果,不知道问题出在哪 里,请大家帮忙看一下,很重要的程序,帮帮忙了 |
所有时间均为北京时间。现在的时间是 11:08。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.