C#中实现FIR带通滤波

2023-10-31

最近有一个需求,在C#中实现FIR滤波,网上查了些资料感觉FIR滤波使用的还算比较多,相关的原理也比较简单。参考下面在Python环境中实现FIR的博客,在C#的环境中实现了一遍。

https://blog.csdn.net/moge19/article/details/94495442(Python实现FIR带通滤波器)

下文中的工程下载链接:https://download.csdn.net/download/zhoudapeng01/12036955

一、FIR滤波器的设计,这里使用Matlab进行设计:

filterDesigner命令启动工具箱

设计FIR带通滤波,这里设计32阶,125-300赫兹,Hamming窗

输出设计的滤波器:这里面有3种不同的输出模式,你可以都输出看看,本质上都是同一个滤波器,只不过表现形式不同而已。

matlab中的滤波效果验证(使用的是第一个选项生成的脚本,这里保存为FilteDesign1):

第一列为时域数据,第二列为频域数据。

第一行为输入数据,第二行为FIR滤波器的结果,第三行为理想的滤波结果,图中可以看出滤波后的频谱和理想频谱还算接近,具体的效果需要根据实际情况调节阶数等滤波器的参数。

clc;clear;clf;close all 

t = 0:0.001:0.05;
%原始数据
y = 0.7*sin(2*pi*30*t) + 1.8*sin(2*pi*160*t) + 5.1*sin(2*pi*330*t) ;
fft_y = abs(fft(y));
subplot(3,2,1);
plot(y)
subplot(3,2,2);
plot(fft_y)

%FIR滤波结果125-300
H = filter(FilteDesign1,y);
% H = filter(FilteDesign1,H');
fft_H = abs(fft(H));
subplot(3,2,3);
plot(H)
subplot(3,2,4);
plot(fft_H)
%理想结果
yH = 1.8*sin(2*pi*160*t);
fft_yH = abs(fft(yH));
subplot(3,2,5);
plot(yH)
subplot(3,2,6);
plot(fft_yH)

二、FIR带通滤波的C#实现

y(n)=\sum_{0}^{N}h(i)x(i)

个人理解滤波器的原理就是一句话:频域的乘积就是时域的卷积。实现滤波器的本质就是实现卷积运算,我们可以在matlab中获取上面设计滤波器的系数,在保存滤波器的时候选择第三个,在matlab函数中就可以获取到滤波器的系数h(i)。

C#的实现代码,filterParameters为对应的滤波器参数,其中CalcFIR为计算的核心部分,其输入参数为输入信号,返回值为滤波后的信号。

using System;
using System.Collections.Generic;
using System.Text;

namespace AlgorithmCSharp.Filter
{
    class FilterFIR
    {
        public List<double> filterParameters { get; set; }

        public FilterFIR(List<double> parameters)
        {
            filterParameters = parameters;
        }

        public double[] CalcFIR(double[] dataSerial)
        {
            int length = dataSerial.Length;
            int order = filterParameters.Count;
            double[] FIRResult = new double[length];

            for(int i =0; i<length; i++)
            {
                double sum = 0;
                if(i<order)
                {
                    for(int j =0; j<i;j++)
                    {
                        sum += filterParameters[j] * dataSerial[i - j];
                    }
                }
                else
                {
                    for(int j=0; j<order; j++)
                    {
                        sum += filterParameters[j] * dataSerial[i - j];
                    }
                }
                FIRResult[i] = sum;
            }

            return FIRResult;
            
        }

    }
}

对应的资源下载地址: https://download.csdn.net/download/zhoudapeng01/12036955

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中实现FIR带通滤波 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 7个案例15分钟让你了解Python套路!

    古人云 书山有路勤为径 学海无涯苦作舟 注 一般标榜着 XX天学会XX XX 分钟了解XX 的文章都不会是让你增长功力的文章 如本文 随着互联网发展 全球在快速数字化 编程这件事也从数十年前只有科研人研在实验室才能做的事变得越来越让人们所熟
  • C++对txt文件的写入读取操作

    文章目录 1 文件流知识 2 文件的写入 3 文件内容的输出 1 文件流知识 摘自c 中文网 ifstream是输入文件流 就是通过它定义的对象获取文件中的内容 ofstream是输出文件流 将内容写入文件 注意 要使用输入输出文件流要包含
  • 1 .SQL——DataGrip 中的DML三种添加数据方法

    insert into student xingx xi id name age grade xb woketime value 1 aa 10 99 男 2023 12 1 给指定字段添加数据 insert into student xi
  • 谷粒商城笔记+踩坑汇总篇

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 设计模式 牛客面试题 目录 一 摘要 二 微服务架构图 三 文章汇总 一 摘要 部
  • 【待解决】报错:gpt模型训练的时候,有报错的torch.distributed.elastic.multiprocessing.errors.ChildFailedError:

    pytorch多GPU并行的问题 torch distributed elastic multiprocessing errors c CSDN博客
  • Goby漏洞更新

    Goby预置了最具攻击效果的漏洞引擎 覆盖Weblogic Tomcat等最严重漏洞 每天从互联网 如CVE 会产生大量的漏洞信息 我们筛选了会被用于真实攻击的漏洞进行每日更新 Goby也提供了可以自定义的漏洞检查框架 发动了互联网的大量安
  • QTreeView使用整理

    在Qt开发过程中 树控件QTreeView使用的非常频繁 各种批量展示和编辑信息的地方 都用得上该控件 在使用QTreeView过程中 用到各种常规 不常规的功能 并进行过各种改造 这里将这些知识和技巧作一个总结 一 Model View框
  • C++实现基于mfc的仓库管理系统(可连MySQL数据库)

    概述 本系统是一个基于mfc实现的可以连接数据库的仓库管理系统 其余管理系统也可根据此系统进行参考与修改进行实现 主要功能 本超市仓库管理系统 通过对数据库的查询 能够实现系统登录以及对商品与用户信息的增删改查操作 支持多用户多身份登录 其
  • 大学《数据库系统》课程设计报告

    二话不说 先怼源码 gitHub源码地址 题 目 教学管理系统 专 业 计算机科学与技术 作 者 马志成 完成时间 2019年1月3日 一 实验目的 数据库系统课程设计是为了配合数据库原理及应用开发而设置的 是计算机科学与技术 网络工程 信
  • Contest2574 - 高级语言程序实践--第6次作业--计信A2107-2113

    写在前面 乍一看挺难 仔细想想也就纸老虎罢了 不写题解 自己想吧 目录 问题 A 字符串去重排序 问题 B 两数之和 问题 C 完美立方数 问题 D 分解质因数 问题 E 子列表最大长度 问题 F 列表的合并与排序 问题 G 个人数据脱敏
  • 别再问我们用什么画图的了!问就是excalidraw

    每次发 https github com tal tech go zero 相关文章时 都会有读者问我们用什么画图的 这图什么工具画的呀 好看 这个手绘风格真好看 用啥工具画的呀 可不可以介绍下这个画图的工具 诸如此类的问题 所以我决定写篇
  • MYSQL 删除空记录 NULL

    数据库小问题 今天在处理数据库中的数据的时候 遇到空记录的问题 在百度上搜索之后 给出的答案有这样几种 1 Delete from student where name null 2 Delete from student where na
  • 不只是噪声,更是数学美 ---浅谈Perlin Noise

    首先说明为什么这篇博客叫这个题目 我刚刚开始学习Perlin Noise是从知乎上的一篇文章入门的 作者的题目是不只是噪声 我觉得很有韵味 就借鉴过来 这是链接 https zhuanlan zhihu com p 22337544 一 背
  • navicat与mysql

    MySQL数据库用于存放数据 客户端navicat是为了方便操作数据库而设计的一种图形化软件 转自知乎如何安装MySQL数据库和navicat客户端 知乎 1 数据库如何安装 MySQL Begin Your Download 官网安装 安
  • MySQL基本知识

    什么是事务 事务是一个独立的工作单元 里面的操作要不全部成功 要不全部失败 事务有什么特性 原子性 操作要不全部成功 要不全部失败 隔离性 多个并发事务之间相互隔离 互不干扰 或者说一个事务的操作对于另外一个事务是不可见的 持久性 事务一旦
  • 密集预测/Dense Prediction

    Pixelwise dense prediction is the task of predicting a label for each pixel in the image 来自于卷积神经网络在图像语义分割 semantic image
  • haproxy应用

    不用手动编译安装 haproxy 1 7 3 tar gz yum install y rpm build rpmbuild help rpmbuild tb haproxy 1 7 3 tar gz cd root rpmbuild RP
  • NLP专栏|图解 BERT 预训练模型!

    关注后 星标 Datawhale 每日干货 每月组队学习 不错过 Datawhale干货 作者 张贤 哈尔滨工程大学 Datawhale原创作者 本文约7000字 NLP专栏文章 建议收藏阅读 审稿人 Jepson Datawhale成员
  • linux内核模块编程(二)----timer定时器

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 一 why 一般地 在我们嵌入式软件开发中 使用定时器的目的是为了实现
  • C#中实现FIR带通滤波

    最近有一个需求 在C 中实现FIR滤波 网上查了些资料感觉FIR滤波使用的还算比较多 相关的原理也比较简单 参考下面在Python环境中实现FIR的博客 在C 的环境中实现了一遍 https blog csdn net moge19 art