声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2048|回复: 6

[其他相关] 产生标准高斯白噪声的算法

[复制链接]
发表于 2009-3-27 13:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
目前商业软件中产生的高斯白噪声序列都不是严格意义上的高斯白噪声,其均值,方差及正太分布性都不标准,此外白色性能也很差。本人现在在研究产生标准高斯白噪声的算法,文献中的大部分问题都已解决,但效果不是很好,希望有人能够帮忙或一起讨论。谢谢
QQ:504815336
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-3-31 14:31 | 显示全部楼层

白色化算法


                               
登录/注册后可看大图
 楼主| 发表于 2009-3-31 14:31 | 显示全部楼层

大家看看我的程序有什么问题没?

program standard_gauss_noise   !双随机交换法白色化高斯随机序列
   implicit none
   integer,parameter::N=511,maxN=2000
   real,parameter::kesi=0.1
   integer::i,j,r1,r2,k,a,b
   integer::p(2)
   real(kind=8)::seed_r,sum1,sum2
   real(kind=8)::x(0:N,0:maxN),r(0:N-1,0:maxN),s(0:maxN)
   a=0
   b=N
   seed_r=5.0
   do i=0,N
   !读取数据
      open(unit=10,file='gauss.txt')
      read(10,"(f12.8)") x(i,0)
   enddo

   do i=0,maxN-1
      sum2=0 !初始化
      s(i)=0.0
   if(i==0)   then !计算s(0)
      do k=0,N-1
      sum1=0.0
            do j=0,N-k-1
               sum1=x(j,i)*x(j+k,i)+sum1
            enddo
            r(k,i)=sum1/N
   !open(unit=122,file='r.txt')
   !write(122,*) r(k,i)
         enddo
         
         do k=1,N-1
            sum2=r(k,i)**2+sum2
         enddo
         s(i)=sum2
   write(*,*)  s(i),i
   else
         !第一步:双随机交换产生新的随机序列
         call   nrabs(seed_r,a,b,p)
      r1=p(1)
      r2=p(2)
   !write(*,*) r1,r2
         do j=0,N
            x(j,i)=x(j,i-1)
         enddo
         call exchange(x(r1,i),x(r2,i))
      !第二步:计算序列的自相关函数
         do k=0,N-1
      sum1=0
            do j=0,N-k-1
               sum1=x(j,i)*x(j+k,i)+sum1
            enddo
            r(k,i)=sum1/N
   
         enddo
      !第三步:计算平方和
         do k=1,N-1
            sum2=r(k,i)**2+sum2
         enddo
         s(i)=sum2

   !第四步:若s(i)<kesi,则停止运算
         if(s(i)<kesi) then
           do j=0,N
           open(unit=225,file='D:\Download\matlab65\work\standerd_noise.txt')
           write(225,"(f12.8)") x(j,i)
        enddo
        write(*,*)  i
           exit    !停止运算
         endif
         !第五步:若s(i)>=s(i-1),则双随机交换失败,放弃此次交换
         if(s(i)<s(i-1)) then
     open(unit=111,file='D:\Download\matlab65\work\s.txt')
           write(111,"(f12.8)")  s(i)
         else
           call exchange(x(r1,i),x(r2,i)) !把原来换过的数据交换回来
     !write(*,*) i
         endif
   endif
   enddo
   stop
   end   program standard_gauss_noise
   

    subroutine  exchange(a,b) !交换
    implicit none
    real(kind=8)::a,b,t
    t=a
    a=b
    b=t
    return
    end   


    subroutine nrabs(r,a,b,p) !产生两个随机整数
    integer,parameter::n=2
    integer p(n)
    integer a,b
real(kind=8)::r
    s=b-a+1.0
    k=log(s-0.5)/log(2.0)+1
    l=1
    do 10 i=1,k
10  l=2*l
    k=1
    s=4.0*l
    i=1
20  if((i<=l).and.(k<=n)) then
    r=r+r+r+r+r
m=r/s
r=r-m*s
j=a+r/4.0
if(j<=b) then
p(k)=j
k=k+1
end if
i=i+1
goto 20
end if
return
end

评分

1

查看全部评分

 楼主| 发表于 2009-3-31 14:33 | 显示全部楼层
怎么这么久也没人回复啊?
发表于 2009-4-1 15:50 | 显示全部楼层

回复 地板 gurencai 的帖子

这个问题不懂,你去Matlab区看看,怎么样?
发表于 2009-4-2 15:00 | 显示全部楼层
搜索论坛,有用matlab做高斯白噪声的
 楼主| 发表于 2009-4-9 20:22 | 显示全部楼层

回复 板凳 gurencai 的帖子

顶上去。:@( :@( :@( :@( :@(
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-18 17:14 , Processed in 0.056124 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表