MATLAB中使用白高斯噪声进行信号滤波

4

我有一个受高幅度白噪声影响的信号/向量,我想要得到一个二进制信号(0或1)。采样频率为10Hz。

我在MATLAB中应用了一个简单的二阶Butterworth滤波器,如下所示:

   x=sig_bruit_BB1;
   [b,a]=butter(2,0.1,'low');
   y = filter(b,a,x);
   plot(x)
   subplot(3,1,2)
   plot(y)
   for i=1:1:1820
       x=y(1,i);
       if (x<0.5)
           code(1,i)=0;
       else
           code(1,i)=1;
       end
   end
   subplot(3,1,3);
   plot(code)

正如您所看到的,我使用了一个for循环,假设任何小于0.5的信号都等于0,大于等于1的信号都等于1。

有人能验证一下这种方法是否适用于获取二进制信号吗?

谢谢。

2个回答

3

这种方法确实可以使用(不过,没有看到信号就很难判断是否是最佳方法)。然而,有一种更简单的阈值处理方式 - 代替循环,你可以直接编写以下代码:

code = x > 0.5;

我无法在这里发布任何图像文件 :( - user1948421

0

我建议实现一个额外的步骤,使阈值处理更加健壮:

  • 如果信号为0,则阈值应为0.5 + noise_amplitude(假设为0.6 0.7)
  • 如果信号为1,则阈值应为0.5 - noise_amplitude(假设为0.4 0.3)

这样,当信号因噪声而在单一阈值(0.5)周围跳动时,您就不会冒多次从0到1再到0的风险。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接