java巴特沃斯滤波器编程_C#与Matlab混合编程之巴特沃斯低通滤波器(转)

本文介绍了如何使用C#与Matlab混合编程来实现巴特沃斯低通滤波器。首先在Matlab中创建.NET Assembly,然后在C#中添加引用并设置版本。最后,展示了C#代码实现滤波器的部分,并解释了巴特沃斯滤波器的幅度特性和设计参数。
摘要由CSDN通过智能技术生成

在第一个画圈处选择.NET Assembly,第二个画圈处添加已经写好的.m文件,并在下方namespace处写入C#中要引入的namespace,此处写为b_Filter:

然后下方的Application Information选择4.0

最后点击Package

等待一会儿就生成成功:

4、Matlab部分完成,接着就是C#,打开VS2017,打开解决方案资源管理器,在所在工程的引用处单击右键添加引用,选择浏览,按照打包成功后弹出的文件夹路径添加b_Filter.dll文件:

并且同时添加安装目录下的toolbox\dotnetbuilder\bin\win64\v2.0的MWArray.dll文件,添加完成后右键单击属性,将其版本设定为2.16.0.0:

与此同时记得在代码的开头添加:

using MathWorks.MATLAB.NET.Arrays;

5、在C#中完成巴特沃斯低通滤波器部分的代码,最终完成:

本文的最后再小小的介绍一下关于巴特沃斯滤波器的知识:

巴特沃斯滤波器又称最平幅度特性滤波器,N阶巴特沃斯模拟低通滤波器的特性为:

1、幅度函数为:

| H_a (jΩc)  |= 1/√(1+〖(Ω/Ω_c )〗^2N )   ,N为滤波器阶数,Ωc为通带截止频率。

2、巴特沃斯低通滤波器幅度特性的特点:

(1)Ω = 0 时,| H_a (j0)  | = 1,无衰减;

(2)、Ω = Ωc 时,| H_a (jΩ)  | = 1/√2 = 0.707,即幅度衰减到0.707,R_c =           - 20lg| H_a (jΩc)  | = 3dB,R_c 称为通带最大衰减,不管阶数N为多少,所有幅度特性曲线都在Ω = Ωc处交汇于3dB衰减处,这就是3dB不变性;

(3)在0≤Ω≤Ωc的通带内,| H_a (jΩ)  |有最大平坦的幅度特性,随着Ω由0增加到Ωc,| H_a (jΩ)  |单调减小,N越大,减小得越慢,即N越大,通带内幅度特性越平坦;

(4)当Ω>Ωc,即在过渡带和阻带中,| H_a (jΩ)  |单调减小,而且由于Ω/Ωc > 1,故比通带内衰减的速度要快得多,即N越大,| H_a (jΩ)  |特性在这个频率范围衰减得更快。

3.巴特沃斯低通滤波器的设计参数的确定:

(1)  20lg|(H_a (j0))/(H_a (jΩ_p ) )| = -20lg|H_a (jΩ_p )| ≤ R_p               ①

20lg|(H_a (j0))/(H_a (jΩ_st ) )| = -20lg|H_a (jΩ_st )| ≥ A_s                ②

Ω_p:通带截止频率   R_p:Ω_p处〖|H〗_a (jΩ_p )|的衰减的最大值

Ω_st:阻带截止频率   A_s:Ω_st处|H_a (jΩ_st )|的衰减的最小值

(2)求滤波器阶次N

将| H_a (jΩc)  |= 1/√(1+〖(Ω/Ω_c )〗^2N )   代入①、②分别得到:

20lg|H_a (jΩ_p )| = -10lg[1+〖(Ω_p/Ωc)〗^2N] ≥ -R_p

20lg|H_a (jΩ_st )| = -10lg[1+〖(Ω_st/Ωc)〗^2N] ≤ -A_s

(〖10〗^(0.1A_s )-1)/(〖10〗^(0.1R_p )- 1) ≤ 〖(Ω_st/Ωp)〗^2N

由此得出阶次N为:

N ≥ lg(〖10〗^(0.1A_(s )- 1)/(〖10〗^(0.1R_p )- 1))/[2lg(Ω_st/Ωp))]

1)、若R_p = 3dB,则Ω_p= Ωc,R_p = 10lg[1+〖(Ω_c/Ωc)〗^2N] = 10lg2,此时

N ≥ (lg⁡(〖10〗^(0.1A_s )-1))/(2lg⁡(⁡Ω_st/Ωp))

2)、若R_p  ≠ 3dB时,Ω_p ≠ Ωc,巴特沃斯滤波器归一化低通原型的通带截止频率为Ωc = 1,去归一化成任意截止频率Ωc时必须是3dB衰减处的Ωc,此时

Ωc = (Ω_cp+ Ω_cs)/2,其中

Ω_cp = Ω_p/√(2N&〖10〗^(0.1R_p )-1) , Ω_cs = Ω_st/ √(2N&〖10〗^(0.1A_s )-1)

在本次巴特沃斯低通滤波器的设计中,将通带最大衰减R_p取值为3dB,阻带最小衰减A_s取值为60dB,使用Matlab工具中的自带函数buttord得到阶次n和截止频率W_n,即:

[n, W_n] = buttord(W1,W2,3,60),其中W1和W2为用户输入的截止频率w1和w2经过计算得到的数字频率;再用自带函数butter得到滤波器系数,即[b,a] = butter(n, W_n,’low’),其中b和a为分子和分母的系数;最后使用Matlab工具中的自带函数filter完成滤波,即filter(b,a,X),其中X为输入的原始数据。

————————————————

版权声明:本文为CSDN博主「Ishara_xw」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_34532511/article/details/78298102

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值