数字信号的产生(3)-高斯白噪声的产生
admin 于 2014年05月13日 发表在 机器学习笔记
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,并对数据进行处理: