leeking30 发表于 2008-10-29 03:17

和大家讨论个有关找一组含噪声信号数据的零点问题

问题是这样的:
已知2组数据A,B
第一组数据A (简单无噪声信号)
第二组数据B=A+C(简单无噪声信号)+D(很小的噪声信号)
A与C信号的零点很容易找出来,现在想找见B信号中的零点, 问题是由于噪声信号D的影响,用传统方法找零点会在B信号零点周围找见很多零点(噪声的影响),
能不能用个简单的方法消除噪声D的影响,从而大概找见B的零点,不想用什么滤波,分解。。复杂的算法,就想有个简单点的办法解决?
我的想法是 将噪声的最大值作为零点的判断位置,可这样 有可能造成选出的零点与实际的零点位置偏离的比较大, 还有个想法是从信噪比的角度出发,不过还没考虑成熟
希望大家一起想想,越简单越好 — 一切从工程角度出发!
附个找光滑函数零点的函数(论坛上的资源,挺好用的,大家有兴趣加个噪声信号想想办法)
function pzero=fz(x)% 读入数据x
m = length(x);
x1=x(1:m-1);
x2=x(2:m);
indzer = find(x1.*x2<0);
%%
n=length(indzer);
for i=1:n
    if abs(x(indzer(i)))>abs(x(indzer(i)+1))
      indzer(i)=indzer(i)+1;
    end
end
%%
if any(x == 0)
   iz = find( x==0 );
   indz = [];
   if any(diff(iz)==1)
   zer = x == 0;
   dz = diff();
   debz = find(dz == 1);
   finz = find(dz == -1)-1;
   indz = round((debz+finz)/2);
   else
   indz = iz;
   end
   indzer = sort();
end
pzero=indzer;

leeking30 发表于 2008-10-30 05:09

没人感兴趣? 给大家发个我的结果 抛下砖

ludian 发表于 2008-11-30 15:07

回复 沙发 leeking30 的帖子

我也在做类似的一个东西
觉得还是先滤波的好
用matlab里得simulink
很简单的
不知道你为什么不肯滤波

ChaChing 发表于 2008-11-30 21:25

建议楼主考虑列资讯详尽点, 如此或许别人亦可试试!
如simulink中相关设定, 理论值 ...

leeking30 发表于 2008-12-2 00:50

目的就是不用滤波器, 用滤波器麻烦啊,工程出发,越简单越好!
这个也没个什么理论值的,挑出来的点 自己能接受就好了! 也没有用什么simulink中的滤波器,就是自己写个小程序!
我上面的信号就是用个 光滑信号 加上个 白噪声信号进行模拟的,
但是还有些问题如噪声的干扰造成一个地方形成多个零点如何进行取舍的问题,还有待解决,我目前使用连续n个采样点内有大于1个零点,只考虑第一个零点,需要自己设定这个n值,如果能给出这个n值的判定准则(自动确定)就好了

[ 本帖最后由 leeking30 于 2008-12-2 00:56 编辑 ]

songzy41 发表于 2008-12-2 10:18

如果不想用滤波的话,可以对数据作平均运算,一样可得到较光滑的曲线。

leeking30 发表于 2008-12-4 16:40

数据作平均运算? 只有1组数据怎么平均啊?
页: [1]
查看完整版本: 和大家讨论个有关找一组含噪声信号数据的零点问题