⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uniform.cpp

📁 产生带白噪声的正弦信号组合
💻 CPP
字号:
#include <stdio.h>
#include <math.h>
double uniform(double a,double b,long int *seed)//均匀分布
{   //a,b为上下限,seed为随机数种子
	double t;  
	*seed=2045*(*seed)+1;//产生随机数
	*seed=*seed-(*seed/1048576)*1048576;
	t=(*seed)/1048576.0;
	t=a+(b-a)*t;
	return(t);
}
double gauss(double mean,double sigma,long int *s)//正态分布
{   //mean为正态分布的期望,sigma为方差,s为随机数种子
	int i;
	double x,y;
	for(x=0,i=0;i<12;i++)
		x+=uniform(0,1,s);
	x=x-6.0;
	y=mean+x*sigma;
	return(y);
}
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.0;
	}
	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);
	}
}
int main()
{
	int i,m,n;
	long seed;
	double fs,snr,x[200];
	static double a[1]={1};
	static double f[1]={1};
    static double ph[1]={45};
    FILE *fp;
	m=1;
	n=200;
	seed=13579;
	fs=150;
    snr=1000;
	float dd;
	sinwn(a,f,ph,m,fs,snr,seed,x,n);
	for(i=0;i<200;i++)
	{
		printf("    %10.7lf",x[i]);
		if(i%4==3)
			printf("\n");
	}
	fp=fopen("sinwn1.dat","w+");
		for(i=0;i<n;i++)
		{
			fprintf(fp,"%12.7lf\n",x[i]);
		}
	fclose(fp);
    
/*	if((fp=fopen("sinwn1.dat","r+"))==NULL)
		printf("can't open");
	while(fscanf(fp,"%f",&dd)!=EOF)
	{
		printf("%f\n",dd);
	}*/
	getchar();
	//fclose(fp);
	return 0;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -