?? uniform.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 + -