怎么能产生个高斯分布呢?

job82824 2010-04-25 07:40:37
不是一个图谱的那种,我是想要个累加形式的高斯分布,每次循环产生0~1024道的单道的计数,每次产生的单道计数n>=1;然后要求最后每道的累加和分布呈现是高斯函数形式的?
...全文
163 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
job82824 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 finder_zhang 的回复:]

光是画曲线,没问题,画了个N[0,1]的曲线.
要一次一次地累加,主要是如果去做那个每次出现在哪里的机率的控制.
如果是把0-1024的每一格的机率,描述成每一格的积分 除以 0-正无穷的积分.
这样求出0-1024每格的机率,循环rand()几十万次.不知这样符不符合?
[/Quote]
rand()当然可以了,但是问题是怎么能让峰位处的产生计数的几率更大一些?就是比两边高一些,这样累加起来肯定就是高斯分布了。还是请兄弟们帮下忙吧,解决了问题我会加100分的!
finder_zhang 2010-04-28
  • 打赏
  • 举报
回复
光是画曲线,没问题,画了个N[0,1]的曲线.
要一次一次地累加,主要是如果去做那个每次出现在哪里的机率的控制.
如果是把0-1024的每一格的机率,描述成每一格的积分 除以 0-正无穷的积分.
这样求出0-1024每格的机率,循环rand()几十万次.不知这样符不符合?


finder_zhang 2010-04-28
  • 打赏
  • 举报
回复
根据乘法分配率.
积分的函数改一下,效应应该会好一些.


double CDrawLayoutDlg::FintegralEx(double x1,double x2,double delta)
{
// double rtn = 0;
// for (double n = x1;x2-n>(delta/2);n+=delta)
// {
// rtn += delta*Layout(n);
// }
// return rtn;

double rtn = 0;
for (double n = x1;x2-n>(delta/2);n+=delta)
{
rtn += Layout(n);
}
return rtn*delta;
}
finder_zhang 2010-04-28
  • 打赏
  • 举报
回复

#include <cmath>

const double PI = 3.141592654; //圆周率

//分布方程
double CDrawLayoutDlg::Layout(double x)
{
if(!UpdateData()) return 0;
double CONA = 1/( sqrt(2*PI)*m_fEditSigema ) ;
double CONC = 2 * m_fEditSigema * m_fEditSigema;
double rtn = CONA * exp(-pow(x-m_fEditMu,2)/CONC);
return rtn;
}

//积分函数
double CDrawLayoutDlg::FintegralEx(double x1,double x2,double delta)
{
double rtn = 0;
for (double n = x1;x2-n>(delta/2);n+=delta)
{
rtn += delta*Layout(n);
}
return rtn;
}

//范围包含查找,折半查找法
int CDrawLayoutDlg::FindHalf(int* pData,int iLen,int iFind)
{
if(iLen <= 1){
return (pData[0] <= iFind)?1:0;
}
if (pData[iLen/2 - 1] <= iFind && iFind< pData[iLen/2]){
return iLen/2;
}
else if(iFind < pData[iLen/2 - 1]){
return FindHalf(pData,iLen/2,iFind);
}
else{
return iLen/2 + FindHalf(pData + iLen/2,(iLen+1)/2,iFind);
}
}

//主函数
void CDrawLayoutDlg::OnBtnDraw()
{
// TODO: Add your control notification handler code here
if(!UpdateData()) return;

//负无穷到正无穷积分,其实不是真的要算,只是验证一下积出来是否等于1
// -5 到 5 ,积出来是0.999999
double fTotalEx = FintegralEx(-5,5,0.001);

double fDelta[1000]; //存放各个区间的几率

int i=0;
double n;
for (n = -5;n<5-0.01;n+=0.01,++i) //求各区间几率
{
fDelta[i] = FintegralEx(n,n+0.01,0.001);
}

int iDeltaSpr[1000]; //存放各个区间的分隔数
double fOdds=0;
for (i=0;i<1000;++i) //通过几率求分隔数
{
fOdds+=fDelta[i];
iDeltaSpr[i] = int(RAND_MAX * fOdds);
}

int iRand;
srand(time(0));
int iCount[1000]; //存放各个区间的出现次数
ZeroMemory(iCount,1000*4);
for (i=0;i<m_iEditTestCnt;++i) //循环N次,得结果
{
iRand = rand();
iCount[FindHalf(iDeltaSpr,1000,iRand)]++;
}

CRect rt; //显示结果
GetClientRect(rt);
CClientDC dc(this);
// double fScale=double(rt.Height())*0.8/ iCount[500]; //显示的比例
for (i=0;i<1000;++i)
{
dc.MoveTo(i,rt.Height() - 10);
dc.LineTo(i,rt.Height() - 10-iCount[i]); //输出测试图,看最终结果
//dc.LineTo(i,rt.Height() - 10-fDelta[i]*20000); //输出几率图,看中间结果
}
}


写了一个代码,在工程里面可以自己输入 u 与 sigema 还有 测试次数 的.
u 控制平均值,也就是横轴的位置
sigema 控制值的分散程度,就是尖与平.

可以加个QQ拿个工程去测试一下 QQ 644832501
finder_zhang 2010-04-28
  • 打赏
  • 举报
回复
好,再想想.
wozhenshicainiao 2010-04-27
  • 打赏
  • 举报
回复
实力有限!
finder_zhang 2010-04-27
  • 打赏
  • 举报
回复
明白,这个有意思,试一下先!
job82824 2010-04-27
  • 打赏
  • 举报
回复
就是每次随机产生一些计数:
x -- y
0 -- 0
1--- 0
...
250 --15
251 -- 4
...
500 --10
501 --4
...
每一道上能够有一些计数,每道的计数然后经过几十次或者上百次的累加,形成一个高斯分布。
y=A*exp(-(x-B)^2/C);
怎么实现?
finder_zhang 2010-04-27
  • 打赏
  • 举报
回复
楼主,说具体点.
job82824 2010-04-26
  • 打赏
  • 举报
回复
没有人回答呀,55555
时频分析工具箱中提供了计算各种线性时频表示和双线性时频分布的函数, 本帖主要列出时频分析工具箱函数简介,以号召大家就时频分析应用展开相关讨论。 一、信号产生函数: amexpo1s 单边指数幅值调制信号 amexpo2s 双边指数幅值调制信号 amgauss 高斯幅值调制信号 amrect 矩形幅值调制信号 amtriang 三角形幅值调制信号 fmconst 定频调制信号 fmhyp 双曲线频率调制信号 fmlin 线性频率调制信号 fmodany 任意频率调制信号 fmpar 抛物线频率调制信号 fmpower 幂指数频率调制信号 fmsin 正弦频率调制信号 gdpower 能量律群延迟信号 altes 时域Altes信号 anaask 幅值键移信号 anabpsk 二进制相位键移信号 anafsk 频率键移信号 anapulse 单位脉冲信号的解析投影 anaqpsk 四进制相位键移信号 anasing Lipscjitz 奇异性 anaste 单位阶跃信号的解析投影 atoms 基本高斯元的线性组合 dopnoise 复多普勒任意信号 doppler 复多普勒信号 klauder 时域Klauder小波 mexhat 时域墨西哥帽小波 二、噪声产生函数 noiseecg 解析复高斯噪声 noiseecu 解析复单位高斯噪声 tfrgabor Gabor表示 tfrstft 短时傅立叶变换 ifestar2 使用AR(2)模型的瞬时频率估计 instfreq 瞬时频率估计 sqrpdlay 群延迟估计 三、模糊函数 ambifunb 窄带模糊函数 ambifuwb 宽带模糊函数 四、Affine类双核线性时频处理函数 tfrbert 单式Bertrand分布 tfrdfla D-Flandrin分布 tfrscalo 尺度图 tfrspaw 平滑伪Affine类Wigner分布 tfrunter Unterberger分布 五、Cohen类双核线性时频处理函数 tfrbj Born-Jordan分布 tfrbud Butterworth分布 tfrcw Choi-Williams分布 tfrgrd 归一化的矩形分布 tfrmh Margenau-Hill分布 tfrmhs Margenau-Hill频谱分布 tfrmmce 谱图的最小平均互熵组合 tfrpage Page分布 tfrwv 伪Wigner-Ville分布 tfrri Rihaczek分布 tfrridb 降低交叉项的分布(Bessel窗) tfrridbn 降低交叉项的分布(二项式窗) tfrridh 降低交叉项的分布(汉宁窗) tfrridt 降低交叉项的分布(三角窗) tfrsp 谱图分布 tfrspwv 平滑伪Wigner-Ville分布 tfrwv Wigner-Ville分布 tfrzam Zhao-Atlas-Marks分布 六、其他处理函数: friedman 瞬时频率密度 htl 图像直线检测中的Hough变换 margtfr 时频表示的能量 momftfr 时频表示的频率矩 momttfr 时频表示的时间矩 renyi Renyi信息度量 ridges 波峰提取 plotifl 绘制归一化的瞬时频率规律 tfrparam 返回用于显示时频表示的参数 tfrqview 时频表示的快速可视化 tfrsave 保存时频表示的参数 tfrview 时频表示的可视化

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧