在MATLAB中用白高斯噪声滤波信号

时间:2013-01-04 12:00:37

标签: matlab filter noise morse-code

我有一个高振幅白高斯噪声的信号/矢量,我正试图得到一个二进制信号(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)

如您所见,我为循环做了一个,假设任何小于0.5的信号等于0且大于等于1.

有人可以验证此方法是否适用于获取二进制信号?

感谢。

2 个答案:

答案 0 :(得分:3)

这种方法当然有效(虽然没有看到信号,但很难判断它是否是最好的方法)。但是,有一种更简单的阈值处理方式 - 您可以简单地编写

而不是循环
code = x > 0.5;

答案 1 :(得分:0)

我建议再实施一步,使其成为一种更强大的阈值处理方式:

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

通过这种方式,当信号由于噪声而在单个阈值(0.5)附近跳跃时,您不会冒险从0到1跳转到0。