声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4915|回复: 7

[经典算法] [求助]求随机共振源程序

[复制链接]
发表于 2006-6-22 09:39 | 显示全部楼层 |阅读模式

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

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

x
谢谢各位!!!
回复
分享到:

使用道具 举报

发表于 2006-6-25 09:19 | 显示全部楼层

回复:(xcsyb)[求助]求随机共振源程序

随机共振的基本含义是指一个非线性双稳或多稳系统,当在小周期信号驱动下不足使系统的输出在两个稳态之间跳跃,只能在一个稳态上。而在弱噪声和小周期调制信号共同作用下,随着输入噪声强度的增加,系统输出功率谱中调制信号的频率处出现一个峰值.当噪声强度达到某一适当值时,系统在两定态之间进行跃迁,输出信号的峰值达到最大——“共振”。以后随着噪声强度的增强,输出信号的峰值逐渐减小。总结产生随机共振现象的条件,大致可以归纳为以下三个要素: <BR>(1)非线性系统要存在两个(或多个)稳态。 <BR>(2)输入信号,并且输入信号还不足引起系统在不同稳态之间跃迁。 <BR>(3)噪声。它既可以是系统外部的随机驱动力,也可以来自系统内部相互作用引起的涨落。 <BR>
发表于 2006-6-25 09:19 | 显示全部楼层

回复:(xcsyb)[求助]求随机共振源程序

下面是matlab写的一个随机共振的例子,你可以参考一下
  1. %programshijin.m
  2. x=-2:0.1:2;区间范围
  3. b=1;势阱参数,决定势阱的深度与宽度
  4. c=1;

  5. figure(1)
  6. subplot(2,1,1);分区作图
  7. y=-b.*x.^2/2+c.*x.^4/4;势函数
  8. plot(x,y);作二维图形
  9. subplot(2,1,2);
  10. b=3:0.1:7;给定b,c的变化区间
  11. c=2:0.1:6;
  12. h=moviein(40);影片动画
  13. fori=1:40;
  14. y=-b(i).*x.^2/2+c(i).*x.^4/4;
  15. plot(x,y);
  16. h(:,i)=getframe;
  17. end
  18. title('势函数随b,c的变化情况')坐标标注
  19. subplot(2,1,1)
  20. title('无信号及噪声输入时系统的势函数')
  21. xlabel('x');
  22. ylabel('U(x)');
  23. subplot(2,1,2)
  24. xlabel('x');
  25. ylabel('U(x)');
  26. movie(h,1);
  27. figure(2)
  28. b=1;给定b,c加入周期调制信号
  29. c=1;
  30. w=pi;
  31. z=0;
  32. subplot(2,1,1)信号较小时
  33. A=2;
  34. m=moviein(20);影片动画
  35. [t,yy]=ode23('xinhao1',[0:0.1:10],[1,b-c+A],[],b,z,c,A,w);ode命令解微分方程
  36. n=length(t);
  37. fori=1:fix(n/2)
  38. axis([-22-510]);
  39. y=-b.*x.^2/2+c.*x.^4/4-A.*x.*sin(w*t(i));
  40. plot(x,y);
  41. holdon
  42. uu=yy(i,2)*yy(i,2)/2-b.*yy(i,1).^2/2+c.*yy(i,1).^4/4-A.*yy(i,1).*sin(w*t(i));
  43. uu=-b.*yy(i,1).^2/2+c.*yy(i,1).^4/4-A.*yy(i,1).*sin(w*t(i));
  44. plot(yy(i,1),uu,'.r','markersize',10)
  45. holdoff
  46. m(:,i)=getframe;
  47. end
  48. title('加入周期信号较小,不足以翻转')
  49. xlabel('x');
  50. ylabel('U(x)');
  51. v=moviein(20);
  52. subplot(2,1,2)周期信号较大时
  53. A=3;
  54. [t,yy]=ode23('xinhao1',[0:0.1:10],[1,b-c+A],[],b,z,c,A,w);
  55. n=length(t);
  56. fori=1:fix(n/2)
  57. y=-b.*x.^2/2+c.*x.^4/4-A.*x.*sin(w*t(i));
  58. plot(x,y);
  59. holdon
  60. uu=yy(i,2)*yy(i,2)/2-b.*yy(i,1).^2/2+c.*yy(i,1).^4/4-A.*yy(i,1).*sin(w*t(i));
  61. uu=-b.*yy(i,1).^2/2+c.*yy(i,1).^4/4-A.*yy(i,1).*sin(w*t(i));
  62. plot(yy(i,1),uu,'.r','markersize',10)
  63. holdoff
  64. v(:,i)=getframe;
  65. end
  66. title('加入周期调制信号较大,可以翻转')
  67. holdon
  68. xlabel('x');
  69. ylabel('U(x)');
  70. axis([-22-510])
  71. holdon
  72. movie(v)
  73. t=0:0.1:10;
  74. n=length(t);
  75. figure(3)加入信号同时加入随即噪声
  76. A=2;
  77. b=1;
  78. m=moviein(20);
  79. fori=1:fix(n/2)
  80. r=2*rand(1)随即量
  81. y=-b.*x.^2/2+c.*x.^4/4-A.*x.*sin(w*t(i))-r.*x;
  82. plot(x,y);
  83. holdon
  84. [t,s,r]=oula('f',0,5,rand(1),0.1,r);调用欧拉函数解方程
  85. u=-b.*s(i).^2/2+c.*s(i).^4/4-A.*s.*sin(w*t(i))-r*s(i);
  86. plot(s(i),u(i),'.r','markersize',10);
  87. holdoff
  88. m(:,i)=getframe;
  89. end
  90. title('加入随机噪声的情况,参数选取同figure(2)中未翻转时');
  91. xlabel('x');
  92. ylabel('U(x)');
  93. movie(m,1)
  94. figure(4)波形图及频谱分析
  95. x=-2:0.1:2;
  96. w=50*pi;
  97. b=1;
  98. c=1
  99. A=1;
  100. t=0:0.01:10;
  101. n=length(t);
  102. subplot(2,1,1);
  103. fori=1:n
  104. y(i)=b.*x(1)-c.*x(1).^3+A.*cos(w*t(i))+0.5*rand(1);
  105. end
  106. plot(t,y)
  107. title('信号的波形图');
  108. xlabel('t');
  109. ylabel('U(x)');
  110. subplot(2,1,2)
  111. z=fft(y);
  112. z(1)=[];
  113. n=length(z);
  114. p=10^(-5).*abs(z(1:n/2)).^2
  115. m=1/2;
  116. f=100*(1:n/2)/(n/2)*m;
  117. plot(f,p)
  118. title('信号的频谱图,w=50*pi,f=25');


  119. %oula.m子程序:欧拉法解方程
  120. function[x,y,r]=oula(fun,x0,xf,y0,h,r)
  121. n=fix((xf-x0)/h);
  122. x(1)=x0;
  123. y(1)=y0;
  124. x(n)=0;
  125. y(n)=0;
  126. fori=1:(n-1)
  127. x(i+1)=x0+i*h;
  128. y1=y(i)+h*feval(fun,x(i),y(i),r);调用方程
  129. y2=y(i)+h*feval(fun,x(i+1),y1,r);
  130. y(i+1)=(y1+y2)/2;
  131. end


  132. %f.m方程文件
  133. %参数b,c,A,w为1,故省略。
  134. functionf=f(t,x,r)
  135. f=x-x.^3+cos(t)-r;


  136. %odefilexinhao1.mode文件
  137. functionydot=xinhao1(t,x,flag,b,z,c,A,w)
  138. ydot=[b*x(1)-c*x(1)^3+A*cos(w*t)+z;...
  139. b*x(2)-3*c*x(1)*x(1)*x(2)-A*w*sin(w*t)];
复制代码

[ 本帖最后由 风花雪月 于 2008-4-30 10:30 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2006-6-29 22:41 | 显示全部楼层

回复:(风花雪月)回复:(xcsyb)[求助]求随机共振源...

谢谢!!!
发表于 2008-10-15 17:32 | 显示全部楼层

回复 板凳 风花雪月 的帖子

为什么我运行不了楼主的程序呢,提示
??? Error: File: sr1.m Line: 123 Column: 1
Function definitions are not permitted at the prompt or in scripts.
发表于 2008-10-28 17:18 | 显示全部楼层
原帖由 nanlaibeiqu 于 2008-10-15 17:32 发表
为什么我运行不了楼主的程序呢,提示
??? Error: File: sr1.m Line: 123 Column: 1
Function definitions are not permitted at the prompt or in scripts.


都不知道你看过我上面的帖子没有,自己仔细看看吧,而不是盲目的粘贴运行
发表于 2013-4-3 21:43 | 显示全部楼层
风花雪月 发表于 2008-10-28 17:18
都不知道你看过我上面的帖子没有,自己仔细看看吧,而不是盲目的粘贴运行

谢谢风花雪月,我刚接触随机振动,太有帮助了。。
发表于 2013-6-5 22:42 | 显示全部楼层
风花雪月 发表于 2006-6-25 09:19
下面是matlab写的一个随机共振的例子,你可以参考一下

[ 本帖最后由 风花雪月 于 2008-4-30 10:30 编辑 ]

您好。我也是在看这段程序。想问下,您用的是哪个版本的matlab?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-28 13:29 , Processed in 0.122458 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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