Фильтрация сигнала с белым гауссовским шумом в MATLAB

У меня есть сигнал / вектор с высоким амплитудным белым гауссовским шумом, и я пытаюсь получить двоичный сигнал (0 или 1). Частота дискретизации составляет 10 Гц.

Я применил простой фильтр Баттерворта 2-го порядка в MATLAB следующим образом;

   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.

Может кто-нибудь проверить, применим ли этот метод для получения двоичного сигнала?

Благодарю.

2 ответа

Этот метод, безусловно, работает (хотя, не видя сигнала, трудно судить, является ли это наилучшим из возможных подходов). Тем не менее, существует гораздо более простой способ для пороговых значений - вместо цикла вы можете просто написать

code = x > 0.5;

Я бы предложил сделать еще один шаг, чтобы сделать его еще более надежным способом порогового значения:

  • если сигнал в 0, порог должен быть 0,5 + noise_amplitude (скажем, 0,6 0,7)
  • если сигнал равен 1, пороговое значение должно быть 0,5 - noise_amplitude (скажем, 0,4 0,3)

Таким образом, вы не рискуете сделать несколько прыжков от 0 до 1 до 0, когда сигнал прыгает выше единого порога (0,5) из-за шума.

Другие вопросы по тегам