含有高斯白噪声的正弦组合信号的产生

一、功能

产生含有高斯白噪声的正弦组合信号。

二、方法简介

含有高斯白噪声的\(M\)个正弦信号的组合为

\[x(n)=\sum_{i=1}^{M}A_{i}sin(2\pi f_{i}\Delta Tn + \theta_{i} ) + N(0,\sigma ^{2}) \]

其中\(A_i\)\(f_i\)\(\theta_i(i=1,2,...,M)\)分别是第\(i\)个正弦信号的振幅、频率和相位。\(\Delta T=1/f_s\)是采样间隔,\(f_s\)是采样频率(以赫兹为单位)。\(N(0,\sigma^2)\)是高斯白噪声,它的均值为零,方差为\(\sigma^2\)

三、使用说明

是用C语言实现产生含有高斯白噪声随机数的方法如下:

/************************************
	a       ---一维数组,长度为m,各正弦信号振幅。
	f       ---一维数组,长度为m,各正弦信号频率。
	ph      ---一维数组,长度为m,各正弦信号相位。
	m 		---正弦信号个数。
	fs 		---采样频率(用赫兹表示)。
	snr 	---信噪比(用dB表示)。
	seed    ---随机数种子
	x		---一维数组,长度n,存放所产生的数据。
	n 		---数据长度。
************************************/
#include "math.h"
#include "gauss.c"

void sinwn(double *a, double *f, double *ph, int m, double fs, double snr, long int seed, double *x, int n)
{
	int i;
	int k;
	double z;
	double pi;
	double snr;

	pi = 4.0 * atan(1.0);
	z = snr / 10.0;
	z = pow(10.0, z);
	z = 1.0 / (2 * z);
	snr = sqrt(z);
	for(i = 0; i < m; i++) {
		f[i] = 2 * pi * f[i] / fs;
		ph[i] = ph[i] * pi / 180;
	}
	for(k = 0; k < n; k++) {
		x[k] = 0.0;
		for(i = 0; i < m; i++)
			x[k] = x[k] + a[i] * sin(k * f[i] + ph[i]);
		x[k] = x[k] + snr * gauss(0.0, 1.0, &seed);
	}
}

gauss.c文件参见正态分布的随机数

posted @ 2019-10-16 20:06  Liam-Ji  阅读(1578)  评论(0编辑  收藏  举报