zoukankan      html  css  js  c++  java
  • 含有高斯白噪声的正弦组合信号的产生

    一、功能

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

    二、方法简介

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

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

    其中(A_i)(f_i)( heta_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文件参见正态分布的随机数

  • 相关阅读:
    python
    python
    python
    Django学习手册
    python
    Django学习手册
    [ThinkPHP] 独立分组配置,坑!!!
    vim 代码片段:通过vundle插件管理器安装ultisnips |centos6.5|vim7.2
    CESHI
    thinkphp实现功能:验证码
  • 原文地址:https://www.cnblogs.com/liam-ji/p/11683999.html
Copyright © 2011-2022 走看看