精华内容
下载资源
问答
  • MATLABFIR滤波算法

    千次阅读 2019-06-13 17:30:34
  • MATLAB FIR语音滤波

    2011-11-07 15:23:48
    MATLAB FIR语音滤波,可执行文件和源代码都包含了
  • Matlab fir滤波(conv)

    千次阅读 2020-02-05 17:10:07
    在混合波形中提取目标波形,会经常使用到滤波器,这里通过matlab中的conv函数(向量卷积运算)实现滤波输出。 一:设置滤波器参数 在MATLAB中输入fdatool(Filer Dsign and analysis tool)即可调出滤波器设置界面...

    在做数字信号处理的时候我们经常需要处理各种各样的波形,特别是混合波形的提取。在混合波形中提取目标波形,会经常使用到滤波器,这里通过matlab中的conv函数(向量卷积运算)实现滤波输出。

    一:设置滤波器参数

    在MATLAB中输入fdatool(Filer Dsign and analysis tool)即可调出滤波器设置界面窗口
    里面可以设置滤波器的类型,采样频率,截止频率等。本设计设置的参数如下图所示。

    注意:截止频率<采样频率。Fstop<Fs

    在这里插入图片描述

    二、导出设置好的滤波器参数

    完成滤波器设计之后,点击file-Export(导出),在出来的对话框中直接Export即可。
    之后输入Num即可看到滤波器的参数
    在这里插入图片描述

    三、滤波前后对比

    matlab 代码如下

    Fs = 10000;  % 采样频率决定了两个正弦波点之间的间隔
    N = 4096;    % 采样点数
    N1 = 0:1/Fs:N/Fs-1/Fs;
    
    normal = sin(1000*2*pi*N1);
    in = sin(1000*2*pi*N1) + sin(3000*2*pi*N1) + sin(4000*2*pi*N1);  % 混合正弦波形
    
    % 滤波器参数
    coeff = [-0.0325,-0.0384,0.0784,0.2874,0.3984,0.2874,0.0784,-0.0384,-0.0325];
    % 滤波器输出
    out = conv(in,coeff);
    
    % 画图
    subplot(3,1,1);
    plot(in);
    xlabel('滤波前');
    axis([0 200 -3 3]);
    
    subplot(3,1,2);
    plot(out);
    xlabel('滤波后');
    axis([100 200 -2 2])
    
    subplot(3,1,3);
    plot(normal);
    xlabel('原始波形');
    axis([100 200 -2 2])
    

    运行后的输出波形
    在这里插入图片描述

    可以看出滤波后的波形和原来的波形相比还是不错的。

    展开全文
  • matlab中给定输入序列x和fir系数h,3路并行fir滤波/卷积,得到输出y
  • matlab实现FIR低通滤波器

    热门讨论 2010-01-13 16:30:46
    本程序是用matlab实现的FIR低通滤波器,通过加载一段音频文件,进行滤波处理,最后又回放滤波器后的音频文件…… 可以通过听觉上区分滤波前后的差别,更好的方式当然是通过观察滤波前后的频谱来进行验证……
  • Matlab、图像IIR、FIR滤波

    千次阅读 2020-02-09 16:22:56
    大三上学期学的数字信号处理,Matlab大实验可以自选题,想到老师上课说的IIR、...本文为我基于Matlab语言实现的IIR、FIR滤波。 一、实验任务 1. 利用Matlab实现简单的图像操作 2.为图像加上噪声,并用Matlab制作...

    大三上学期学的数字信号处理,Matlab大实验可以自选题,想到老师上课说的IIR、FIR的区别,借助图像观察两种滤波器的区别。当然,现在大家使用的图像处理算法是现代滤波器,与经典滤波器分析问题的角度不同,但本质上还是对图像的滤波。本文为我基于Matlab语言实现的IIR、FIR滤波。

    一、实验任务

    1.  利用 Matlab 实现简单的图像操作

    2. 为图像加上噪声,并用Matlab制作FIR、IIR带限滤波器,观察处理效果

    3. 利用 Simulink 搭建简单的图像处理工程

    4. 探究 Matlab 和 ModelSim 结合的FPGA图像处理仿真平台

    二、主要实验仪器及材料 

    Windows 10操作系统、Matlab2018a 

    三、基于Matlab的图像滤波

    1.图像的读入

    实验内容:

    通过Matlab读入彩色图像,并获得其长,宽等基本信息。

    实验步骤:

    在Matlab工程目录下,保存一幅彩色图片,命名为`image.jpg`。

    使用imread函数可读入图像,并返回一个对象;使用size函数可返回函数的长宽信息;由于图像要通过滤波器,使用rgb三通道需要分别设计三种滤波器,为实验过程增加了不必要的工作量,所以本次实验处理灰色图像,使用rgb2gray函数可将rgb图像转化成灰度图。

    %% 图像的读取以及转换

    rawImg=imread('image.jpg'); %读取jpg图像

    grayImg=rgb2gray(rawImg);   %生成灰度图像

    [row,col]=size(grayImg);        %求图像长宽

    生成的灰度图像如下图所示:

                                                       

    2.添加噪声

    实验内容:

    为原图像添加噪声,为验证带限滤波器和非带限滤波器(中值滤波、卡尔曼

    滤波)的特点、分别加入以下两类噪声。

    1)多个单频率的正弦波噪声叠加。频率分别为:350Hz、400Hz、450Hz; 

    2)高斯白噪声;‘

    实验步骤:

    首先规定扫描频率和扫描时间间隔fs=1000;T=1/fs。再分别生成三种频率的正弦波,其长度需要与图像的像素点数匹配,并叠加成噪声:

        fz1=350;fz2=400;fz3=450;% 三个噪声频率

        noise=0.4*sin(2*pi*fz1*n*T)+...

            0.7*sin(2*pi*fz2*n*T)+...

            0.5*sin(2*pi*fz3*n*T);% 噪声序列

        为了将正弦波噪声叠加到图像上,首先需要将二维图像的数据作归一化处理,然后映射到一维。

    normImgMartix=im2double(grayImg);   图像数据进行归一化

    rawMartix=zeros(1,row*col);                    初始化一维矩阵

    for i=1:row

        for j=1:col

            rawMartix(col*(i-1)+j)=normImgMartix(i,j);

        end

    end          %M*N维矩阵变成1维矩阵

    再进行灰度图像和噪声信号的叠加,并将一维变换到二维。

        rawMartixWithNoise=rawMartix+noise;% 加入噪声的序列

        noiseMartix=zeros(row,col);

        一维变M*N矩阵

        for i=1:row

            for j=1:col

                noiseMartix(i,j)=rawMartixWithNoise(col*(i-1)+j);

            end

        end

    加入单频混叠干扰的图像如下图所示:

                        

    再然后,再原始图像上加入高斯白噪声,Matlab内置了噪声函数,调用语法如下。

    whiteNoiseImg=imnoise(grayImg); 加高斯噪声,给simulink

    加入高斯白噪声的图像如下图所示:

                    

    3.设计数字滤波器

    实验内容:

    设计IIR、FIR数字低通滤波器。

    低通滤波器性能指标,fp=250 Hz,fs=300 Hz,As=20dB,Ap=3dB,fs=300 Hz,As=20dB,Ap=3dB,As=20dB,Ap=3dB,Ap=3dB。 

    观察两种滤波器对加入了单频混叠噪声的图像的滤除效果,比较两者的优缺点。再观察两种低通滤波器对加入了高斯白噪声的图像的屡出效果,分析原因。

    实验步骤:

    首先,设计IIR低通滤波器,用直接设计数字滤波器法设计巴特沃斯低通滤波器。再用hamming窗设计FIR低通滤波器,相关设计代码如下:

    %% 设计IIR滤波器并分析相关指标

    wp=250*2/fs;ws=300*2/fs;Rp=3;Rs=20;

    [Nm,Wc]=buttord(wp,ws,Rp,Rs);

    [b,a]=butter(Nm,Wc);         

    H=freqz(b,a,f*2*pi/fs);

    mag=abs(H);pha=angle(H);

    mag1=20*log((mag+eps)/max(mag));

    %% 设计FIR滤波器并分析相关指标

    wc=280*2/fs; 

    %6dB截止频率280kHz

    fx=[0 wc wc 1];

    m=[1 1 0 0];

    %理想频幅响应

    b1=fir2(40,fx,m,hamming(41));

    H1=freqz(b1,1,f*2*pi/fs);

    mag2=abs(H1);pha1=angle(H1);

    mag3=20*log((mag2+eps)/max(mag2));

    观察设计出的两种滤波器的特性。

                 

        分别用IIR、FIR滤波器滤除图像中的单频混叠噪声,并且为了便于观察图像的频谱变化,做一次中心变换。

    rawMartixWithNoiseWithIIR=filter(b,a,rawMartixWithNoise);

    rawMartixWithNoiseWithIIRFFT=fft(rawMartixWithNoiseWithIIR);

    rawMartixWithNoiseWithIIRFFTShift=fftshift(rawMartixWithNoiseWithIIRFFT);

    其中,b,a为设计出的滤波器的分子分母系数,将其带入为IIR、FIR滤波器相应系数即可。观察其滤除后的图像。

           

    对上述结果作简单分析:经过两个低通滤波器,高频干扰被滤除了。但是图像有部分失真,体现在图像的左边有小块黑点,这些黑点原本是属于图像的右侧。原因在于同一个像素点,经过滤波器会产生一定的延时,阶数越高,延时越大,由于相同指标下,FIR的阶数比IIR的阶数要高,所以其产生的延时越大,效果也越差一点。但是由于FIR是线性相位,每一个点的延时都是相同的, 所以很好进行修正。下面探讨修正的方法。

    4.对滤波后的图像进行相位修正

    实验内容:

    由于信号通过两类滤波器像素点会产生延时,会出现图像部分像素点偏移的

    情况,现在探讨如何对这种情况进行修正。利用Matlab自带的grpdelay函数能够获得滤波器的延时情况。根据情况,给出解决方案。

    实验步骤:

        求解滤波器延时调用代码格式为:

    grd=grpdelay(b,a,f*2*pi/fs);

    上述代码中,b,a为对应滤波器的分子分母系数。由于结果过于长,这里不列出。仅给出结论。对于IIR滤波器,不同的像素点输入后的群延时不同,对于FIR滤波器,每一个像素点的延时都是定值,在本实验中,该值为20,所以我们只需要将FIR滤波器处理后的图像向前推移20位即可。编写代码如下:

    K=round(mean(grd));

    rawMartixWithNoiseWithFIRFixed=[rawMartixWithNoiseWithFIR((K+1):L),rawMartixWithNoiseWithFIR(1:K)];

    再将图像转换成二维矩阵显示,处理后的结果如下图所示:

    但是对于IIR滤波器,由于延时不同,其失真不可挽回,且对于每个像素点都要减去相应的延时。即使能够勉强恢复图像,耗费的时间也是很大的。所以可以得出结论对于图像处理来说FIR滤波器比IIR滤波器更适合。

    5.比较滤波前后图像的频谱 

    实验内容:

    在一个窗口里画出图像经过Matlab处理过程中的频谱图,反应频谱变化。

    实验步骤:

        各状态的频谱图如下图所示:

    可以看到滤波器工作正常,各频率成分有被很好的滤除。调用sound函数回放声音,感受声音的变化。

    5.高斯白噪声的滤除

    实验内容:

    对于高斯白噪声,首先尝试FIR、IIR滤波器的滤除方法,观察效果。后结

    合Simulink给出更好的解决方案。

    实验步骤:

       首先,尝试用IIR、FIR滤波器对掺入噪声的图片进行滤波,效果如下图。

    可以发现,结果中看不到原始图像的特征。分析原因:高斯白噪声的频带覆盖了整个频谱,会将原始图像的频谱淹没。如果此时仍然使用带通滤波器很难再将原有的图像恢复。在网络上查阅资料不难发现,高斯白噪声较好的滤除方法是中值滤波。

    中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。从其算法原理来看,对于上述人为添加的高频混叠干扰来说,中值滤波起不到很好效果,但对于高斯白噪声这一类随机噪声,能够起到较好的过滤作用。

    接下来,在SimuLink里搭建图像处理平台与中值滤波环境。简单介绍一下使用到的模块:

    Image From Workspace: 获取工作区的图像类型,获取白噪声。

    Median Filter:中值滤波。

    Video Viewer:能够将图像矩阵可视化显示的模块。

    在SimuLink中搭建工程如下图所示:

        运行后,结果如下图所示:

                                               

        可见,相对于带限滤波器而言,中值滤波对白噪声的处理有更好的效果。

    点击进入我的博客阅读

    展开全文
  • C语言实现FIR滤波

    千次阅读 2019-12-02 17:09:27
    C语言实现FIR滤波
    C语言实现FIR滤波

    fir.c和fir.h见https://download.csdn.net/download/weixin_43216875/12010587

    1 fir.h

    #ifndef FIR_H
    #define FIR_H
    
    #include <math.h>
    
    int max(int a,int b);
    int min(int a, int b);
    void conv(double *data_1,double *data_2, int length_1, int length_2, double *target);
    
    double bessel0(double x);
    double kaiser(int i , int n, double beta);
    double window(int type, int n, int i, double beta);
    void firwin(int n, int band, double fln, double fhn, int wn, double h[]);
    /*
    *  *n——整型变量。滤波器的阶数。
    *  band——整型变量。滤波器的类型。取值为1、2、3和4,分别对应低通、高通、带通和带阻滤波器。
    *  fln——双精度实型变量。
    *  fhn——双精度实型变量。
    *      对于低通和高通滤波器,fln:通带边界频率;对于带通和带阻滤波器,fIn:通带下边界频率,fhn:通带上边界频率
    *  wn——整型变量。窗函数的类型;取值1到7,分别对应矩形窗,图基窗,三角窗,汉宁窗,海明窗,布拉克曼窗和凯塞窗。
    *  h——双精度实型-~维数组,长度为(n+1).存放FIR滤波器的系数。
    *      函数firwin()调用以下函数:子函数window(),窗函数的计算。子函数Kaiser(),凯塞窗的计算。子函数bessel0(),贝塞耳函数的计算。
    */
    #endif // FIR_H
    

    2 main.cpp

    #include <iostream>
    using namespace std;
    #include <math.h>
    #include "fir.h"
    
    #define PI 3.1415926535897932384626433832795028841971
    #define N 50000//与matlab中保持一致
    
    int main()
    {
        double signal[N];//原始数据
        double t[N];//时间序列
        double h[21];//滤波器系数为阶数+1
        double denoise[N+21-1];
    
        for(int i = 0; i<N ; i++)
            t[i] = i*static_cast<double>(5)/N;//时间序列0~5秒
    
        for(int i = 0; i<N ; i++)
            signal[i] = sin(2*PI*t[i]) + 0.5*sin(2*PI*1000*t[i]);
    
        firwin(20, 1, 1e-3, 1e-3, 5, h);
        /*
        *  20:阶数
        *  1:低通滤波
        *  1e-3:截止频率,与matlab中“5/Fs*2”相同
        *  5:海明窗
        */
    
        conv(h,signal,21,N,denoise);
        /*
       *  h:数据1
       *  signal:数据2
       *  21:数据1长度
       *  N:数据2长度
       *  denoise:卷积结果
        */
    
        FILE * fp;
        fp = fopen("F:/signal.txt","wb");
        for(int i=0;i<N;i++)
          fprintf(fp,"%lf\r\n",signal[i]);//将signal写入文本
        fclose(fp);
    
        fp = fopen("F:/denoise.txt","wb");
        for(int i=0;i<N+21-1;i++)
          fprintf(fp,"%lf\r\n",denoise[i]);//将denoise写入文本
        fclose(fp);
    
        return 0;
    }
    

    3 与Matlab对比

    3.1 Matlab运行结果

    Fs = 10000;%采样频域10kHz
    N = 5*Fs;
    t = 0:1/Fs:5;
    signal = sin(2*pi*t)+0.5*sin(2*pi*1000*t);%2个不同频率的正弦信号叠加
    
    subplot(2,1,1)
    plot(t,signal);
    
    b = fir1(20,5/Fs*2);
    denoise = conv(b, signal);
    denoise_fir = denoise(20/2+1:end-20/2);
    
    subplot(2,1,2)
    plot(t,denoise_fir);
    

    3.2 C语言运行结果

    展开全文
  • 基于FFT的FIR滤波

    2011-05-26 13:34:05
    1.加深理解FFT在实现数字滤波(或快速卷积)中的重要作用,更好的利用FFT进行数字信号处理。 2.掌握循环卷积和线性卷积两者之间的关系。
  • matlab进行心电图的fir滤波.可以进行仿真.
  • 码元信号进行取绝对码,然后进行DPSK调制,将调制信号进行IQ解调,并通过低通滤波器滤除高频分量。然后通过CIC进行抽取滤波,和FIR数字滤波,最后抽样判决还原码元信号的MATLAB代码,
  • matlab最小二乘法滤波

    2014-09-11 09:33:45
    matlab最小二乘法滤波 滤波 去噪 复原拉格朗日复原
  • FIR滤波器的matlab程序

    2011-09-08 08:15:52
    此程序是利用matlab编写,结合barrtlet滤波器,实现FIR数字滤波的一个程序。
  • audioread 读取音频,fft 分析谱,fir1 生成滤波系数,filter 执行滤波,audioplayer+play 播放音频。
  • FIR滤波器(内含完整的MATLAB代码)
  • 基于Matlab与DSP的语音信号FIR滤波.pdf
  • MATLAB编程产生原始信号,设计(分步设计与直接设计)巴特沃斯滤波器(包括IIR低通高通、FIR低通高通)并进行滤波。绘制图形观察。原理叙述清晰,注释明了,便于依据实际需要进行修改。
  • MATLAB设计FIR滤波器

    千次阅读 多人点赞 2021-01-28 13:10:07
    MATLAB设计FIR滤波器滤波器滤波器定义滤波器种类滤波器设计滤波器设计要求Matlab程序设计滤波器利用Matlab工具箱设计滤波器总结 滤波器 滤波器定义 “滤波器(filter),是一种用来消除干扰杂讯的器件,将输入或输出...
  • 基于MATLAB的语音滤波实验实验目的:在Matlab环境下对语音的频谱进行处理(数字滤波)并试听效果;在Matlab环境下对语音的抽样率进行处理(语音压缩)并试听效果实验步骤:一、音频文件的压缩(抽取)。利用windows...
  • 【嵌入式】STM32利用arm-dsp库进行FIR滤波

    千次阅读 多人点赞 2021-04-28 16:54:11
    设计FIR滤波器3.FIR滤波4.滤波前后对比二、嵌入式平台FIR滤波移植1.arm-dsp库移植2.获得FIR滤波系数3.基于arm-dsp的FIR程序4.滤波结果-与Matlab比对三、总结 电力电子应用中,往往需要对电流、电压信号进行采样,滤...
  • 运用matlab代码实现FIR滤波器,包括低通、高通、带通、带阻
  • matlab进行FIR滤波器设计(一)

    万次阅读 2018-04-22 19:50:03
    在实际的应用中,有时需要使用FIR根据完成一些特定功能,比如近似一阶RC低通电路的响应,等等。如何确定FIR滤波器的系数呢?http://www.360doc.com/content/17/0518/21/1832721_655109467.shtml 中有这么一段话: ...
  • 为解决嵌入式系统对语音处理的速度和存储空间等有较高要求的问题,研究采用快速傅立叶变换(FFT)和FIR滤波实现语音信号处理,通过MATLAB仿真软件进行了验证.结果表明,这种先进行FFT变换后进行FIR滤波的综合算法,在处理...
  • FIR低通滤波

    2019-03-05 15:14:05
    采用C语言方式实现了FIR低通滤波,并用matlab对其进行仿真,经比较结果一致
  • Matlab时域维纳滤波的一个例子原创-实验报告.doc 题目要求: 假设一个点目标在x,y平面上绕单位圆做圆周运动,由于外界干扰,其运动轨迹发生了偏移。其中,x方向的干扰为均值为0,方差为0.05的高斯噪声;y方向...
  • matlab fir 滤波系数 幅度响应图

    千次阅读 2014-09-20 14:27:44
    利用FDA设计的滤波器,用MCU转成C语言,由于MCU空间原因,导出系数我采用8位有符号系数,我了解这样的滤波系数效果乍样, b=[-9, -6, 39, 69, 39, -6, -9]; a=1; fvtool(b/2^7,a); 左图的频率点转换f=x*...
  • 这个程序是一个测量电容的完整程序,里面使用了基于STM32F4自带的DSP库的FIR低通滤波器,滤波器参数需要使用MATLAB的fdatool工具生成。网上可以搜到相关教程。
  • matlab开发的FIR滤波器附音频-FIR音频滤波器.rar 小弟上传一个程序,希望对你有所帮助~~~~ Fir3.JPG Fir1.JPG Fir2.JPG
  • FIR滤波器的C#实现.zip

    2019-12-17 20:03:22
    利用Matlab设计滤波器,32阶的FIR带通滤波,在Matlab中获取相关参数,并且在C#环境中实现FIR滤波
  • 本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号、FFT分析、FIR滤波处理,并分析滤波的效果。通过Matlab的分析验证滤波效果后,将叠加噪声信号的音频信号输出到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,393
精华内容 957
关键字:

matlab进行fir滤波

matlab 订阅