用C語(yǔ)言實(shí)現(xiàn)瑞利分布,萊斯分布,高斯分布的分布函數(shù)
程序1
這個(gè)程序就是你要的。
# include "stdio.h"
# include "math.h"
# include "stdlib.h"
# include "math.h"
# include "dos.h"
# define MAX_N 3000 /*這個(gè)值為N可以定義的最大長(zhǎng)度*/
# define N 100 /*產(chǎn)生隨機(jī)序列的點(diǎn)數(shù),注意不要大于MAX_N*/
/*產(chǎn)生均勻分布的隨機(jī)變量*/
void randa(float *x,int num);
/*產(chǎn)生瑞利分布的隨機(jī)變量*/
void randr(float *x,int num);
/*產(chǎn)生標(biāo)準(zhǔn)高斯分布的隨機(jī)變量*/
void randn(float *x,int num);
/*產(chǎn)生萊斯分布的隨機(jī)變量*/
void randl(float *x, float a, float b, int num);
void fshow(char *name,float *x,int num);
main()
{
float x[N];
int i;
/*
randa(&x,N);
randr(&x,N);
randl(&x,10,10,N);
*/
randn(&x,N);
/*此時(shí)x[N]就是所需要的高斯分布的序列*/
/*顯示該序列*/
fshow("x",&x,N);
getch();
}
void randa(float *x,int num)
{
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x[i]=rand();
x[i]=x[i]/32768;
}
}
void randr(float *x,int num)
{
float x1[MAX_N];
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x1[i]=rand();
x[i]=x1[i]/32768;
x[i]=sqrt(-2*log(x[i]));
}
}
void randn(float *x,int num)
{
float x1[MAX_N],x2[MAX_N];
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x1[i]=rand();
x2[i]=rand();
x1[i]=x1[i]/32768;
x2[i]=x2[i]/32768;
x[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);
}
}
void randl(float *x, float a, float b, int num)
{
float x1[MAX_N],x2[MAX_N];
float temp[MAX_N];
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x1[i]=rand();
x2[i]=rand();
x1[i]=x1[i]/32768;
x2[i]=x2[i]/32768;
temp[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);
x2[i]=sqrt(-2*log(x1[i]))*sin(x2[i]*M_PI);
x1[i]=temp[i];
x[i]=sqrt((a+x1[i])*(a+x1[i])+(b+x2[i])*(b+x2[i]));
}
}
void fshow(char *name,float *x,int num)
{
int i,sign,L;
float temp;
printf("\n");
printf(name);
printf(" = ");
L=6;
/*按照每行6個(gè)數(shù)據(jù)的格式顯示*/
for(i=0;i<num;i++)
{
temp=i/L;
sign=temp;
if((i-sign*L)==0) printf("\n");
if(x[i]>0) printf(" %f ",x[i]);
else printf("%f ",x[i]);
}
}
程序 2
以下程序加入了圖形顯示的效果,因此更加直觀,你可以參考一下。
/* 作者 Leo_nanjing
時(shí)間 2008.5.10
功能 生成各種分布的隨機(jī)變量,并顯示
*/
# include "stdio.h"
# include "math.h"
# include "graphics.h"
# include "math.h"
# include "dos.h"
# define MAX_N 3000
# define N 1000
void randa(float *x,int num);
void randr(float *x,int num);
void randn(float *x,int num);
void randl(float *x, float a, float b, int num);
void fshow(char *name,float *x,int num);
/*用于圖形顯示的部分*/
void init_graphic(unsigned color);
void plotxy(float *x, float *y, int num,int mode);
void plot(float *y,int num, int mode);
float max(float *x, int num);
float min(float *x, int num);
/*畫(huà)出該隨機(jī)序列的分布函數(shù)曲線*/
void plotpdf(float *x,int num,int part,int mode);
main()
{
float x[N];
int i;
randn(&x,N);
fshow("x",&x,N);
getch();
/*以下為圖形顯示部分*/
init_graphic(0);
/*顯示隨機(jī)序列*/
plot(&x,N,1);
getch();
/*顯示其分布函數(shù)*/
plotpdf(&x,N,20,0);
getch();
}
void randa(float *x,int num)
{
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x[i]=rand();
x[i]=x[i]/32768;
}
}
void randr(float *x,int num)
{
float x1[MAX_N];
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x1[i]=rand();
x[i]=x1[i]/32768;
x[i]=sqrt(-2*log(x[i]));
}
}
void randn(float *x,int num)
{
float x1[MAX_N],x2[MAX_N];
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x1[i]=rand();
x2[i]=rand();
x1[i]=x1[i]/32768;
x2[i]=x2[i]/32768;
x[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);
}
}
void randl(float *x, float a, float b, int num)
{
float x1[MAX_N],x2[MAX_N];
float temp[MAX_N];
int i;
struct time stime;
unsigned seed;
gettime(&stime);
seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
srand(seed);
for(i=0;i<num;i++)
{
x1[i]=rand();
x2[i]=rand();
x1[i]=x1[i]/32768;
x2[i]=x2[i]/32768;
temp[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);
x2[i]=sqrt(-2*log(x1[i]))*sin(x2[i]*M_PI);
x1[i]=temp[i];
x[i]=sqrt((a+x1[i])*(a+x1[i])+(b+x2[i])*(b+x2[i]));
}
}
void fshow(char *name,float *x,int num)
{
int i,sign,L;
float temp;
printf("\n");
printf(name);
printf(" = ");
L=6;
for(i=0;i<num;i++)
{
temp=i/L;
sign=temp;
if((i-sign*L)==0) printf("\n");
if(x[i]>0) printf(" %f ",x[i]);
else printf("%f ",x[i]);
}
}
/*以下為圖形顯示的函數(shù)*/
void init_graphic(unsigned color)
{
int graphicdriver,graphicmode;
graphicdriver=DETECT;
graphicmode=1;
initgraph(&graphicdriver,&graphicmode,"E:\\turboc2\\");
setbkcolor(color);
}
void plotxy(float *x, float*y, int num,int mode)
{
int i;
float max_x,max_y,min_x,min_y;
float x0,y0,x1,y1;
clrscr(0);
cleardevice();
setbkcolor(0);
max_x=max(x,num);
max_y=max(y,num);
min_x=min(x,num);
min_y=min(y,num);
setlinestyle(0,2,1);
line(65,35,65,445);
line(65,445,575,445);
setlinestyle(3,0,1);
line(65,35,575,35);
line(575,35,575,445);
setlinestyle(0,2,1);
if(max_x==min_x)
x0=320;
else
x0=(x[0]-min_x)*500/(max_x-min_x)+70;
if(max_y==min_y)
y0=240;
else
y0=480-((y[0]-min_y)*400/(max_y-min_y)+40);
if(mode==0) circle(x0,y0,2);
for(i=1;i<num;i++)
{
if(max_x==min_x)
x1=320;
else
x1=(x[i]-min_x)*500/(max_x-min_x)+70;
if(max_y==min_y)
y1=240;
else
y1=480-((y[i]-min_y)*400/(max_y-min_y)+40);
if(mode==0) circle(x1,y1,2);
line(x0,y0,x1,y1);
x0=x1;y0=y1;
}
printf("\n\n");
printf("%f",max_y);
printf("\n\n\n\n\n\n\n\n\n\n");
printf("\n\n\n");
printf("%f",(max_y+min_y)/2);
printf("\n\n\n\n\n\n\n\n\n\n");
printf("\n\n");
printf("%f",min_y);
printf("\n %f",min_x);
printf(" ");
printf("%f",(max_x+min_x)/2);
printf(" ");
printf("%f",max_x);
}
void plot(float*y, int num,int mode)
{
int i;
float max_x,max_y,min_x,min_y;
float x0,y0,x1,y1;
float x[MAX_N];
clrscr(0);
cleardevice();
setbkcolor(0);
for(i=0;i<num;i++) x[i]=i+1;
max_x=max(x,num);
max_y=max(y,num);
min_x=min(x,num);
min_y=min(y,num);
setlinestyle(0,2,1);
line(65,35,65,445);
line(65,445,575,445);
setlinestyle(3,0,1);
line(65,35,575,35);
line(575,35,575,445);
setlinestyle(0,2,1);
if(max_x==min_x)
x0=320;
else
x0=(x[0]-min_x)*500/(max_x-min_x)+70;
if(max_y==min_y)
y0=240;
else
y0=480-((y[0]-min_y)*400/(max_y-min_y)+40);
if(mode==0) circle(x0,y0,2);
for(i=1;i<num;i++)
{
if(max_x==min_x)
x1=320;
else
x1=(x[i]-min_x)*500/(max_x-min_x)+70;
if(max_y==min_y)
y1=240;
else
y1=480-((y[i]-min_y)*400/(max_y-min_y)+40);
if(mode==0) circle(x1,y1,2);
line(x0,y0,x1,y1);
x0=x1;y0=y1;
}
printf("\n\n");
printf("%f",max_y);
printf("\n\n\n\n\n\n\n\n\n\n");
printf("\n\n\n");
printf("%f",(max_y+min_y)/2);
printf("\n\n\n\n\n\n\n\n\n\n");
printf("\n\n");
printf("%f",min_y);
printf("\n %f",min_x);
printf(" ");
printf("%f",(max_x+min_x)/2);
printf(" ");
printf("%f",max_x);
}
void plotpdf(float *x,int num,int part,int mode)
{
int i,j;
float max_x,min_x,round,deltax,up,down,sum;
float xl[MAX_N],yl[MAX_N];
sum=0;
max_x=max(x,num);
min_x=min(x,num);
round=max_x-min_x;
deltax=round/part;
xl[0]=min_x;
for(i=1;i<=part;i++)
{
xl[i]=min_x+deltax*i;
yl[i-1]=0;
up=xl[i];
down=xl[i-1];
for(j=0;j<num;j++)
{
if((x[j]<up) && (x[j]>=down)) yl[i-1]=yl[i-1]+1;
}
yl[i-1]=yl[i-1]/num/deltax;
}
for(i=0;i<part;i++) sum=sum+yl[i];
plotxy(&xl,&yl,part,mode);
}
float max(float *x, int num)
{
int i;
float max;
max=x[0];
for(i=1;i<num;i++)
{
if(x[i]>max) max=x[i];
}
return max;
}
float min(float *x, int num)
{
int i;
float min;
min=x[0];
for(i=1;i<num;i++)
{
if(x[i]<min) min=x[i];
}
return min;
}
請(qǐng)問(wèn)什么叫瑞利分布和萊斯分布
瑞利分布是最常見(jiàn)的用于描述平坦衰落信號(hào)接收包絡(luò)或獨(dú)立多徑分量接受包絡(luò)統(tǒng)計(jì)時(shí)變特性的一種分布類(lèi)瑞利分布 型。兩個(gè)正交高斯噪聲信號(hào)之和的包絡(luò)服從瑞利分布。在概率論與數(shù)理統(tǒng)計(jì)領(lǐng)域,萊斯分布(Rice distribution或Rician distribution)是一種連續(xù)概率分布,以美國(guó)科學(xué)家斯蒂芬·萊斯(en:Stephen O. Rice)...
nakagami分布和瑞利分布的區(qū)別
2)瑞利分布的特點(diǎn):瑞利分布是一個(gè)均值為0,方差為sigma^2 的平穩(wěn)窄帶高斯過(guò)程。3)萊斯信道:當(dāng)接收信號(hào)中有視距傳播的直達(dá)波信號(hào)時(shí),視距信號(hào)成為主接收信號(hào)分量,同時(shí)還有不同角度隨機(jī)到達(dá)的多徑分量疊加在這個(gè)主信號(hào)分量上,這時(shí)的接收信號(hào)就呈現(xiàn)為萊斯分布,甚至高斯分布。但當(dāng)主信號(hào)減弱達(dá)到與其他多徑...
多徑衰落各徑平均功率以什么形式遞減?
那么移動(dòng)通信中的多徑快衰落具有怎樣的分布特性呢?如果發(fā)射信號(hào)是單一頻率的信號(hào)Acosωct,可能存在的直射波和經(jīng)多個(gè)路徑傳播的反射波到達(dá)接收點(diǎn)時(shí)形成的合成信號(hào)為:式中:Ri(t)為第i條路徑的接收信號(hào)幅度;τi(t)為第i條路徑的傳輸時(shí)間;i(t)=c(t)τi(t)。事實(shí)上,Ri(t)和i(t)隨時(shí)間的...
與瑞利分布相似的分布函數(shù)有哪些?望指導(dǎo)!!!
萊斯分布,在一定條件下,萊斯分布將退化成瑞利分布。它的概率密度函數(shù)和高斯分布也有些像
matlab產(chǎn)生瑞利分布的概率密度函數(shù)的命令為raylpdf(),有沒(méi)有類(lèi)似的命令...
這是我找到的,你看看 clear,clc A=1;sigma=1;fx=@(sigma,x,A)x.\/(sigma^2).*exp(-(A.^2+x.^2).\/(2*sigma))*besseli(A.^2,2.027);x=0:.01:10;y=fx(sigma,x,A);figure(1)plot(x,y,'r-')grid on。
一文講透無(wú)線信道衰落:快衰落與慢衰落
瑞利衰落,多路徑信號(hào)疊加,其幅度服從瑞利分布,如同自然界的隨機(jī)性;而萊斯衰落則涉及線性傳播,LoS和NLoS功率的比例影響其分布特征,展示了衰落的多樣性。通過(guò)比較瑞利信道模型(-40dB的典型)與高斯分布(>15dB的特性),我們能更深入地理解不同衰落模型對(duì)通信性能的影響。無(wú)線信道的復(fù)雜性揭示了通信...
如何區(qū)分瑞利分布 廣義瑞利分布 萊斯分布 貝塞爾函數(shù) 超越方程
萊斯分布實(shí)際上可以理解為主信號(hào)與服從瑞利分布的多徑信號(hào)分量的和,萊斯分布也稱(chēng)作廣義瑞利分布,當(dāng)接收信號(hào)幅度較小(信噪比差)萊斯分布轉(zhuǎn)化為瑞利分布,見(jiàn)現(xiàn)代通信原理與技術(shù)P34-35(西電版第二版),與賴(lài)斯密度函數(shù)有關(guān),看后就明白了。
瑞利衰落信道物理模型
若信道中存在一主要分量,例如直射信號(hào)(LoS),則信道響應(yīng)的包絡(luò)服從萊斯分布,對(duì)應(yīng)的信道模型為萊斯衰落信道。通常將信道增益以等效基帶信號(hào)表示,即用一復(fù)數(shù)表示信道的幅度和相位特性。由此,瑞利衰落即可由這一復(fù)數(shù)表示,它的實(shí)部和虛部服從于零均值的獨(dú)立同分布高斯過(guò)程。綜上,瑞利分布與瑞利衰落信道是...
服從瑞利分布的信道增益編程時(shí)如何取值?
這種模型假設(shè)信號(hào)通過(guò)無(wú)線信道之后,其信號(hào)幅度是隨機(jī)的,即“衰落”,并且其包絡(luò)服從瑞利分布。這一信道模型能夠描述由電離層和對(duì)流層反射的短波信道,以及建筑物密集的城市環(huán)境。12瑞利衰落只適用于從發(fā)射機(jī)到接收機(jī)不存在直射信號(hào)(LoS,Line of Sight)的情況,否則應(yīng)使用萊斯衰落信道作為信道模型。
實(shí)戰(zhàn)數(shù)字信號(hào)處理之四十二 頻率平坦衰落信道建模:瑞利過(guò)程和萊斯...
對(duì)于通用萊斯過(guò)程ξ(t),接收信號(hào)幅度的概率密度函數(shù)由萊斯分布給出。萊斯 K 因子(用 κ 表示)捕獲了視線分量的功率與所有散射分量的功率之和的比率。如果ρ → 0,即κ → 0,萊斯過(guò)程成為瑞利過(guò)程,其幅度變化由瑞利分布統(tǒng)計(jì)描述。平坦衰落的萊斯統(tǒng)計(jì)信道模型可以通過(guò)兩個(gè)參數(shù)來(lái)描述:Ω和κ。 [...
相關(guān)評(píng)說(shuō):
北塘區(qū)螺紋: ______ #include "stdio.h" #include "stdlib.h" #define list_init_size 100 #define listincrement 20 #define ok 1 #define error 0 #define overflow -2 typedef int status; typedef int elemtype; typedef struct { elemtype *elem; int length; int listsize; }sqlist; ...
北塘區(qū)螺紋: ______ 模擬信源生成詞表?隨便手寫(xiě)一下.這里輸入的概率用的是各自的出現(xiàn)次數(shù),所以都是整數(shù). 要使用計(jì)算出來(lái)的非整數(shù)概率,直接修改 P 的類(lèi)型和輸入環(huán)節(jié)即可. int R = 0, *P = NULL; char *C = NULL; void init( int r ) { int i, s, t; R = r > 0 ? r : 1; ...
北塘區(qū)螺紋: ______ #include<stdio.h> void print(int a) { if(a<10) printf("%d",a); else { print(a/10); printf("$%d",a%10); } } void main() { int a; printf("請(qǐng)輸入:"); scanf("%d",&a); print(a); }
北塘區(qū)螺紋: ______ #include <iostream.h> class ram { public: char wenzi[200]; ram *p; }; ram wo,*ai=&wo; int num=0;//我申請(qǐng)了幾次內(nèi)存了 void xie(void);//輸入數(shù)據(jù),然后分配內(nèi)存為下次做準(zhǔn)備. void du(void);//把寫(xiě)入的數(shù)據(jù)全部顯示出來(lái) int main(void) { while(1)...
北塘區(qū)螺紋: ______ 0.0+【我自己做的 【strlen { char ch1[10]="abc"; int i; for(i=0;ch1[i]!='\0';i++);//循環(huán)到不是\0為假(結(jié)尾) printf("len=%d",i);//循環(huán)次數(shù)就是字符串的長(zhǎng)度 getch(); } 【strcpy { char ch1[20]="abcde",ch2[20]; int i; for(i=0;ch1[i]!='\0';i++) ...
北塘區(qū)螺紋: ______ 哈哈#include <stdio.h>#include <math.h> main() { int i,k,m,a=1; double p,e=2.71828; scanf ("%d %d",&m,&k); for (i=1;i<=k;i++) a=a*i; p=m*k*e-m/a; printf("%lf\n",p); } 希望對(duì)樓主有所幫助!
北塘區(qū)螺紋: ______ //使用動(dòng)態(tài)分配#include <stdio.h>#include <stdlib.h>#include <malloc.h> int i,L; char *p; void main() { for (i=0;i<20000;i++) { L=rand(); p=malloc(L); if (NULL==p) { printf("malloc error!\n"); continue; } memset(p,0,L); free(p); } }//不使用動(dòng)態(tài)分配#...
北塘區(qū)螺紋: ______ 這個(gè)問(wèn)題蠻好的 我給你個(gè)程序 給我加分啊#include <windows.h> #include <stdio.h> #include <stdlib.h> typedef HANDLE Semaphore; // 信號(hào)量的Windows原型 #define P(S) WaitForSingleObject(S, INFINITE) // 定義Windows下的P操作 #...
北塘區(qū)螺紋: ______ 你說(shuō)字符串嗎?: gets(ch_array); puts((ch_array + 1)); //從第2個(gè)元素的地址位置開(kāi)始輸出這個(gè)字符數(shù)組組成的字符串