精华内容
下载资源
问答
  • 信号去噪滤波器-Matlab 什么是过滤器? 我们致力于信号处理,因此在信号处理中,滤波器是一种消除信号中不必要成分或特征的机制。 滤波是信号处理的一类,滤波器的概念是对信号中任何分量的全部或部分抑制。 几乎...
  • 讨论了自适应滤波去噪原理,采用LMS算法设计了自适应去噪滤波器,分析了MATLAB/SIMULINK中DSP Builder 模块库在 F P G A中的设计优点,最后应用 D S P B u i l d e r 模块库对自适应滤波器进行仿真。为自适应滤波器...
  • 对信号进行去渲染、水平倾斜校正和低通滤波(巴特沃斯滤波器,4阶;截止频率10Hz) Butterworth filter 定义:巴特沃斯滤波器是电子滤波器的一种。巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。这种滤波器...

    对信号进行去渲染、水平倾斜校正和低通滤波(巴特沃斯滤波器,4阶;截止频率10Hz)

    Butterworth filter

    定义:巴特沃斯滤波器是电子滤波器的一种。巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。这种滤波器最先由英国工程师斯替芬·巴特沃斯(StephenButterworth)在1930年发表在英国《无线电工程》期刊的一篇论文中提出的。巴特沃斯滤波器的振幅对角频率单调下降,并且也是唯一的无论阶数,振幅对角频率曲线都保持同样的形状的滤波器。巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。二阶巴特沃斯滤波器的衰减率为每倍频12分贝、三阶巴特沃斯滤波器的衰减率为每倍频18分贝、如此类推。

    巴特沃斯滤波器特性

    巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。

    一阶巴特沃斯滤波器的衰减率为每倍频6分贝,每十倍频20分贝。二阶巴特沃斯滤波器的衰减率为每倍频12分贝、三阶巴特沃斯滤波器的衰减率为每倍频18分贝、如此类推。巴特沃斯滤波器的振幅对角频。单调下降,并且也是唯一的无论阶数,振幅对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带振幅衰减速度越快。其他滤波器高阶的振幅对角频率图和低级数的振幅对角频率有不同的形状。

    巴特沃斯滤波器原理

    巴特沃斯型滤波器在现代设计方法设计的滤波器中,是最为有名的滤波器,由于它设计简单,性能方面又没有明显的缺点,又因它对构成滤波器的元件Q值较低,因而易于制作且达到设计性能,因而得到了广泛应用。其中,巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。

    滤波器的截止频率的变换是通过先求出待设计滤波器的截止频率与基准滤波器的截止频率的比值M,再用这个M去除滤波器中的所有元件值来实现的,其计算公式如下:M=待设计滤波器的截止频率/基准滤波器的截止频率。

    滤波器的特征阻抗的变换是通过先求出待设计滤波器的特征阻抗与基准滤波器的特征阻抗的比值K,再用这个K去乘基准滤波器中的所有电感元件值和用这个K去除基准滤波器中的所有电容元件值来实现的。

    巴特沃斯滤波器与其它滤波器比较

    下图是巴特沃斯滤波器(左上)和同阶第一类切比雪夫滤波器(右上)、第二类切比雪夫滤波器(左下)、椭圆函数滤波器(右下)的频率响应图。

    巴特沃斯滤波器优点

    巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。在振幅的对数对角频率的波得图上,从某一边界角频率开始,振幅随着角频率的增加而逐渐减少,趋向负无穷大。

    一阶巴特沃斯滤波器的衰减率为每倍频6分贝,每十倍频20分贝。二阶巴特沃斯滤波器的衰减率为每倍频12分贝,三阶巴特沃斯滤波器的衰减率为每倍频18分贝,如此类推。巴特沃斯滤波器的振幅对角频率单调下降,并且也是唯一的无论阶数、振幅对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带振幅衰减速度越快。其他滤波器高阶的振幅对角频率图和低级数的振幅对角频率有不同的形状。

    巴特沃斯滤波器是滤波器的一种设计分类,类同于切比雪夫滤波器,它有高通,低通,带通,高通,带阻等多种滤波器。它在通频带内外都有平稳的幅频特性,但有较长的过渡带,在过渡带上很容易造成失真,我在调用MATLAB里的巴特沃斯滤波器做仿真时,信号总会在第一个周期略微有些失真,但往后的幅频特性就非常的好。

    巴特沃斯滤波器主要参数介绍

    (1)[N,wc]=buttord(wp,ws,RP,As,’s’)

      该格式用于计算巴特沃斯模拟滤波器的阶数N和3db截止频率wc。Wp、ws和wc是实际模拟角频率(rad\s)。Rp和As为通带最大衰减和最小衰减。

    (2)[Z,P,k]=buttap(N)

      该格式用于计算N阶巴特沃斯归一化模拟低通原型滤波器系统函数的零、极点和增益因子,返回长度为N的列向量Z和P,分别给出N个零点和极点的位置,K表示滤波器增益。

      (3)Y=filter(b,a,x)

      式中b表示系统传递函数的分子多项式的系数矩阵;a表示系统传递函数的分母多项式的系数矩阵;x表示输入序列;filter表示输出序列。IIR函数实现的直接形式。

    (4)[b,a]=butter(N,wc,‘ftype’)

      计算N阶巴特沃斯数字滤波器系统函数分子、分母多项式的系数向量b、a。

      说明:调用参数N和wc分别为巴特沃斯数字滤波器的阶数和3dB截止频率的归一化值,一般是调用buttord格式(1)计算N和wc。系数b、a是按照z-1的升幂排列。

      (5)[B,A]=butter(N,Ωc,‘ftype’,‘s’)

      计算巴特沃斯模拟滤波器系统函数的分子、分母多项式系数向量。

      说明:调用参数N和Ωc分别为巴特沃斯模拟滤波器的阶数和3dB截止频率(实际角频率),可调用buttord(2)格式计算N和Ωc。系数B、A按s的正降幂排列。

      tfype为滤波器的类型:

      ◇ftype=high时,高通;Ωc只有1个值。

      ◇ftype=stop时,带阻;Ωc=[Ωcl,Ωcu],分别为带阻滤波器的通带3dB下截止频率和上截止频率。

      ◇ftype缺省时:若Ωc只有1个值,则默认为低通;若Ωc有2个值,则默认为带通;其通带频率区间Ωcl《Ω《Ωcu。

      (6)[H,w]=freqz(b,a,N)

      b和a分别为离散系统的系统函数分子、分母多项式的系数向量,返回量H则包含了离散系统频响在0~pi范围内N个频率等分点的值(其中N为正整数),w则包含了范围内N个频率等分点。调用默认的N时,其值是512。可以先调用freqz()函数计算系统的频率响应,然后利用abs()和angle()函数及plot()函数,绘制出系统的频响曲线。

      (7)lp2lp函数

      [bt,at]=lp2lp(b,a,w0)

      该函数用于实现由低通模拟原型滤波器至低通滤波器的频率变换,可以用传递函数和状态空间进行转换,但无论哪种形式,其输入必须是模拟滤波器原型。

      (8)[bz,az]=impinvar(b,a,fs)

      把具有[b,a]模拟滤波器传递函数模型转换为采样频率为fs的数字滤波器的传递函数模型[bz,az],如果在函数中没有确定频率fs时,函数默认为1Hz.

      低通巴特沃斯数字滤波器的实例

      一、Matlab计算滤波器系数

      Matlab计算巴特沃斯低通滤波器系数过程如下:

      ①根据给定的通带截止频率、通带截止增益、阻带截止频率、阻带截止增益,利用buttord函数计算巴特沃斯滤波器所需的最小阶数和截止频率。(由于要求中已给出截止频率,故这步省去)

      (图是网上扒拉的,指标与本设计不符)

      ②根据上述计算得到的阶数,利用buttap函数计算出巴特沃斯滤波器原型。

      ③利用lp2lp函数,将原型滤波器转换成目标截止频率的滤波器。

      ④利用脉冲响应不变法(impinvar函数)或是双线性变换法(bilinear函数)将模拟滤波器转换为数字滤波器。数字滤波器形式为z域有理函数,分子分母系数即为滤波器系数。

      我这里选用的是脉冲响应不变法,因为计算得到的滤波器比较简单,运算速度比较快。

      (从左到右:滤波器原型、模拟滤波器、数字滤波器)

      设计过程matlab源码如下:

      Fs=15;%采样频率

      Nn=12800;

      N=2;%阶数

      Wc=1*2*pi;%截止频率

      [z,p,k]=buttap(N);%计算巴特沃斯滤波器原型

      [Bap,Aap]=zp2tf(z,p,k);%转换成多项式模式

      [b,a]=lp2lp(Bap,Aap,Wc);%根据截止频率计算模拟巴特沃斯滤波器系数

      [bz,az]=impinvar(b,a,Fs);%用脉冲响应不变法离散化

      figure(1)

      [H,W]=freqz(bz,az,Nn,Fs);%绘制频率特性曲线

      subplot(2,1,1)

      plot(W,20*log10(abs(H)));

      gridon;

      subplot(2,1,2)

      plot(W,180/pi*unwrap(angle(H)));

      gridon;

      二、Matlab计算验证

      先在Matlab中验证滤波函数。先编写带噪声的输入函数,然后经过滤波器函数后,观察滤波效果。其中滤波器函数写法为:

      Filter函数为Matlab自带函数,其算法为:

      其中,a即为z域传递函数的分母系数,b为分子系数。例如本应用中:

      则算法为az(1)*y(k)=bz(1)*x(k)+bz(2)*x(k-1)–az(2)*y(k-1)–az(3)*y(k-2)

      Matlab中得到的结果如下(信号频率0.1Hz,噪声频率6Hz):

      三、C语言函数编写与验证

      将上述算法翻译成C语言,写入单片机中。利用信号源输出各种波形,单片机AD采样进去之后,对采样点进行滤波处理,将原始数据和滤波后的数据发送到上位机进行绘图,得到图像对比如下:

      C函数源码如下:

      constfloatbz[2]={0,0.128580115806658};//分子

      constfloataz[3]={1,-1.42252474659021,0.553007125840971};//分母

      floatData_Output[DATA_LENTH];//输出数据

      float*but_filter(unsignedintlen,float*x)//len为输入数据数组长度,x为输入数据数组指针

      {

      unsignedinti=2;

      staticfloatinit[2]={0,0};//初值,一开始设为0

      if(len《2)//如果长度小于2,直接返回

      returnData_Output;

      Data_Output[0]=init[0];//赋初值

      Data_Output[1]=init[1];

      for(i=2;i《len;i++)

      {

      Data_Output[i]=bz[0]*x[i]+bz[1]*x[i-1]-az[1]*Data_Output[i-1]-az[2]*Data_Output[i-2];

      /*算法为a1*y(k)=b1*x(k)+b2*x(k-1)-a(2)*y(k-1)-a(3)*y(k-2)*/

      /*由于a1=1,故不做除法*/

      }

      init[0]=Data_Output[len-2];//考虑到会被连续调用,此次的终值作为下次的初值

      init[1]=Data_Output[len-1];

      returnData_Output;

      }

    展开全文
  • 现在在上数字图像处理的课程,最近的一次作业要求不用OpenCV自带的滤波器函数来实现几种滤波器,以实现对加入椒盐噪声的图像的图像恢复。也是对markdown编辑器的一次练习。椒盐噪声椒盐噪声是一种很简单的噪声,即...

    现在在上数字图像处理的课程,最近的一次作业要求不用OpenCV自带的滤波器函数来实现几种滤波器,以实现对加入椒盐噪声的图像的去噪。也是对markdown编辑器的一次练习。

    椒盐噪声

    椒盐噪声是一种很简单的噪声,即随机将图像中一定数量的像素点设置为0(黑)或255(白)。由于看起来好像在图像上撒了椒盐一样,故被称为椒盐噪声。
    下面是椒盐噪声的处理代码(假定输入图像为3通道)

    void salt(Mat &image, float salt_ratio){
        int n=image.rows*image.cols*salt_ratio;
        for (int k = 0; k < n; k++)
        {
            int i = rand() % image.cols;  //cols 和 rows 给出图像的宽与高
            int j = rand() % image.rows;
            int type= rand() %2;
            if (type==1){
                image.at<Vec3b>(j, i)[0] = 255;
                image.at<Vec3b>(j, i)[1] = 255;
                image.at<Vec3b>(j, i)[2] = 255;
            }
            else{
                image.at<Vec3b>(j, i)[0] = 0;
                image.at<Vec3b>(j, i)[1] = 0;
                image.at<Vec3b>(j, i)[2] = 0;
            }
        }
    }  

    以经典的lena图为例,加入10%的椒盐噪声后:



    滤波器原理

    首先介绍一些通用的设定:令Sxy表示中心在(x,y)的点,尺寸为m×n的矩形子图像窗口的坐标集。m×n为滤波器模板的大小。f^(x,y)为滤波器得到的结果,赋值给(x,y)处的像素。g(s,t)(s,t)位置的像素值。

    算术均值滤波器

    f^(x,y)=1mn(s,t)Sxyg(s,t)

    几何均值滤波器

    f^(x,y)=(s,t)Sxyg(s,t)1mn

    谐波滤波器

    f^(x,y)=mn(s,t)Sxy1g(s,t)

    中值滤波器

    用相邻区域像素灰度的中值代替该点的像素值

    f^(x,y)=median(s,t)Sxy(g(s,t))

    编程实现

           根据以上公式,实现了四种模板大小可变的滤波器。
         主要编程思想为:构建一个ImageRecovery类,其中filter函数为公用的滤波器接口,在filter函数中对result(Mat格式3通道图片)进行遍历,然后根据选择的滤波器类型调用不同的滤波器模板,进行滤波运算。滤波器模板函数则作为类的private函数。
          此外,在谐波滤波和几何滤波中,若模板中有一个像素的取值为0,则不将这个点引入计算。若引入计算则会导致错误或是0像素点相邻的一片区域完全变黑。相当于增加了图像的噪声。代码如下:

    #include "stdafx.h"
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/opencv.hpp>
    
    using namespace cv;
    using namespace std;
    
    class ImageRecovery{
    private:
        double filter_aver(Mat src)
        {
            //算术均值滤波
            double sum=0;
            for (int i =0;i < src.rows;i++ ){
                uchar* data=src.ptr<uchar>(i);
                for (int j =0;j <src.cols;j++){
                    sum+=double(data[j]);
                }
            }
            return sum/double(src.cols* src.rows);
        }
        double filter_geo(Mat src)
        {
            //几何均值滤波
            double geo=1;
            for (int i =0;i < src.rows;i++ ){
                uchar* data=src.ptr<uchar>(i);
                for (int j =0;j <src.cols;j++){
                    if (data[j]!=0) geo*=data[j];
                }
            }
            double power=1.0/double(src.cols*src.rows);
            return pow(geo,power);
        }
        double filter_har(Mat src)
        {
            //谐波滤波
            double har=0;
            for (int i =0;i < src.rows;i++ ){
                uchar* data=src.ptr<uchar>(i);
                for (int j =0;j <src.cols;j++){
                    if (data[j]!=0) har+=1/(double)(data[j]);
                }
            }
            return (src.cols*src.rows)/har;
        }
        void BubbleSort(float* pData, int count)  
        {  
            //冒泡排序,用于中值滤波
            float tData;
            for (int i = 1; i < count; i++){  
                for (int j = count - 1; j >= i; j--){  
                    if (pData[j] < pData[j - 1]){  
                        tData = pData[j - 1];  
                        pData[j - 1] = pData[j];  
                        pData[j] = tData;  
                    }  
                }  
            }  
        }  
        double filter_median(Mat src)
        {
            //中值滤波
            int index=0;
            int bubble_len=(src.cols)*(src.rows);
            float* bubble=new float[bubble_len];
            for (int i =0;i < src.rows;i++ ){
                uchar* data=src.ptr<uchar>(i);
                for (int j =0;j <src.cols;j++){
                    bubble[index] = data[j];
                    index ++;
                }
            }
            BubbleSort(bubble,bubble_len);
            double median=bubble[bubble_len/2];
            return median;
        }
    public:
        void salt(Mat &image, float salt_ratio )
        {
            //salt_ratio为加入椒盐噪声的比例
            int n=image.rows*image.cols*salt_ratio;
            for (int k = 0; k < n; k++)
            {
                int i = rand() % image.cols;  
                int j = rand() % image.rows;
                int type= rand() %2;
                if (type==1){
                    image.at<Vec3b>(j, i)[0] = 255;
                    image.at<Vec3b>(j, i)[1] = 255;
                    image.at<Vec3b>(j, i)[2] = 255;
                }
                else{
                    image.at<Vec3b>(j, i)[0] = 0;
                    image.at<Vec3b>(j, i)[1] = 0;
                    image.at<Vec3b>(j, i)[2] = 0;
                }
            }
        }
        Mat filter(Mat image,string filter_type,Size size)
        {
            //image为输入待滤波图像,filter_tpye为滤波器类型,size为滤波器的尺寸
            Mat result;
            image.copyTo(result);
            Mat channel[3];
            split(image,channel);
            int l =(size.height-1)/2;
            int w =(size.width-1)/2;    
            for (int i = l;i < result.rows-l;i ++){
                for (int j =w;j < result.cols-w;j ++){
                    for (int ii =0;ii < 3;ii++){
                        if (filter_type=="aver")    result.at<Vec3b>(i,j)[ii]=saturate_cast<uchar>(filter_aver(channel[ii](Rect(j-w,i-l,size.width,size.height))));
                        if (filter_type=="geo" )    result.at<Vec3b>(i,j)[ii]=saturate_cast<uchar>(filter_geo(channel[ii](Rect(j-w,i-l,size.width,size.height))));
                        if (filter_type=="har" )    result.at<Vec3b>(i,j)[ii]=saturate_cast<uchar>(filter_har(channel[ii](Rect(j-w,i-l,size.width,size.height))));
                        if (filter_type=="median" ) result.at<Vec3b>(i,j)[ii]=saturate_cast<uchar>(filter_median(channel[ii](Rect(j-w,i-l,size.width,size.height))));
                    }
                }
            }
            return result;
        }
    };
    
    
    
    int main()
    {
        Mat img=imread("lena.jpg");
        //初始化IR类
        ImageRecovery IR;
        //加入椒盐噪声
        IR.salt(img,0.1);
        imshow("salt",img);
        //对噪声图片进行滤波
        Mat result=IR.filter(img,"geo",Size(3,3));
        imshow("result",result);
        waitKey();
        return 0;
    }

    效果如图所示



    算术均值滤波(左:3*3;右:5*5)



    几何均值滤波(左:3*3;右:5*5)



    谐波滤波(左:3*3;右:5*5)



    中值滤波(左:3*3;右:5*5)

            总的来看,基于个人主观的判断,我认为对于椒盐噪声图片的恢复,中值滤波的效果最好,谐波滤波的效果次之,均值滤波的效果再次,几何滤波的效果最差。
            而对于滤波器的不同模板大小,从结果上可以看出选择更大的模板可以使得结果图像中的噪声更加平滑,但同时图像也变得模糊了。这是由于更大的滤波器模板使得图像整体变得平滑了。

            这次也是我第一次使用markdown写博客,线下使用wiznote的markdown模式进行编辑,图片则存储在七牛云上。这样在线下写完的博客可以直接复制到csdn上,省去了我之前每次上传博客还要改格式以及传图片的烦恼。此外,用markdown写感觉格式上也好看了很多,特别是公式方面。

    展开全文
  • 去噪: 通过线性滤波器和非线性滤波器的模糊处理可以减小噪声; 一、平滑空间滤波器 1. 线性空间滤波器 均值滤波器:减小了图像灰度的尖锐变化,存在着不希望出现的边缘模糊的负面效应; 高斯低通滤波器; 拉普

    注:下述为在空间域进行噪声处理的一些滤波器作用简单总结,来源于冈萨雷斯的《数字图像处理》,如果错误请指出,谢谢!


    去噪: 通过线性滤波器和非线性滤波器的模糊处理可以减小噪声;

    一、平滑空间滤波器

    1. 线性空间滤波器

    • 均值滤波器:减小了图像灰度的尖锐变化,存在着不希望出现的边缘模糊的负面效应;
    • 高斯低通滤波器
    • 拉普拉斯滤波器:增强图像,可以起到边缘锐化的作用,使图像更清晰;

    2.非线性空间滤波器(统计排序滤波器)

    • 中值滤波器: 使用非常普遍,对于一定的随机噪声,它提供了优秀的去噪能力,比小尺寸的线性平滑滤波器的模糊程度明显要低。中值滤波器对于处理脉冲噪声,也称为椒盐噪声非常有效,因为这种噪声是以黑白点叠加在图像上的;
    • 最大值滤波器
    • 最小值滤波器

    二、锐化空间滤波器

    锐化处理的主要目的是突出图像中的细节或者增强被模糊了的细节,用空间微分来完成。

    1. 基于二阶微分的图像增强-拉普拉斯算子:属于线性空间滤波器的一种,可用拉普拉斯算子进行图像锐化;
    2. 推演:高提升滤波
    3. 基于一阶微分的图像增强-梯度法:主要用于边缘检测,Sobel算子;

    拉普拉斯和梯度法的区别:

    • 拉普拉斯变换可以突出图像中的小细节,梯度法可以突出边缘。
    • 拉普拉斯变换作为一种二阶微分算子在图像细节增强处理方面有明显的优点,但拉普拉斯变换与梯度变换相比会产生更多的噪声。
    • 梯度变换在灰度变化的区域(灰度斜坡或者阶梯)的响应要比拉普拉斯变换更为强烈,而梯度变换对噪声和小细节的响应要比拉普拉斯变换弱。
    • sobel图像的边缘要比拉普拉斯图像的边缘突出许多。

    三、混合空间增强法

    为了达到一个满意的结果,对给定的图像增强目标需要应用多种互补的图像增强技术。

    四、噪声存在下唯一的空间滤波复原

    1.均值滤波器

    1. 算数均值滤波器:均值简单的平滑了一幅图像的局部变化,在模糊了结果的同时减少了噪声;
    2. 几何均值滤波器:几何均值滤波器所达到的平滑度可以和算数均值滤波器相比,但在滤波过程中会丢失更少的细节;
    3. 谐波均值滤波器:对于“盐”噪声效果更好,但是不适用于“胡椒”噪声,善用于处理高斯噪声那样的噪声;
    4. 逆谐波均值滤波器:适合减少或者消除椒盐噪声的影响,Q为正数时,消除胡椒噪声,Q为负数时,消除盐噪声。但是不能同时消除这两种噪声。

    总的来说,算数均值滤波器和几何均值滤波器(尤其是后者)更适用于处理高斯或者均匀等随机噪声。谐波均值滤波器更适用于处理脉冲噪声,但是它有个缺点是必须知道噪声是暗噪声还是亮噪声,以便于选择合适的Q符号,如果Q符号选错了则会有灾难性后果。

    2. 顺序统计滤波器

    1. 中值滤波器:对于很多种随机噪声,它都有良好的去噪能力,且在相同尺寸下比起线性平滑滤波器引起的模糊较少。对于单级或者双极脉冲噪声非常有效,它是目前为止图像处理中最常用的一种顺序统计滤波器,重复的使用中值滤波器可能会使得图像模糊化,所以应该尽可能保持所希望的处理次数;
    2. 最大值和最小值滤波器: 中点滤波器:对于高斯和均匀随机分布这类噪声有最好的效果;
    3. 修正后的阿尔法均值滤波器:在包括多种噪声的情况下非常适用,例如高斯噪声和椒盐噪声混合的情况下;
    4. 自适应滤波器:优于迄今为止讨论过的所有滤波器的性能,但是代价是滤波器的复杂度,例如,自适应中值滤波器;
    展开全文
  • MATLAB实现ECG信号噪声去噪-滤波器

    千次阅读 2020-01-25 19:08:29
    %------------------------------低通滤波器滤除肌电信号------------------------------ %-----------------带陷滤波器抑制工频干扰------------------- %50Hz陷波器:由一个低通滤波器加上一个高通滤波器组成 %而...

    %------------------------------低通滤波器滤除肌电信号------------------------------
    %-----------------带陷滤波器抑制工频干扰-------------------
    %50Hz陷波器:由一个低通滤波器加上一个高通滤波器组成
    %而高通滤波器由一个全通滤波器减去一个低通滤波器构成
    %------------------IIR零相移数字滤波器纠正基线漂移-------------------

    clc;
    data = load(‘lv fei hua 0100120191218.txt’);
    %[TIME,M,Fs,siginfo]=data;
    %------------------------------低通滤波器滤除肌电信号------------------------------
    Fs=512; %采样频率
    fp=80;fs=100; %通带截止频率,阻带截止频率
    rp=1.4;rs=1.6; %通带、阻带衰减
    wp=2pifp;ws=2pifs;
    [n,wn]=buttord(wp,ws,rp,rs,‘s’); %'s’是确定巴特沃斯模拟滤波器阶次和3dB
    %截止模拟频率
    [z,P,k]=buttap(n); %设计归一化巴特沃斯模拟低通滤波器,z为极点,p为零点和k为增益
    [bp,ap]=zp2tf(z,P,k) %转换为Ha§,bp为分子系数,ap为分母系数
    [bs,as]=lp2lp(bp,ap,wp) %Ha§转换为低通Ha(s)并去归一化,bs为分子系数,as为分母系数

    [hs,ws]=freqs(bs,as); %模拟滤波器的幅频响应
    [bz,az]=bilinear(bs,as,Fs); %对模拟滤波器双线性变换
    [h1,w1]=freqz(bz,az); %数字滤波器的幅频响应
    m=filter(bz,az,data(:,1));

    figure
    freqz(bz,az);title(‘巴特沃斯低通滤波器幅频曲线’);

    figure
    subplot(2,1,1);
    %TIME = range(length(data));
    TIME=1:length(data(:,1));
    plot(TIME,data(:,1));
    xlabel(‘t(s)’);ylabel(‘mv’);title(‘原始心电信号波形’);grid;

    subplot(2,1,2);
    plot(TIME,m);
    xlabel(‘t(s)’);ylabel(‘mv’);title(‘低通滤波后的时域图形’);grid;

    N=512;
    n=0:N-1;
    mf=fft(data(:,1),N); %进行频谱变换(傅里叶变换)
    mag=abs(mf);
    f=(0:length(mf)-1)*Fs/length(mf); %进行频率变换

    figure
    subplot(2,1,1)
    plot(f,mag);axis([0,1500,1,50]);grid; %画出频谱图
    xlabel(‘频率(HZ)’);ylabel(‘幅值’);title(‘心电信号频谱图’);

    mfa=fft(m,N); %进行频谱变换(傅里叶变换)
    maga=abs(mfa);
    fa=(0:length(mfa)-1)*Fs/length(mfa); %进行频率变换
    subplot(2,1,2)
    plot(fa,maga);axis([0,1500,1,50]);grid; %画出频谱图
    xlabel(‘频率(HZ)’);ylabel(‘幅值’);title(‘低通滤波后心电信号频谱图’);

    wn=data(:,1);
    P=10*log10(abs(fft(wn).^2)/N);
    f=(0:length§-1)/length§;
    figure
    plot(f,P);grid
    xlabel(‘归一化频率’);ylabel(‘功率(dB)’);title(‘心电信号的功率谱’);

    %-----------------带陷滤波器抑制工频干扰-------------------
    %50Hz陷波器:由一个低通滤波器加上一个高通滤波器组成
    %而高通滤波器由一个全通滤波器减去一个低通滤波器构成
    Me=100; %滤波器阶数
    L=100; %窗口长度
    beta=100; %衰减系数
    Fs=1500;
    wc1=49/Fspi; %wc1为高通滤波器截止频率,对应51Hz
    wc2=51/Fs
    pi ;%wc2为低通滤波器截止频率,对应49Hz
    h=ideal_lp(0.132*pi,Me)-ideal_lp(wc1,Me)+ideal_lp(wc2,Me); %h为陷波器冲击响应
    w=kaiser(L,beta);
    y=h.*rot90(w); %y为50Hz陷波器冲击响应序列
    m2=filter(y,1,m);

    figure
    subplot(2,1,1);plot(abs(h));axis([0 100 0 0.2]);
    xlabel(‘频率(Hz)’);ylabel(‘幅度(mv)’);title(‘陷波器幅度谱’);grid;
    N=512;
    P=10*log10(abs(fft(y).^2)/N);
    f=(0:length§-1);
    subplot(2,1,2);plot(f,P);
    xlabel(‘频率(Hz)’);ylabel(‘功率(dB)’);title(‘陷波器功率谱’);grid;

    figure
    subplot (2,1,1); plot(TIME,m);
    xlabel(‘t(s)’);ylabel(‘幅值’);title(‘原始信号’);grid;
    subplot(2,1,2);plot(TIME,m2);
    xlabel(‘t(s)’);ylabel(‘幅值’);title(‘带阻滤波后信号’);grid;

    figure
    N=512
    subplot(2,1,1);plot(abs(fft(m))*2/N);axis([0 100 0 1]);
    xlabel(‘t(s)’);ylabel(‘幅值’);title(‘原始信号频谱’);grid;
    subplot(2,1,2);plot(abs(fft(m2))*2/N);axis([0 100 0 1]);
    xlabel(‘t(s)’);ylabel(‘幅值’);title(‘带阻滤波后信号频谱’);grid;

    %其中,ideal_lp()函数在另一个M文件中,具体如下:
    %理想低通滤波器
    %截止角频率wc,阶数Me

    %------------------IIR零相移数字滤波器纠正基线漂移-------------------
    Wp=1.42/Fs; %通带截止频率
    Ws=0.6
    2/Fs; %阻带截止频率
    devel=0.005; %通带纹波
    Rp=20*log10((1+devel)/(1-devel)); %通带纹波系数
    Rs=20; %阻带衰减
    [N Wn]=ellipord(Wp,Ws,Rp,Rs,‘s’); %求椭圆滤波器的阶次
    [b a]=ellip(N,Rp,Rs,Wn,‘high’); %求椭圆滤波器的系数
    [hw,w]=freqz(b,a,512);
    result =filter(b,a,m2);

    figure
    freqz(b,a);
    figure
    subplot(211); plot(TIME,m2);
    xlabel(‘t(s)’);ylabel(‘幅值’);title(‘原始信号’);grid
    subplot(212); plot(TIME,result);
    xlabel(‘t(s)’);ylabel(‘幅值’);title(‘线性滤波后信号’);grid

    figure
    N=512;
    subplot(2,1,1);plot(abs(fft(m2))*2/N);
    xlabel(‘频率(Hz)’);ylabel(‘幅值’);title(‘原始信号频谱’);grid;
    subplot(2,1,2);plot(abs(fft(result))*2/N);
    xlabel(‘频率(Hz)’);ylabel(‘幅值’);title(‘线性滤波后’);grid;
    subplot(2,1,2);plot(abs(fft(result))*2/N);
    xlabel(‘线性滤波后信号频谱’);ylabel(‘幅值’);grid;

    展开全文
  • 基于LMS算法的2FSK信号去噪自适应滤波器的设计,刘雄飞,高金定,利用MATLAB的rand随机函数产生了载波频率为1200bit/s和2200bit/s的正弦波伪随机二进制频移键控(2FSK)信号,在MATLAB上设计并仿真了基于LMS算�
  • 记录自己用python加opencv实现的图像处理的入门操作,各种平滑去噪滤波器的实现。 包括有:产生的椒盐噪声、高斯噪声等等,以及使用的中值滤波、平均滤波、高斯滤波等等。 分成了两部分来实现:一是自编写函数来实现...
  • title(巴特沃斯低通滤波器"); xlabel(频率(HZ) );ylabel(耗损 (dB) );grid on; yd=filter(Bz,Az,y_ z); ydd=fft(yd,n); f=fs*(0:n/2-1)/n; figure(4); subplot(2,1,1 );plot(yd); title("滤波后信号时域波形); ...
  • 这是Xu在美国读博期间发表的论文中使用的斑点去噪滤波器的MATLAB文件
  • 对信号滤波处理前后进行分析比较分析信号的变化通过对对所设计滤波器的 仿真和频率特性分析由仿真结果可以看出所设计的滤波器能够实现对语音信 号的语音有效去噪并对滤波前后的语音信号进行对比
  • matlab开发-图像去噪噪声噪声滤波器及其方法噪声阈值保持。基于gbfmt的matlab图像去噪代码
  • 建立了自适应噪声抵消系统,利用MATILAB软件对食堂、体育馆两处的录音信号进行计算机语音去噪仿真分析。实验结果表明,两种自适应方法均能有效抑制各种噪声污染,提高语音信噪比为60%~85%,而且对引入的语音信号失真...
  • 通过仿真实验表明,FIR滤波器与IIR的Butterworth滤波器都能很好地克服传统滤波器的不足,通过语谱图直观地对比发现基于窗函数法设计FIR滤波器比双线性法设计的Butterworth滤波器能更好地达到预定的去噪效果。
  • 实现和比较了卡尔曼和维纳滤波器去噪性能,MATLAB代码可运行
  • 滤波器视频去噪

    2012-07-11 22:26:01
    使用C++ 实现了多种滤波器对视频进行去噪,和增强
  • 为了避免切换矢量滤波器中硬阈值的误分类,提出了一种新的模糊决策滤波器。 它使用模糊隶属度值来描述像素的属性,并且在噪声与无噪声之间定义了像素。 当中心像素完全无噪声时,像素保持不变。 否则,将使用不同...
  • 完整的中值滤波器去噪源代码,可运行,使用带说明
  • 数字滤波器的设计

    2015-06-05 16:20:04
    数字滤波器的设计一个加白噪声信号包括去噪滤波器的设计,低通,高通,带通滤波器的设计
  • 自适应滤波器LMS算法(去噪)自适应滤波器LMS算法(去噪
  • 通过改变采样光栅的各参数来仿真其反射谱,调试出并通过采样光纤光栅的光学梳状滤波器进行调试。和该降噪处理的方法。该方法是将经验模态分解得到的固有模态函数,分为信号分量开始引起作用模态与噪声分量开始引起...
  • 双边滤波器实现图像的去噪处理,可以对二维图像和三维彩色图像进行平滑操作。应用领域为图像去噪,可以作为模式识别的预处理步骤。
  • 目前看深度学习远远超过了传统的去噪滤波器。在这篇文章中,我将使用一个案例来逐步解释几种方法,从问题的形成到实现最先进的深度学习模型,然后最终看到结果。 内容摘要 图像中的噪声是什么? 问题表述 机器...
  • 2.用中值滤波器去除图像中的噪声3.比较两种方法的处理结果实验步骤:用原始图像lena.bmp或cameraman.bmp加产生的3%椒盐噪声图像合成一幅有噪声的图像并显示;1.用均值滤波器去除图像中的噪声(选3x3窗口):以...
  • 心电信号去噪2--中值滤波器

    千次阅读 2019-06-02 19:57:34
    上一篇中我们说到基线漂移是心电信号中的主要噪音之一,本张介绍的中值滤波器可以较好的去除基线漂移的噪音。 中值滤波器原理 中值滤波器一种非线性的数字滤波技术,具有抑制噪声和保护边...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 775
精华内容 310
关键字:

去噪滤波器