Имитация шума с характерным временем - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь сгенерировать синтетические данные для сигнала во временной области. Допустим, мой сигнал - прямоугольная волна, и у меня есть какой-то случайный шум. Я буду моделировать шум как гауссовский. Если я сгенерирую данные как вектор длины N, а затем добавлю к нему случайный шум, выбранный из нормального распределения среднего значения 0 и ширины 1, я получу грубое моделирование ситуации, которая меня волнует. Однако это добавляет шум с характерной шкалой времени, установленной частотой дискретизации. Я не хочу этого, поскольку на самом деле шум имеет гораздо более длительную шкалу времени, связанную с ним. Как эффективный способ генерировать шум с определенной шириной полосы?

Я пытался генерировать шум в каждой точке выборки, а затем использовать БПФ, чтобы вырезать частоты выше определенного значения. Однако это сильно ослабляет сигнал.

Моя идея была в основном:

noise = normrnd(0,1);
f = fft(noise);
f(1000:end) = 0;
noise = ifft(f);

Этот вид работает, но сильно ослабляет сигнал.

1 Ответ

0 голосов
/ 18 мая 2019

Довольно часто просто генерировать белый шум и фильтровать его. Часто используется БИХ, поскольку он дешевый, а фазы шума в любом случае случайны. Он ослабляет сигнал, но ничего не стоит его усиливать.

Вы также можете генерировать шум непосредственно с IFFT. В приведенном примере каждый коэффициент в выходных данных fft(noise) является случайной величиной, распределенной по Гауссу, поэтому вместо получения этих коэффициентов с помощью БПФ и обнуления тех, которые вам не нужны, вы можете просто установить те, которые вам нужны и IFFT, чтобы получить результирующий сигнал. Помните, что коэффициенты являются сложными, но действительная и мнимая части независимо распределены по Гауссиане.

...