zzyhnhtth 发表于 2008-1-2 21:54

由功率谱求时域白噪声的问题(带源程序)

本帖最后由 wdhd 于 2016-9-8 14:40 编辑

  %%本程序是根据白噪声的功率谱来求时域信号
  %%源程序来自于:王济,胡晓.MATLAB在振动信号处理中的应用.中国水利水电出版社,2005,150:152
  clear
  clc
  sf=400;%采样频率
  fi=0.5;%最小截止频率
  fa=90;%最大截止频率
  tl=40;%时间长度
  am=1.1;%最大幅值
  n=round(sf*tl)+1;%计算白噪声信号数据长度
  t=0:1/sf:(n-1)/sf;%建立信号离散时间向量
  nfft=2^nextpow2(n);%确定FFT长度
  ni=round(fi*nfft/sf+1);%确定最小截止频率对应数组元素的下标
  na=round(fa*nfft/sf+1);%确定最大截止频率对应数组元素的下标
  r=zeros(1,nfft/2);%建立一个长度为nfft/2元素全为0的向量
  r(ni:na)=1;%将r的正频率带通内的元素赋为1,其余为0 *****************(1)
  a=2*pi*rand(1,nfft/2);%产生随机向量
  b=r.*exp(i*a)*nfft/2;%将幅值谱和相位谱转换在实部和虚部
  a=;%将正负圆频率向量组合成一个向量
  x=real(ifft(a,nfft));%IFFT变换,并取实部为白噪声信号
  y=am*x(1:n)/max(abs(x(1:n)));%取指定长度的数据并使数据的最大值为指定的幅值 ********(3)
  nft=1024;%定义自功率谱的FF长度
  y1=psd(y,nft,sf,boxcar(nft),nft/2);%计算白噪声的自功率谱**********(2)
  f=0:sf/nft:(nft/2-1)*sf/nft;%确定频率向量
  subplot(2,1,1)
  plot(t,y,'k-')
  xlabel('频率 (Hz)')
  ylabel('幅值')
  grid on
  subplot(2,1,2)
  plot(f(1:nft/4),y1(1:nft/4),'k-')
  xlabel('频率 (Hz)')
  ylabel('幅值')
  grid on
  问题1: r数组为白噪声的功率谱数组,在0.5~90Hz范围内,白噪声的功率谱为1,但由功率谱求出时域信号后,再对时域信号求功率谱,为什么前后的功率谱不同? 见程序的(1)式和(2)式
  问题2: 将是时域信号的最大值改变为指定的最大幅值,会影响时域信号的功率谱的大小吧,因此这样改变最大值有何实际意义? 见程序的(3)式
  [ 本帖最后由 zzyhnhtth 于 2008-1-2 22:02 编辑 ]
页: [1]
查看完整版本: 由功率谱求时域白噪声的问题(带源程序)