Matlab滤波器设计示例

这篇具有很好参考价值的文章主要介绍了Matlab滤波器设计示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 概要

2. 低通滤波器设计例 with designfilt()

2.1 要点一:归一化频率

2.2 要点二:如何使用所生成的滤波器

3. designfilt() 的功能

3.1 能设计什么类型的滤波器

 3.2 设计(优化)方法

4. 特殊类型滤波器设计工具

4.1 巴特沃斯滤波器设计

4.2 半带滤波器设计

5. 图形化设计工具filterDesigner


1. 概要

        Matlab提供了非常丰富的滤波器设计工具,其中最基本的是designfilt()函数。 designfilt()函数是通用的滤波器设计工具,可以用于设计各种类型的数字滤波器,以及模拟滤波器的数字近似。Matlab还提供了其它很多专用类型的滤波器设计函数,还有基于图形化界面进行滤波器设计的工具filterDesigner(旧版本为fdatool)。

        本文综合但简要地介绍各种matlab滤波器设计工具,顺便代码示例介绍用于滤波器频谱观测用的工具、以及如何使用所生成的滤波器对象。

2. 低通滤波器设计例 with designfilt()

        以下代码示例用designfilt()设计了一个低通滤波器。

close all; clear; clc;
echo off;

% Design a lowpass filter.
Fs       = 25e6;   % Fs,passband,stopband的绝对值其实对于滤波器设计无关紧要,起作用的是相对值或者说归一化值
passBand = 3e6;    % Fs,passband,stopband的绝对值其实对于滤波器设计无关紧要,起作用的是相对值或者说归一化值
stopBand = 6e6;    % Fs,passband,stopband的绝对值其实对于滤波器设计无关紧要,起作用的是相对值或者说归一化值
filterOrder  = 30; % 设定30阶,即31抽头
passBandFreq = (passBand)/(Fs/2); % 归一化频率计算是相对于Fs/2!
stopBandFreq = (stopBand)/(Fs/2);
 
filtobj = designfilt('lowpassfir', 'FilterOrder', filterOrder, ...
                   'PassbandFrequency', passBandFreq, ...
                   'StopbandFrequency', stopBandFreq, 'DesignMethod', ...
                   'ls');
fvtool(filtobj); title('filter frequency response'); % visualize filter response    

% white gaussian random data generation
noise = wgn(1,10000,0,'dBm'); % 生成0dBm高斯白噪声序列

% filtering
filted_out1  = filter(filtobj,noise);                % 直接以滤波器对象作为参数调用filter
filted_out2  = filter(filtobj.Coefficients,1,noise); % 以filter(b,a,x)的方式调用

assert(isequal(filted_out1,filted_out2)); % 确认两种调用方法的结果是否完全一致

figure; 
subplot(2,1,1); pwelch(noise,[],[],[],Fs,'center'); title('original noise');
subplot(2,1,2); 
pwelch(filted_out1,[],[],[],Fs,'center'); title('after filtering');
hold on; 
pwelch(filted_out2,[],[],[],Fs,'center');
    
echo off;

        所生成的滤波器的幅频响应(由fvtool()生成)如下: 

Matlab滤波器设计示例

        滤波器的输入信号频谱(白噪声,所以基本上功率谱密度是均一的)和输出信号频谱分别如下所示(可以看出输出频谱相对于输入频谱的变化体现了滤波器的幅频响应): 

Matlab滤波器设计示例

2.1 要点一:归一化频率

        “passbandFrequency”和“stopbandFrequency”的设定是以归一化频率的形式进行设定,进一步,是相对于奈奎斯特频率(Fs/2, instead of Fs!)的归一化频率。

2.2 要点二:如何使用所生成的滤波器

        designFilt()生成的是digitalFilter类的对象。根据所生成的滤波器的类型,该对象中所包含的信息是不同的。比如说以上生成的低通滤波器对象中所包含的信息为:

filtobj = 

 digitalFilter with properties:

         Coefficients: [-6.6250e-04 -5.5486e-04 0.0017 0.0037 3.1161e-04 -0.0082 -0.0103 0.0049 0.0253 0.0192 -0.0256 -0.0658 … ]

   Specifications:
    FrequencyResponse: 'lowpass'
    ImpulseResponse: 'fir'
    SampleRate: 2
    FilterOrder: 30
    StopbandFrequency: 0.4800
    PassbandFrequency: 0.2400
    DesignMethod: 'ls'

        所生成的滤波器可以作为输入参数传递给filter()进行滤波处理。这里有两种基本的调用方式:

        第一种是直接将滤波器对象作为参数传递给filter():filter(filtobj,noise);

        第二种是以filter(b,a,x)的方式只将滤波器对象中滤波器系数传递给filter(): filter(filtobj.Coefficients,1,noise);

3. designfilt() 的功能

        designfilt()功能非常强大,几乎无所不能。这里只做简要介绍,详细使用说明可以参考matlab帮助页信息。

3.1 能设计什么类型的滤波器

        designfilt()的“resp”参数用于指定所要设计的滤波器响应的类型,有以下可能的选项:

'lowpassfir'  FIR低通滤波器  
'lowpassiir'  IIR低通滤波器  
'highpassfir'   FIR高通滤波器  
'highpassiir'   IIR高通滤波器  
'bandpassfir'   FIR带通滤波器  
'bandpassiir'   IIR带通滤波器  
'bandstopfir'   FIR带阻滤波器  
'bandstopiir'  IIR带阻滤波器  
'differentiatorfir'  FIR差分器  
'hilbertfir'  FIR希尔伯特滤波器  
'arbmagfir' 任意幅频响应滤波器  

        针对每种滤波器类型,有各不相同的设计参数指定方式,详细请查询matlab帮助页。 

 3.2 设计(优化)方法

        designfilt()使用参数“DesignMethod”来指定设计优化方法,设计优化有以下一些可选项:

'butter'  设计巴特沃斯类型的IIR滤波器
'cheby1'  设计切比雪夫类型1的IIR滤波器
'cheby2'  设计切比雪夫类型2的IIR滤波器
'cls'  使用约束最小二乘法设计FIR滤波器
'ellip'  设计椭圆类型IIR滤波器
'equiripple'  使用Parks-McClellan algorithm设计等波纹FIR滤波器
'freqsamp'  使用频域采样法设计任意频率响应的FIR滤波器
'kaiserwin'  使用恺撒窗方法设计FIR滤波器
'ls'  使用最小二乘法设计FIR滤波器
'maxflat'  设计最大平坦FIR滤波器
'window' 使用最小平方近似方法计算滤波器系数,然后用窗函数进行平滑化

        很显然,设计方法与设计类型并不是能够进行全组合的关系,因为有些设计方法只能用于IIR滤波器设计,有一些则只能用与FIR滤波器的设计。

        针对每种设计方法,有各不相同的辅助参数指定方式,详细请查询matlab帮助页。 

4. 特殊类型滤波器设计工具

        在matlab命令行输入以下命令会输出所有滤波器相关的各种工具以及示例列表。

        后面将挑选一些典型常用的设计工具函数进行基于代码实验的介绍。

>> lookfor 'filter design'

4.1 巴特沃斯滤波器设计

        除了以上designfilt()可以选择指定"butter"选项设计巴特沃斯滤波器,matlab也提供了butter()函数专门用于巴特沃斯滤波器。代码示例如下:

% butterworth filter designfilt
[b1,a1] = butter(4,0.6,'low'); % 4阶巴特沃斯低通滤波器
[b2,a2] = butter(4,0.3,'high');% 4阶巴特沃斯高通滤波器
figure; freqz(b1,a1); title('4th-order butterworth low-pass filter, freq response');
figure; freqz(b2,a2); title('4th-order butterworth high-pass filter, freq response');
% white gaussian random data generation
noise = wgn(1,10000,0,'dBm'); % 生成功率为0dBm的高斯白噪声

filted_out1 = filter(b1,a1,noise);      
filted_out2 = filter(b2,a2,filted_out1); % 低通和高通级联等价于一个带通滤波器

figure; 
subplot(3,1,1); pwelch(noise,[],[],[],[],'center'); title('original noise');
subplot(3,1,2); pwelch(filted_out1,[],[],[],[],'center'); title('after low-pass filtering');
subplot(3,1,3); pwelch(filted_out2,[],[],[],[],'center'); title('after high-pass filtering');

        4阶巴特沃斯低通和高通滤波器的频域响应如下所示(这是iir类型的滤波器,所以不是线性相位的) 。

Matlab滤波器设计示例

        输入信号和输出信号频谱如下所示,很显然,一个低通滤波处理和一个高通滤波器级联得到了一个带通滤波器处理的效果。

Matlab滤波器设计示例

4.2 半带滤波器设计

        半带滤波器可以用firhalfband()生成,代码例如下。

Fs  = 25e6;
Fp  = 3e6;
N   = 20;
hbfir1 = firhalfband(N,Fp/(Fs/2));
fvt1 = fvtool(hbfir1,'Fs',Fs,'Color','white');
figure; plot(hbfir1,'-o'); grid on; title('impulse response');

 Matlab滤波器设计示例

        半带滤波器常用于2倍上采样的镜像抑制滤波器或2倍下采样的抗混叠滤波器。通常将半带滤波器与 2倍上采样或2倍下采样组合在一起构成所谓的半带抽取器(halfband decimator)和半带插值器(halfband interpolator)。进一步可以以级联的方式构成更复杂的多级高倍率上采样插值滤波器或者下采样抽取器。

5. 图形化设计工具filterDesigner

Also: IIR滤波器设计基础及Matlab设计示例https://chenxiaoyuan.blog.csdn.net/article/details/125363150

        文章来源地址https://www.toymoban.com/news/detail-426309.html

到了这里,关于Matlab滤波器设计示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab演示低通滤波器

    首先输入两个音频文件(可以自己录两段音频) fs是采样频率。 我们可以用n接收x1。再用n除以采样频率fs,即可得到x1消耗的秒数。 由于两个信号长度不同,所以接下来我们需要统一两个信号的长度 将较短的那个信号的空白部分用0填充。 信号等长之后直接将两个信号通入低

    2024年02月13日
    浏览(37)
  • 使用C++设计滤波器(低通滤波器,高通滤波器,带通滤波器)

    以下是一个使用C++语言编写的基本低通滤波器的示例代码,它可以对输入信号进行滤波以降低高频成分: 在这个示例中,我们使用一个一阶滤波器来实现低通滤波器。该滤波器具有一个截止频率,所有高于该频率的信号成分都会被过滤掉。在构造函数中,我们根据采样率和截

    2024年02月11日
    浏览(38)
  • MATLAB实现低通滤波器(附完整代码)

    1.MATLAB实现低通滤波器 以下是一个完整的示例,包括生成一个包含高频噪声的信号,然后使用一个低通滤波器对其进行滤波,最后绘制原始信号和滤波后的信号。 % 设置参数 Fs = 1000;  % 采样率 Fc = 100;   % 截止频率 N = 60;  % 滤波器的阶数 T = 1/Fs;  % 采样周期 L = 1000;  % 信号长

    2024年04月09日
    浏览(46)
  • Matlab图像处理- 高斯低通滤波器

      高斯低通滤波器 高斯低通滤波器是一种 更平滑的一种滤波器 ,高斯低通滤波器完全没有振铃现象,且边缘平滑。 示例代码 利用输入图像,构建一个截止频率为30的高斯低通滤波器的透视图如下图所示。 效果图片

    2024年02月09日
    浏览(42)
  • 有源低通滤波器设计

    本文主要记录本人最近项目使用的低通滤波器,对滤波器性能要求是,通频带内增益约11dB,对22HZ以上的频率尽可能滤除,特别是50HZ的工频信号,要求衰减到-50dB或更小,由于 巴特沃斯滤波器 的特点是通频带的频率响应曲线最平滑,所以选择了 巴特沃斯滤波器 。 下图为 5阶

    2024年02月12日
    浏览(36)
  • FPGA设计FIR滤波器低通滤波器,代码及视频

    名称:FIR滤波器低通滤波器 软件:Quartus 语言:Verilog/VHDL 本资源含有verilog及VHDL两种语言设计的工程,每个工程均可实现以下FIR滤波器的功能。 代码功能: 设计一个8阶FIR滤波器(低通滤波器),要求截止频率为20KHz,使用线性相位结构。 参数设计方法: 使用matlab软件设计滤

    2024年02月08日
    浏览(50)
  • Matlab图像处理频域滤波实现——巴特沃斯低通、高通、带通带阻滤波器

    巴特沃斯滤波器是一种常用于图像处理的滤波器,它在频域中的传递函数具有更加平滑的过渡,相对于理想滤波器来说,巴特沃斯滤波器可以更好地控制截止频率和滤波器的阶数。下面是巴特沃斯滤波器的不同类型的原理简介: 1.原理 (1)巴特沃斯低通滤波(Butterworth Lowp

    2024年04月09日
    浏览(53)
  • 二阶低通有源滤波器设计与仿真测试

    传感器输出的测量信号中,除了有用的信息外,往往还包含许多噪声以及其他与被测量无关的信号,从而影响测量精度。这冲噪声般随机性很强,难于从时域中直分离出来,但限于其产生的物理机理、噪声功率是有限的,并按一定规律分布于频域中某个特定频带。因此,可以

    2024年02月03日
    浏览(36)
  • Mutisim电路仿真的应用(有源低通滤波器的设计)

    设计一个二阶有源低通滤波器,已知其滤波电容均为luF,利用参数扫描工具和蒙特卡洛分析工具求解: a要使滤波器截止频率为500Hz,其电阻值应该取多少? b电容容差10%,电阻容差5%时,截止频率取值范围是多少? 设计要点: 该实验涉及到mutisim仿真软件的高级运用,能调试出有

    2024年02月04日
    浏览(47)
  • 基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

    本文为FPGA实现FIR滤波器仿真过程,附源代码。 提示:以下是本篇文章正文内容,下面案例可供参考 打开MATLAB在命令行窗口输入: fadtool 回车后在滤波器设计界面设置滤波器参数如下 之后点击如图标志,设置定点,在菜单栏\\\"目标(R)\\\"出选择生成对应滤波器系数.COE文件 mat

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包