C# pythonnet(3)_Butter-worth低通滤波
Python代码如下
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy import signal
- def lowpass_Butterworth(sig,fs,filter_cutoff=None,order=8,axis=0):
- '''
- Butter-worth低通滤波
- Inputs:
- sig --- numpy array, 输入时间序列数据
- fs --- int, 采样率
- filter_cutoff --- float, 截断频率,滤掉高于此频率的成分
- order --- int, 滤波器阶次
- axis --- int, 在sig的哪个轴上施加滤波
- '''
- if not filter_cutoff:
- filter_cutoff=fs/4
- b,a = signal.butter(order,filter_cutoff / (fs/2),'low')
- sig = signal.filtfilt(b,a,sig,axis=axis)
- return sig
- # 读取数据
- data = pd.read_csv('clean_data_row6.csv')
- data = np.array(data)
- dataLen = len(data)
- # Butter-worth低通滤波
- fs=50 #采样频率
- filter_cutoff=10 #截断频率
- axis=0 #时间轴所在维度
- # use_downsamping=True #是否降采样
- calcData = lowpass_Butterworth(data, fs, filter_cutoff)
- calcData = np.array(calcData)
- calcDataLen = len(calcData)
- # 绘制原始数据图和Butter-worth低通滤波图
- # 原始数据图
- plt.figure(figsize=(12, 6))
- plt.subplot(1, 2, 1)
- plt.plot(np.arange(dataLen), np.abs(data))
- plt.title('Original Datas')
- # Butter-worth低通滤波图
- plt.subplot(1, 2, 2)
- plt.plot(np.arange(calcDataLen), np.abs(calcData))
- plt.title('Lowpass Butterworth Datas')
- plt.tight_layout()
- plt.show()
下面我们修改成C#代码
创建控制台程序,Nuget安装 CsvHelper 和 pythonnet
- public class Program
- {
- const string PathToPythonDir = "D:\\Python311";
- const string DllOfPython = "python311.dll";
- static void Main(string[] args)
- {
- // Butter-worth低通滤波
- ButterworthLowpass();
- }
- /// <summary>
- /// Butter-worth低通滤波
- /// </summary>
- static void ButterworthLowpass(int fs = 250, double filterCutoff = 50, int axis = 0, int order = 8)
- {
- try
- {
- Runtime.PythonDLL = Path.Combine(PathToPythonDir, DllOfPython);
- PythonEngine.Initialize();
- using (Py.GIL())
- {
- dynamic pd = Py.Import("pandas");
- dynamic np = Py.Import("numpy");
- dynamic plt = Py.Import("matplotlib.pyplot");
- dynamic signal = Py.Import("scipy.signal");
- dynamic data = pd.read_csv("clean_data_row.csv");
- int listLength = data.__len__();
- double wn = filterCutoff / (fs / 2.0);
- PyTuple baTuple = signal.butter(order, wn, "low");
- dynamic b = baTuple[0];
- dynamic a = baTuple[1];
- PyObject calcData = signal.filtfilt(b, a, data, axis: axis, padlen: listLength - 1);
- int calcLength = data.__len__();
- double[][] calcDataArray = calcData.As<dynamic[]>().Select(s => (double[])s.As<double[]>()).ToArray();
- plt.figure(figsize: new dynamic[] { 12, 6 });
- // 原始数据
- plt.subplot(1, 2, 1);
- plt.plot(np.arange(listLength), data);
- plt.title("Original Datas");
- // 低通滤波
- plt.subplot(1, 2, 2);
- plt.plot(np.arange(calcLength), calcData);
- plt.title("Butterworth Lowpas Datas");
- // 布局调整,防止重叠
- plt.tight_layout();
- // 显示图表
- plt.show();
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("报错了:" + e.Message + "\r\n" + e.StackTrace);
- }
- }
- /// <summary>
- /// 读取CSV数据
- /// </summary>
- /// <param name="filePath">文件路径</param>
- /// <returns>文件中数据集合,都是double类型</returns>
- static List<double[]> ReadCsvWithCsvHelper(string filePath)
- {
- using (var reader = new StreamReader(filePath))
- using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
- {
- var result = new List<double[]>();
- // 如果你的CSV文件有标题行,可以调用ReadHeader来读取它们
- csv.Read();
- csv.ReadHeader();
- while (csv.Read())
- {
- result.Add(new double[] {
- csv.GetField<double>(0),
- csv.GetField<double>(1),
- csv.GetField<double>(2),
- });
- }
- return result;
- }
- }
- }
以下是运行后结果,左边是原始数据折线图,右边是执行Butter-worth低通滤波后数据折线图
源代码:https://gitee.com/Karl_Albright/csharp-demo/tree/master/PythonnetDemo/PythonnetButterworth
C# pythonnet(3)_Butter-worth低通滤波的更多相关文章
- python实现直方图均衡化,理想高通滤波与高斯低通滤波
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...
- OpenCV计算机视觉学习(10)——图像变换(傅里叶变换,高通滤波,低通滤波)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 在数 ...
- 跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波
摘要:本文讲解基于傅里叶变换的高通滤波和低通滤波. 本文分享自华为云社区<[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波>,作者:eastmount . 一.高通滤波 傅 ...
- 图像处理------Mean Shift滤波(边缘保留的低通滤波)
一:Mean Shift算法介绍 Mean Shift是一种聚类算法,在数据挖掘,图像提取,视频对象跟踪中都有应用.本文 重要演示Mean Shift算法来实现图像的低通边缘保留滤波效果.其处理以后的 ...
- blur()低通滤波
blur()函数可以用标准化的盒式过滤器来平滑图像. C++ API: 相关官网资料: https://docs.opencv.org/3.4.1/d4/d86/group__imgproc__fil ...
- 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 1.cv2.dft(进行傅里叶变化) 2.np.fft.fftshift(将低频移动到图像的中心) 3.cv2.magnitude(计算矩阵的加和平方根) 4.np.fft.ifftshift(将低频和高频移动到原来位置) 5.cv2.idft(傅里叶逆变换)
1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法 ...
- OpenCV笔记(4)(直方图、傅里叶变换、高低通滤波)
一.直方图 用于统计图片中各像素值: # 画一个图像各通道的直方图 def draw_hist(img): color = ('b', 'g', 'r') for i, col in enumerat ...
- 带通滤波 matlab
巴特沃斯:1.带阻滤波器设计带阻滤波器指标:阻带上边界频率:5Kz:阻带下边界频率:7Kz:通带上边界频率:2Kz:通带下边界频率:9Kz:通带最大衰减:1dB:阻带最小衰减:20dB:设计程序如下: ...
- 学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波
本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤 ...
- [Voice communications] 声音的滤波
本系列文章主要是介绍 Web Audio API 的相关知识,以及 web语音通信 中会遇到的一些问题,阐述可能存在错误,还请多多斧正! 通过设备获取音频流会不可避免的渗入一些杂音,这些杂音可能来自你 ...
随机推荐
- Docker部署Scrapy-redis分布式爬虫框架(整合Selenium+Headless Chrome网页渲染)
前言 我的京东价格监控网站需要不间断爬取京东商品页面,爬虫模块我采用了Scrapy+selenium+Headless Chrome的方式进行商品信息的采集. 由于最近爬虫用的服务器到期,需要换到新服 ...
- CMS垃圾收集器小实验之CMSInitiatingOccupancyFraction参数
CMS垃圾收集器小实验之CMSInitiatingOccupancyFraction参数 背景 测试CMSInitiatingOccupancyFraction参数,测试结果和我的预期不符,所以花了一 ...
- CINN 中子图编译缓存机制
采用 「问-答」形式记录研读 CINN 开源框架的笔记 Q:CINN中子图编译的入口是在哪里? for (const auto& node_vec : clusters) { // <- ...
- 从零开始写 Docker(十四)---重构:实现容器间 rootfs 隔离
本文为从零开始写 Docker 系列第十四篇,实现容器间的 rootfs 隔离,使得多个容器间互不影响. 完整代码见:https://github.com/lixd/mydocker 欢迎 Star ...
- Splashtop调查显示:居家办公生产效率更高
抱歉,本文又是个吃瓜新闻.不得不发,你懂得~ 端午节要到了,应该请大家赛龙舟,吃粽子来着. 研究表明,即使文字顺序打乱,读者都还是能毫无障碍地读懂一篇文章.或许,大家只是一目十行的看一下主要关键词就可 ...
- 定了!航天科技AIRIOT 物联网平台新品发布会,6月6日北京见!
AIRIOT新品发布会预告 航天科技定档6月6日举办AIRIOT新品发布会,诚邀大家共同见证4.0版本的创新与赋能! 活动地点:北京雍和航星科技园. 现场参会请通过下方长图二维码进行报名! 亦可预约直 ...
- AIRIOT物联网低代码平台如何配置三菱PLC驱动?
三菱PLC驱动配置使用三菱Melsec协议(MC协议)从三菱PLC读取数据,仅支持以太网方式.三菱PLC都可以通过此协议访问,但是需要对PLC进行设置. AIRIOT物联网低代码平台如何配置三菱PLC ...
- mongodb单个服务部署
mongodb3.2.8安装步骤: 1.系统准备 (1)redhat或cnetos6.2以上系统 (2)系统开发包完整 (3)ip地址和hosts文件解析正常 (4)iptables防火墙&S ...
- 腾讯蓝鲸平台部署v5.1版本[去坑]
腾讯蓝鲸平台部署 1. 环境准备 #1. 基础优化 ulimit -SHn 655360 yum remove mysql-devel -y && yum install mysql- ...
- 《剑指offer - 题目1》
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...