有趣生活

当前位置:首页>科技>差频技术的应用IIR工频干扰50Hz数字陷波器在Android系统的实践

差频技术的应用IIR工频干扰50Hz数字陷波器在Android系统的实践

发布时间:2026-06-22阅读(1)

导读功能介绍:实现一款简易AndriodApp,具备对信号数据进行50Hz陷波处理的能力,并将结果绘制成波形图,支持滤波器类型包括:巴特沃斯、切比雪夫Ⅰ型、切比....功能介绍:实现一款简易Andriod App,具备对信号数据进行50Hz陷波处理的能力,并将结果绘制成波形图,支持滤波器类型包括:巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型准备事项:Matlab,AndriodStudio,一台安卓手机设计与实现:

1、Step1:设计滤波器

通过MATLAB仿真设计滤波器,并导出滤波器参数,具体的:打开MATLAB中的FDA Tool(Filter Design & Analysis),设置好参数,点击"Design Filter"即可:

Matlab设计滤波器示例

​点击工具栏中"Targets"即可以头文件格式导出滤波器参数(如xxx.h),点击“Edit”可切换单阶节或双阶节(默认),切换选择单阶节,导出滤波器参数:

//巴特沃斯滤波器参数static final double[] BUTTER_B = { 0.9899359622368, -7.532029056607, 25.45032400023, -49.84830016096, 61.88022925884, -49.84830016096, 25.45032400023, -7.532029056607, 0.9899359622368}; // 传递函数分子数组static final double[] BUTTER_A = { 1, -7.589362101251, 25.57922249866, -49.97416107749, 61.87976151085, -49.72205392803, 25.32179196493, -7.475081328367, 0.9799732093296}; // 传递函数分母数组

2、Step2:根据直接型IIR滤波器原理,设计滤波器算法

传递函数:

传递函数

​差分方程:

差分方程

50Hz陷波算法流程【重点难点】,基于差分方程的递推算法(其中:length为数据总数;i为滤波器阶数)

50Hz陷波器算法流程

​3、Step3:Andriod程序的编写

主要实现思路:继承异步类AsyncTask,编写异步任务,异步执行滤波操作

/*** 异步进行50Hz带阻滤波*/private class execFilterTask extends AsyncTask<Integer, void, String> {private ProgressDialog dialog = null;private LineGraphView resView = null; // 声明一个绘图类对象@Overrideprotected void onPreExecute() { // 执行后台任务前,显示一个进度条对话框,提示用户super.onPreExecute();dialog = DialogUtil.showDialog(BandStopActivity.this, "正在进行滤波处理", "请稍候……");}@Overrideprotected String doInBackground(Integer... params) { // 执行后台任务double[] result = null;result = DealFilter(params); // 滤波函数resView = displayResult(result); // 根据滤波后的数据计算返回一个绘图类对象return null;}@Overrideprotected void onPostExecute(String result) { // 后台任务结束后,将绘图类对象动态加载到UI页面super.onPostExecute(result);llResult.setVisibility(View.VISIBLE);//移除之前所有子控件,才能重新写入一个新的LineGraphViewllResult.removeAllViews();LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);llResult.addView(resView, lp);DialogUtil.dismiss(dialog);btnSave.setVisibility(View.VISIBLE);}}

50Hz陷波器函数核心代码:

double[] dealResult = null;double x0, y0 = 0;double[] w0 = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; // 缓冲滤波运算中的中间值dealResult = new double[arrRes.length]; // 创建新数组存放滤波后数据/*** 巴特沃斯50Hz陷波器算法*/if(type == BUTTERWORTH) {for(int i = 0; i < arrRes.length; i ) {x0 = arrRes[i]; // 输入信号// 递推计算中间值w0[0] = BUTTER_A[0] * x0 - BUTTER_A[1] * w0[1] - BUTTER_A[2] * w0[2] - BUTTER_A[3] * w0[3] - BUTTER_A[4] * w0[4] - BUTTER_A[5] * w0[5] - BUTTER_A[6] * w0[6] - BUTTER_A[7] * w0[7] - BUTTER_A[8] * w0[8]; // 根据中间值递推计算出最后的数据y0 = BUTTER_B[0] * w0[0] BUTTER_B[1] * w0[1] BUTTER_B[2] * w0[2] BUTTER_B[3] * w0[3] BUTTER_B[4] * w0[4] BUTTER_B[5] * w0[5] BUTTER_B[6] * w0[6] BUTTER_B[7] * w0[7] BUTTER_B[8] * w0[8];// 将每个处理后的数据存入另外的数组中dealResult[i] = y0; // 递推赋值w0[8] = w0[7];w0[7] = w0[6];w0[6] = w0[5];w0[5] = w0[4];w0[4] = w0[3];w0[3] = w0[2];w0[2] = w0[1];w0[1] = w0[0];}}

落地成果:对信号做50Hz的陷波​

** ​​​源码已开源至Github和CSDN,下载链接:

GitHub - vroy007/MoveDSP: Android平台的数字信号处理软件,可对数字信号做50Hz陷波处理,以及音频信号实时快速傅里叶变换

Android平台的数字信号处理软件_安卓数字信号处理,安卓数字信号-Android代码类资源-CSDN文库

TAGS标签:  差频  技术  应用  工频  干扰  差频技术的应用IIR

Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图