声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3203|回复: 12

[综合] 关于王济、胡晓《matlab在振动信号处理中的应用》书中白噪声激励

[复制链接]
发表于 2010-10-12 15:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 左言 于 2010-10-12 15:44 编辑

关于王济、胡晓《matlab在振动信号处理中的应用》书中白噪声激励程序的问题,我按照书中给出的程序运行,生成的图形与书上的怎么不一样呢,请给位大虾帮忙看一下

回复
分享到:

使用道具 举报

 楼主| 发表于 2010-10-12 15:08 | 显示全部楼层
这是书中的给出的图形 ]$]8I[K1_`(O]2TFHG@{A[R.jpg
 楼主| 发表于 2010-10-12 15:11 | 显示全部楼层
这是我按照书中给出的程序生成的图形
untitled.jpg
发表于 2010-10-12 15:28 | 显示全部楼层
你的数据哪来的?
发表于 2010-10-12 15:32 | 显示全部楼层
每次产生的噪声不一样,分析结果当然也不一样了
 楼主| 发表于 2010-10-12 15:37 | 显示全部楼层
回复 Cena马 的帖子

这个我知道,但是两个图中的频率范围是不一样的
发表于 2010-10-12 16:46 | 显示全部楼层
回复 左言 的帖子

你采样频率多少?
 楼主| 发表于 2010-10-13 08:56 | 显示全部楼层
回复 Cena马 的帖子

采样频率是400
 楼主| 发表于 2010-10-13 08:59 | 显示全部楼层
  1. %生成白噪声信号
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. clear
  4. clc
  5. close all hidden
  6. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  7. % fni='out.txt';
  8. fid=fopen('out.txt','r');
  9. sf=fscanf(fid,'%f',1);%采样频率
  10. fi=fscanf(fid,'%f',1);%最小截止频率
  11. fa=fscanf(fid,'%f',1);%最大截止频率
  12. t1=fscanf(fid,'%f',1)%时间长度(秒)
  13. am=fscanf(fid,'%f',1);%最大幅值
  14. fno=fscanf(fid,'%f',1);%输出数据文件名;
  15. status=fclose(fid);
  16. %计算白噪声信号数据长度n
  17. n=round(sf*t1)+1
  18. t=0:1/sf:(n-1)/sf;%建立信号离散时间向量t
  19. nfft=2^nextpow2(n);%大于并接近n的2的幂次方为FFt长度
  20. ni=round(fi*nfft/sf+1);%四舍五入取整求最小截止频率对应数组元素的下标
  21. na=round(fa*nfft/sf+1);%四舍五入取整求最大截止频率对应数组元素的下标
  22. r=zeros(1,nfft/2);%建立长度为nfft/2元素全为0的向量
  23. r(ni:na)=1;%将r的正频带通内的元素赋值为1,生成幅值谱

  24. a=2*pi*rand(1,nfft/2);%生成0~2pi的随机数为随机相位
  25. b=r.*exp(i*a)*nfft/2;%将幅值谱和相位谱转换为实部和虚部
  26. a=[b,b(nfft/2:-1:1)];%将正负圆频率向量合成一个向量
  27. x=real(ifft(a,nfft));%IFFT变换,并取实部为生成的白噪声信号
  28. y=am*x(1:n)/max(abs(x(1:n)));%去指定长度的数据并使最大值为指定幅值

  29. nft=1024;%定义自功率谱的FFt长度
  30. y1=psd(y,nft,sf,boxcar(nft),nft/2);%计算生成的白噪声信号的自功率谱
  31. f=0:sf/nft:(nft/2-1)*sf/nft;%定义自功率谱的离散频率向量

  32. %绘制白噪声信号随时间变化的图形
  33. subplot(2,1,1);
  34. plot(t,y);
  35. xlabel('时间 (s)');
  36. ylabel(' 幅值 ');
  37. grid on

  38. %绘制自功率谱图形
  39. subplot(2,1,2);
  40. plot(f(1:nft/4),y1(1:nft/4));
  41. xlabel('频率 (HZ)');
  42. ylabel('幅值');
  43. grid on;
  44. save force y
  45. % %打开文件输出生成的白噪声信号数据
  46. % fid=fopen(fno,'w');
  47. % for k=1:n
  48. %     fprintf(fid,'%f %f/n',t(k),y(k));%每一行输出两个实型数据,t为时间,y为白噪声信号值
  49. % end
  50. % status=fclose(fid);
复制代码
这是书中给出的程序
发表于 2010-10-13 09:29 | 显示全部楼层
这个程序需要输入频率参数。你的输入对吗?
 楼主| 发表于 2010-10-13 10:24 | 显示全部楼层
回复 VibrationMaster 的帖子

恩,就是按照书中给出的输入的,频率范围为0.5-90Hz,时间长度40s,最大幅值1.1
发表于 2010-12-31 11:10 | 显示全部楼层
我也出现同样的问题,不知道怎么解决,还有其中有一句:“ni=round(fi*nfft/sf+1);%四舍五入取整求最小截止频率对应数组元素的下标",这句话怎么理解啊?
头像被屏蔽
发表于 2014-7-28 17:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-21 06:55 , Processed in 0.058645 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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