声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1600|回复: 6

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

[复制链接]
发表于 2008-10-29 03:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
问题是这样的:
已知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([0 zer 0]);
     debz = find(dz == 1);
     finz = find(dz == -1)-1;
     indz = round((debz+finz)/2);
   else
     indz = iz;
   end
   indzer = sort([indzer indz]);
end
pzero=indzer;
回复
分享到:

使用道具 举报

 楼主| 发表于 2008-10-30 05:09 | 显示全部楼层
没人感兴趣? 给大家发个我的结果 抛下砖
1.JPG
发表于 2008-11-30 15:07 | 显示全部楼层

回复 沙发 leeking30 的帖子

我也在做类似的一个东西
觉得还是先滤波的好
用matlab里得simulink
很简单的
不知道你为什么不肯滤波
发表于 2008-11-30 21:25 | 显示全部楼层
建议楼主考虑列资讯详尽点, 如此或许别人亦可试试!
如simulink中相关设定, 理论值 ...
 楼主| 发表于 2008-12-2 00:50 | 显示全部楼层
目的就是不用滤波器, 用滤波器麻烦啊,工程出发,越简单越好!
这个也没个什么理论值的,挑出来的点 自己能接受就好了! 也没有用什么simulink中的滤波器,就是自己写个小程序!
我上面的信号就是用个 光滑信号 加上个 白噪声信号进行模拟的,
但是还有些问题如噪声的干扰造成一个地方形成多个零点如何进行取舍的问题,还有待解决,我目前使用连续n个采样点内有大于1个零点,只考虑第一个零点,需要自己设定这个n值,  如果能给出这个n值的判定准则(自动确定)就好了

[ 本帖最后由 leeking30 于 2008-12-2 00:56 编辑 ]
发表于 2008-12-2 10:18 | 显示全部楼层
如果不想用滤波的话,可以对数据作平均运算,一样可得到较光滑的曲线。
 楼主| 发表于 2008-12-4 16:40 | 显示全部楼层
数据作平均运算? 只有1组数据怎么平均啊?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-11 19:22 , Processed in 0.078583 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表