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

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

Я применил простой фильтр Butterworth 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) из-за шума.

licensed under cc by-sa 3.0 with attribution.