4

高振幅ホワイト ガウス ノイズを含む信号/ベクトルがあり、バイナリ信号 (0 または 1) を取得しようとしています。サンプリング周波数は10Hzです。

次のように、MATLAB で単純な 2 次バターワース フィルターを適用しました。

   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 に等しく、0.5 より大きい信号は 1 に等しいと仮定してforループを実行しました。

この方法がバイナリ信号を取得するために適用可能かどうかを誰かが確認できますか?

ありがとう。

4

2 に答える 2

3

この方法は確かに機能します (ただし、シグナルを見なければ、これが最善の方法であるかどうかを判断するのは困難です)。ただし、しきい値処理にははるかに簡単な方法があります。ループの代わりに、単純に次のように記述できます。

code = x > 0.5;
于 2013-01-04T13:08:24.470 に答える
0

より堅牢なしきい値処理の方法にするために、もう 1 つの手順を実装することをお勧めします。

  • 信号が 0 の場合、しきい値は 0.5 + noise_amplitude (0.6 0.7 としましょう) にする必要があります。
  • 信号が 1 の場合、しきい値は 0.5 - noise_amplitude (0.4 0.3 としましょう) にする必要があります。

このようにすると、信号がノイズのために 1 つのしきい値 (0.5) 付近でジャンプしているときに、0 から 1 から 0 への複数のジャンプが発生するリスクがなくなります。

于 2013-11-08T11:07:54.483 に答える