цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Генератор аддитивного белого гауссовского шума



Генератор аддитивного белого гауссовского шума

Автор: Mike(admin) от 22-05-2014, 11:20

Генерация гауссовского шума бывает необходима для задач моделирования и генерации случайных чисел в различных приложениях. И для этих целей полезно иметь универсальную и удобную функцию.


Представленная функция, написанная на языке C, генерирует сэмпл аддитивного белого гауссовского шума при каждом вызове. Ее красота заключается в простоте. Созданный сэмпл будет иметь нулевое среднее и стандартное отклонение, равное 1. Тем не менее, программист может масштабировать выходные сэмплы, изменяя стандартное отклонение для генерации различных профилей шума. Для того, чтобы осуществить такое масштабирование достаточно просто умножить сэмпл на выбранное стандартное отклонение.



#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define PI 3.1415926536


double AWGN_generator()
{/* Генерация аддитивного белого гауссовского шума с нулевым средним и стандартным отклонением, равным 1. */
 
  double temp1;
  double temp2;
  double result;
  int p;

  p = 1;

  while( p > 0 )
  {
        temp2 = ( rand() / ( (double)RAND_MAX ) ); /* функция rand() генерирует
                                                       целое число между 0 и  RAND_MAX,
                                                       которое определено в stdlib.h.
                                                   */

    if ( temp2 == 0 )
    {// temp2 >= (RAND_MAX / 2)
      p = 1;
    }// конец if
    else
    {// temp2 < (RAND_MAX / 2)
       p = -1;
    }// конец else

  }// конец while()

  temp1 = cos( ( 2.0 * (double)PI ) * rand() / ( (double)RAND_MAX ) );
  result = sqrt( -2.0 * log( temp2 ) ) * temp1;

  return result;        // возвращаем сгенерированный сэмпл

}// конец AWGN_generator()



Перевод © digitrode.ru


<Источник>




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
  • Theoristos

  • 21 июня 2014 11:29
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Лажа. Преобразование Бокса-Мюллера выглядит не так.