急!!!请网友帮忙看看如何进行软件滤波?
请网友帮忙看看如何软件滤波?信号波形如下:
上图的两个波形是两种分别工作时的波形;
估计硬件滤波器是可以有很大的效果的;不过碍于成本和空间,想在软件上试试,
不知道可否达到比较理想的滤波效果?暂时还没有响应时间的具体要求:暂定大一点1秒吧。
先谢谢了。
平均值滤波。 目前就是16点平均效果不理想啊 楼主尝试下“EMD去噪”, 个人觉得这样做:根据收到的前几个值的,还看新收到的值是不是突然变化很大,那就可能是噪声,应该滤去。 kalo425 发表于 2014-9-19 14:04
楼主尝试下“EMD去噪”,
惭愧,不知道还有这个方法,看看去! 你有用信号时直流还是什么?关键是如何提取有用信号 Robin_King 发表于 2014-9-19 14:09
个人觉得这样做:根据收到的前几个值的,还看新收到的值是不是突然变化很大,那就可能是噪声,应该滤去。 ...
希望网友们可以说明这样做的理由,便于理解和运用
谢谢了 呵呵 asma 发表于 2014-9-19 14:18
你有用信号时直流还是什么?关键是如何提取有用信号
是直流信号,上面的波形是交流的噪声图 我表示连它的正常波形理应的趋势都看不出来 要是软件滤波,咋的也得加个fs/2 低通滤波器把。所以还不如做个好点的有源滤波器省事 干扰感觉还是很大的,用的单片机内部的10位AD和内部的基准2.048,内部的OPA
成本和空间,最重要的是成本啊,所以目前还是想软件解决一下的。 不知道,帮顶了{:lol:} 谢谢帮顶啊 asma 发表于 2014-9-19 14:26
要是软件滤波,咋的也得加个fs/2 低通滤波器把。所以还不如做个好点的有源滤波器省事 ...
你说的有道理,可惜原理不是俺设计的。 自己顶一下 帮顶一下,不过没看出趋势,要怎么滤?
这是一个 中值滤波 程序,他不改变原始值,只是剔掉异常值
本帖最后由 yigang 于 2014-9-19 17:13 编辑// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4 MEAN_FILTER(uChar LEV_OR_SURF)
{ // ,
// 5 POINT MEAN FILTER: ^
// |--------------> OUTPUT.
static uInt4 LEV_CAL_BUFF = { // Buffer of level value calculate.
0,0,0,0,0 };
static uInt4 SUR_CAL_BUFF = { // Buffer of INTERFACE value calculate.
0,0,0,0,0 };
uInt4NEW_VALUE, *pt, v_temp;
uInt2i, j;
if (LEV_OR_SURF == LEVEL) {
pt = (uInt4 *) &LEV_CAL_BUFF;
*(pt+4) = NEW_VALUE = lev_value_pulse; // Append data to buffer.
}
else{
pt = (uInt4 *) &SUR_CAL_BUFF;
*(pt+4) = NEW_VALUE = sur_value_pulse; // Append data to buffer.
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (*(pt+j) > *(pt+j+1)) {
v_temp = *(pt+j);
*(pt+j) = *(pt+j+1);
*(pt+j+1) = v_temp;
}
}
}
v_temp = *(pt+2); // New mean value.
for (i = 0; i < 3; i++)
*(pt+i) = *(pt+i+1); //shift data to new order
*(pt+3) = NEW_VALUE;
return v_temp;
} yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4 MEAN_FILTER( ...
多谢楼上网友!
俺上午也看了中值的原理感觉还不错。
中值滤波会有改善 不知道 是否可以完美解决,楼上网友应用过类似的波形 滤波吗? psbhero 发表于 2014-9-19 17:22
多谢楼上网友!
俺上午也看了中值的原理感觉还不错。
中值滤波会有改善 不知道 是否可以完美解决,楼上网 ...
我主要用在 防止偶然的 突发的 强干扰,这个程序是我自己编的,做过软件模拟,能处理连续3个异常值。。。 yigang 发表于 2014-9-19 17:25
我主要用在 防止偶然的 突发的 强干扰,这个程序是我自己编的,做过软件模拟,能处理连续3个异常值。。。 ...
是这样啊,我的波形干扰很频繁的,估计会有效果 呵呵 你这是什么信号 wb503059722 发表于 2014-9-19 22:42
你这是什么信号
请见9楼
学习 顶一下
呵呵
期待高手指点 呵呵 中值滤波! 自己接着
顶一下
期待高手指点 呵呵 yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4 MEAN_FILTER( ...
程序不错
不过楼主的头像更有 魅力
有韵味的老男人啊 取40个数,排序,去掉前后各4个,求和,右移5位。 powerplj 发表于 2014-9-22 10:10
程序不错
不过楼主的头像更有 魅力
共勉!!! yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4 MEAN_FILTER( ...
mark{:lol:} 有时间发一下滤波的效果图呗 楼主,我们的设备干扰比你的严重多了,用滑动平均+中值滤波 效果很不错,也不会损失有用的点。
另外,可以把数据发给我,我看看能不能帮你实现效果。 表示看不出来波形有什么问题,惭愧 WinExt 发表于 2014-9-22 10:25
楼主,我们的设备干扰比你的严重多了,用滑动平均+中值滤波 效果很不错,也不会损失有用的点。
另外,可以 ...
有QQ吗?
谢谢你和大家了 WinExt 发表于 2014-9-22 10:25
楼主,我们的设备干扰比你的严重多了,用滑动平均+中值滤波 效果很不错,也不会损失有用的点。
另外,可以 ...
你的干扰波形有吗? 有什么问题 采样出来的数据需要很精确吗?把芯片ADC采样频率选最低,然后10MS采样一次,8次取平均值。上面的两个可以根据你要求的数据实时性选择,看看实际效果。 limuzi2012 发表于 2014-9-22 10:58
采样出来的数据需要很精确吗?把芯片ADC采样频率选最低,然后10MS采样一次,8次取平均值。上面的两个可以根 ...
目前是16点平均 效果不行的
adc的采样分散性很大 D:\temp\Filter.jpg
WinExt 发表于 2014-9-22 11:07
看不到图片啊?
不好意思,总是上传不了图片,柒伍肆贰玖肆柒肆柒 WinExt 发表于 2014-9-22 11:41
不好意思,总是上传不了图片,柒伍肆贰玖肆柒肆柒
好的 我加一下 fir或者iir吧,想只滤成直流太容易了 gvgvfghv 发表于 2014-9-22 14:04
fir或者iir吧,想只滤成直流太容易了
听说过,不懂啊。
能说说这两个原理吗,为什么很容易啊,是专门干这个的吗(滤为直流,我的项目最好就是直流,稳稳的最好控制在1LSB内 呵呵)?
我是很便宜的单片机的 内存512字节,可否运行? 本帖最后由 gvgvfghv 于 2014-9-22 14:49 编辑
psbhero 发表于 2014-9-22 14:10
听说过,不懂啊。
能说说这两个原理吗,为什么很容易啊,是专门干这个的吗(滤为直流,我的项目最好就是 ...
你需要确定一个能忍受的响应时间,低通做得越低,信号越滞后,也就是说,如果输入信号变化,输出滞后多长时间你是能忍受的。fir和iir是两种最常用的数字滤波器。
看样子你的要求不是很高,用output=output*0.9+input*0.1就能做到。自己实际调整一下0.9和0.1的值,两个系数之和为1,output系数越大低通越低。 gvgvfghv 发表于 2014-9-22 14:45
你需要确定一个能忍受的响应时间,低通做得越低,信号越滞后,也就是说,如果输入信号变化,输出滞后多长 ...
1秒应该可以的,试试你的方法 谢谢啊 此帖可否继续讨论,高手继续 呵呵 46楼正解。上一阶滞后滤波。 如果低频应用多点平均滤波是很好的办法,几百点平均都可以试一下绝对平滑。 ad采样要根据采样速率前面电路上面加fs/2的低通滤波器,程序上面我一般就是去除最大最小几个值然后剩下的取平均值,每采一个点就这么做一次。效果还可以。 感觉硬件滤波会比较靠谱 yzpanhui 发表于 2014-9-25 07:51
感觉硬件滤波会比较靠谱
也同意硬件滤波,但楼主说不想改硬件了。 加权的移动平均平滑法,最新值取较小的加权 可以滑动滤波, 可以设置滤波深度, 即每次只取当次采样的 1/n MARK 记得论坛里面有人发过10种软件滤波算法及其实现。楼主搜索一下,总有一款适合你。 谢谢各位,感觉还是有必要加硬件滤波措施,不过我还想接着试试软件的效果 Excellence 发表于 2014-9-22 10:13
取40个数,排序,去掉前后各4个,求和,右移5位。
有效{:smile:} 不错,学习了 排序,抛头去尾,然后再平均
页:
[1]