基于matlab的低通、高通、带通滤波算法

实测信号通常会受到各种各样的噪音干扰,如何准确识别噪音并剔除原信号中的噪音是一门学问。这里我举了3个例子,分别表示低通、高通、带通滤波,其中低通表示噪音为高频,需要让信号中的低频通过;高通表示噪音为低频,需要让信号中的高频通过;带通滤波表示噪音在中间频率。我基于matlab编写了这3个案例,数据是我随机生成的,比较通俗易懂,可以基于这个扩展应用到实际数据。

下面简单介绍一下这3个案例。

工况1:低通滤波

f1=10000;
f2=18000;
signal1=10*sin(2*pi*f1*t);
signal2=4*sin(2*pi*f2*t);
y=signal1+signal2;

        假设信号包含两个频段,一个是10kHz,一个是18kHz。其中18kHz是高频噪音,我想要剔除,但实际信号y里面混杂了这两个频段。那么就可以用低通滤波把这个高频噪音剔除,效果如下。图中可以看到,被污染的信号包含两个频段,所以信号比较复杂。通过滤波之后的信号,和10kHz的立项信号比较吻合,只是存在一个相位差而已,这对于信号处理问题不大。所以,这样的低通滤波效果还是不错的。

基于matlab的低通、高通、带通滤波算法_第1张图片

工况2:高通滤波

f1=10000;
f2=18000;
signal1=10*sin(2*pi*f1*t);
signal2=4*sin(2*pi*f2*t);
y=signal1+signal2;

        和工况1一样,只不过我反过来假设。假设信号包含两个频段,一个是10kHz,一个是18kHz。其中10kHz是低频噪音,我想要剔除,但实际信号y里面混杂了这两个频段。那么就可以用高通滤波把这个低频噪音剔除,效果如下。图中可以看到,被污染的信号包含两个频段,所以信号比较复杂。通过滤波之后的信号,和18kHz的立项信号比较吻合。所以,这样的高通滤波效果也不错。

基于matlab的低通、高通、带通滤波算法_第2张图片

 

工况3:带通滤波

f1=10;f2=18;f3=30;
signal1=10*sin(2*pi*f1*t); 
signal2=2*sin(2*pi*f2*t);
signal3=4*sin(2*pi*f3*t);
y=signal1+signal2+signal3; % 受污染信号
y_ideal=signal1+signal3;

        这个和前面两个情况相比相对复杂点,这里实测信号有3个频率,10Hz、18Hz、30Hz,我假定噪音是18Hz的信号,需要剔除中间频率的噪音,这就是带通滤波。用程序剔除的效果如下图。整体来说也很不错,基本达到了要求,滤波后信号与理想信号一致了。这里顺便说一下,如果噪音是既有低频又有高频,那可以先用低频滤波,然后再用高频滤波。

基于matlab的低通、高通、带通滤波算法_第3张图片

        本文程序的全文链接请点击:基于matlab的低通、高通、带通滤波算法(非免费)。欢迎交流!

你可能感兴趣的:(信号处理,Matlab,信号滤波,matlab)