1. 高斯白噪声:

一个噪声、幅度分布服从高斯分布,功率谱密度均匀分布。简而言之,从幅值的角度来看,其符合高斯(正态)分布,且每个点噪声孤立,与其它点无关。

2. 产生方法

(1)调用gauss.h便可生成白噪声数据(关于uinform函数,请查看这里

#ifndef GAUSS_H
#define GAUSS_H
 
#include "uinform.h"
 
double gauss(double mean, double sigma, long int *s);
 
double gauss(double mean, double sigma, long int *s)
{
    int i;
    double x,y;
    for(x=0,i=0;i<12;i++)
    {
        x+=uinform(0.0,1.0,s);
    }
    x=x-6.0;
    y=mean+x*sigma;
    return(y);
}  
#endif

(2)调用gauss函数例程:

#include <stdio.h>
#include "gauss.h"

int main(void)
{
    int i,j;
    long int s;
    double x;
    s=13579;
    FILE *fp;   //存储最终计算值
    fp=fopen("data.dat","w");   //打开文本
    for(i=0;i<10;i++)
    {
        for(j=0;j<5;j++)
        {
            x=gauss(0.0,1.0,&s);
            printf("%13.7f",x);
            fprintf(fp,"%.7lf\n",x);    //存储数值
        }
        printf("\n");
    }
    fclose(fp);    //关闭文本
    return 0;
 }

(3)根据计算数据,用Qtiplot工具绘制幅值曲线,效果如下:

3. 产生含高斯白噪声的混合信号:

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

(1)香农公式:

在使用高斯白噪声时,考虑一个关于传送速率C的问题:

C=B*log₂(1+S/N) (bit/s)

B是码元速率的极限值(Nyquist指出:B=H,H为信道带宽,单位Banud),S信号功率,N噪声功率。由于信噪比,S/N,常以分贝表示,所以: S/N=10^(SNR/10)

(2)实现例程(源码:点击下载附件):

(3)sinwn.h程序介绍如下:

#ifndef SINWN_H_
#define SINWN_H_

#include #include "gauss.h"

void sinwn(double a[], double f[],double ph[],int m,double fs,
        double snr, long seed, double x[], int n);

void sinwn(double a[], double f[],double ph[], int m,double fs,
        double snr, long seed, double x[], int n)
{
    int i,k;
    double z,pi,nsr;
    pi=4.0*atan(1.0);
    z=snr/10.0;
    z=pow(10.0,z);
    z=1.0/(2*z);
    nsr = 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]+nsr*gauss(0.0,1.0,&seed);
    }
}

#endif /* SINWN_H_ */

(4)函数运行结果,前32个数据:

 

(5)目录下生成sinwn2.dat,并对数据进行处理:

下一篇:《数字信号的产生(4)-指数分布随机数》

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:处理算法,正态分布,信号处理