1/f噪声的仿真产生和验证

来源 :船海工程 | 被引量 : 0次 | 上传用户:li1xiang125
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:本文介绍了1/f噪声的含义和原理,依照这些原理,通过白噪声加简化得到的有理1/f数字滤波器的方法,使用Matlab编程,仿真产生了真实1/f噪声。并根据常见的计算功率谱密度的算法,验证了仿真产生的1/f噪声的性能。
  关键词:噪声;1/f噪声;仿真;功率谱密度;
  中图法分类号:TB533 文献标志码:B
  
  Simulation and Verification of 1/f Noise
  WU Yuan-zhen,WU MU-zhi
  Suzhou Testing Instrument Factory Suzhou Jiangsu 215129 China
  ABSTRACT:In this paper, the principles of the 1/f noise are discussed. In accordance with these principles, using the white noise to be added to simplify the right 1/f digital filter method; the author wrote programs based on Matlab and gets a better simulation of 1/f noise. And through the common computing power spectral density way of the algorithm, the verification is generated by the 1/f noise performance, the 1/f noise characteristics are shown.
  Key words:Matlab;noise;1/f noise;simulation;PSD
  
  近年来,随着在物理、化学、生物医学等基础学科中对自然现象及规律的深入探索,在通信、测量、导航、医疗仪器等工业领域中人们必须测量及接受越来越小的电信号。测量或者接受装置中的内部噪声影响越来越为明显,这种噪声已经成为制约电子仪器和装备进一步提高信号检测灵敏度及改进接受信号质量的关键因素。仿真产生噪声信号可以帮助研究人员研究克服噪声的方法,帮助技术人员研制出高抗干扰的仪器设备或指出改进产品的方向。
  1/f噪声广泛存在于电子元器件和电子线路中,从1/f噪声测量分析中可以得到很多有用的信息。本文主要讨论1/f噪声的特点和仿真产生的方法。
  Matlab的信号处理工具箱是信号算法文件的集合,它处理的对象是信号和系统,信号处理工具箱提供了很多命令行函数来进行谱分析,包括经典的无界技术以及特征值技术。另外,也添加了很多对象,用以提高可用性。因此我们使用该工具箱来仿真产生1/f噪声源,并且用其来分析验证仿真产生出的噪声可信度。
  1 1/f噪声的特性
  1.1 1/f噪声(低频率噪声)的特性
  电子器件中的1/f 噪声具有两个基本特性:
  1)1/f 噪声在一个相当宽的频带内,功率谱密度与频率f 成反比, 且频带上、下限都是有限值,上限频率视1/f 噪声与背景白噪声的相对大小而定;下限频率接近直流时功率密度仍呈很好的1/f 特性。
  2)1/f 噪声电压和电流的功率谱密度近似与流经器件的电流的平方成正比,这意味着1/f噪声起源于电阻的涨落。设流过电阻R的电流保持恒定,电阻存在着涨落,引起电阻两端电压涨落,则有:
   δV=1*δR(1-1)
   Sv(f)=I2SR(f)I2(1-2)
  假设功率谱密度是Pnf=Sf/f,相应的电压密度是e2nf=Af/f。从频率f1到f2之间的总噪声是
  v2nf=f2f1Affdf=Aflog(f2f1)(1-3)
  所以,1/f谱图取决于上下的截止频率,而不是绝对带宽。
  1.2 1/f噪声的自相关函数
  LTV(线性时不变)系统的输出可以用卷积积分来表示:
  (1-4)
  式中t是输出的观察时间。
  通常我们更关心的是计算系统输出的均方根值,假设输入是由一个静态噪声源驱动的,为了得到这个结果,第一步是计算输出均方根值
  x~2=∞-∞∞-∞h(u)h(v)m(t-u)m(t-v)ni(t-u)ni(t-v)dudv(1-5)
  这里f(t)被一个噪声信号n(t)取代。均方值通过计算整个时间段的平均值可以得到:
  x-2=limk→∞1k∞-∞∞-∞h(u)h(v)m(t-u)m(t-v)ni(t-u)ni(t-v)dudv
  x-2=∞-∞∞-∞h(u)h(v)m(t-u)m(t-v)[limk→∞1kni(t-u)ni(t-v)]dudv(1-7)
  ni(t)表示的是i次抽样函数。
  式(1-7)中间括号的内容是随机输入噪声信号的自相关函数,所以可以简化成为
  x-2∞-∞∞-∞h(u)h(v)m(t-u)m(t-v)[Rnn(u-v)]dudv(1-8)
  上面这个式子指出了自相关函数在时域噪声分析中的重要性。在噪声处理中最常见的两种噪声是白噪声和1/f噪声的自相关函数。理想的1/f噪声是一个多样的过程,它的自相关函数无法用闭合的形式来简单的表达出来。实际应用中进行了一些近似。
  白噪声的双边功率谱密度(double-sidedPSD)是
   v2Δf=N02(1-9)
  N0是单边噪声功率谱密度,单位是V2/HZ。自相关函数就是简单的功率谱密度的富利叶反变换。所以,白噪声的自相关函数由冲击响应函数给出
   Rnn(τ)=N02δ(τ)(1-10)
  1/f噪声,可以看成是白噪声通过一个噪声滤波器得到的结果。白噪声驱动的通过线性时间滤波器的输出的自相关函数是
  Ryy(τ)=N02∞-∞h(λ)h(τ+λ)dλ(1-11)
  h(t)是成型滤波器的冲击响应。理想的1/f成型噪声滤波器得冲击响应是
  h(t)2fct,t>0(1-11)
  fc是转角频率。1/f噪声的自相关函数从下式计算得到:
  Ryy(τ)=N0fc∞01λ1λ+τdλ(1-13)
  可以得到
  Ryy=2N0fc1n[λ+λ+τ]∞0(1-14)
  上面这个式子形式是非常简单的,可惜的是,式(1-14)是发散的,所以并不可能去精确的计算得到1/f噪声的自相关函数。我们可以简化得到有理形式的滤波器(或者一串滤波器),解决方法是定义一个总的操作时间,并使用恰当的近似,式(1-14)可以转变为
  Ryy(top,τ)=2N0fc1n[λ+λ+τ]top-τδ(1-15)
  假设topτδ,可以得到
  Ryy(top,τ)≌N0fc[1n(4)+1n(topfc)-1n(τfc) ] (1-16)
  注意,top和δ,是等同于时域内的两个频率限fmin(等同于/top)和(fc等同于1/δ),所以,整个1/f噪声过程包括了N个10倍频段,(1-12)可以写成
  N=log10(topfc)(1-17)
  Ryy(N,τ)≌N0fc[1n(4)+2.3N-1n(τfc)](1-18)
  在1/f噪声仿真的实际应用中,式(1-14)比式(1-19)更实用。
  1.3 1/f噪声的产生方法
  产生1/f噪声的最直观的方法就是将白噪声通过噪声滤波器过滤之后得到。但是,理想的1/f滤波器并不是有理的,所以需要开发一个可以近似得到1/f噪声的滤波器。需解决的主要问题是求这一近似的滤波器的算法。
  使用下图所示简化的噪声滤波器。
  图1 仿真1/f噪声成型滤波器的示意图
  一系列的hn(t)进行叠加,可以得到一系列的滤波器,产生了完整的1/f噪声的输出,传输函数如下给出
  H(s)=1+∑N+1n=010-0.5n22πfcs+2π10-nfc(1-19)
  N定义了总频率带宽的10倍频数量,fc是转角频率。1/f噪声的数字化产生需要将模拟滤波器变成数字化滤波器,z域传输函数很容易计算得到,计算的结果如下式:
  H(z)=1+∑Nn=010-0.5n2πfcTs1-z-1exp(-2π10-nfcTs)(1-20)
  现在可以使用Matlab内置的filter函数来进行处理了。在仿真产生1/f噪声时,比较合理N的值大约为10。这意味着一个带宽为1MHz的系统,最低频率在10-4左右。这样,总的仿真时间长度需要在s。一般来说104s,仿真N个10倍频段需要大约10N个点。如果N>6,考虑到对计算机内存和资源的要求,是不现实的。在实际应用中,通常选定采样频率为107,模拟时间长度为10-3。考虑到所需要的精度大概需要104-105个点。为了解决这个问题我们定义一个参量Neff
  Neff=1+log10(tsimTs)(1-21)
  tsim是总的仿真时长。然后整个数字滤波器被分为两个部分,如图2所示,所有的nNeff子滤波器,按照式(1-20)来计算,所有的n>Neff部分,输出在整个仿真过程中几乎都是常量。意味着高阶的子滤波器可以进行简单的将数值(偏移量)相加。每一部分所得均方根等于稳态时子滤波器的输出均方根。
  图2 数字滤波器可以被Neff分为两个部分
  1.4 产生白噪声并计算其功率谱密度
  1.4.1 使用matlab仿真产生白噪声
  如上节分析,因为仿真产生1/f噪声的方法是白噪声通过一个滤波器,所以先需要仿真得到一个白噪声。(程序较简单略)
  在Matlab中产生白噪声,可以使用randn函数的得到一个具有高斯正态分布的白噪声
  noise=rms×randn(1,npts)
  产生得到一个均值为0,均方根值为rms,总点数为npts的噪声,均方根值由白噪声底阶和采样频率共同决定,如下式得到:
   rms=N02Ts(1-22)
  N0是白噪声的单边功率谱密度,Ts是采样频率。采样频率最好取为10的因子并且略大于系统带宽,这样在整个带宽内白噪声都有一个平坦的功率谱。
  程序输入输出量说明:
  function noise=shot_noise(Ts,N0,npts)
  Ts采样时间,fs=1/Ts采样频率,N0白噪声的单边功率谱密度,npts仿真所取的点,noise为所得到的噪声数值序列
  图3 仿真得到的白噪声时域波形
  1.4.2 计算功率谱密度的三种不同的方法
  函数中使用direct关键词则使用了直接法进行计算,又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。
  使用indirect关键词,使用间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,得到x(n)的功率谱估计。
  其中complex关键词,综合方法会将加入三种窗函数(Hamming,Kaiser,Chebyshev)的图谱估计直接显示在一幅图上,比较直观和明显。
  1.4.3 白噪声的功率谱密度
  为了验证产生的白噪声的性能,计算它的PSD进行验证
  function psd_s(Ts,N0,npts,method)
   % PSD of shot noise
  除了method外与产生程序的变量意义相同,method为产生功率谱密度算法参数。
  图4 仿真得到的白噪声功率谱
  1.5 仿真产生1/f噪声
  function noise=f1_noise(tsim,Ts,fc,N0,N,npts)
  % noise=f1_noise(tsim,Ts,fc,N0,N,npts)
  % variable declaration
  % Ts: 采样时间长度
  % N:10倍频数辆
  % tsim:总仿真时长
  % fs:采样周期
  % fc:转角频率
  具体源程序代码见2.1.1节
  图5 仿真得到的1/f噪声时域波形
  tsim,仿真持续时间,Ts采样时间,N10倍频段,fs采样频率,npts总共仿真的点数。
  得到了一个杂乱无章的1/f噪声时域波型,需要验证它就是我们所需要的。
  1.6 1/f噪声的功率谱密度
  function psd_f(tsim,Ts,fc,N0,N,npts,method)
  % pad_f(tsim,Ts,fc,N0,N,npts,method)
  % variable declaration
  % Ts: Sampling Period
  % N:frequecncy decades
  % tsim:total simulated time interval
  % fs:Sampling Frequency
  % fc:corner frequncy
  具体的源程序代码见2.1.2节。
  除了method外与产生程序的变量意义相同,method为产生功率谱密度算法参数。
  direct用直接法进行计算,直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。
  ndirect,间接法由序列x(n)估计出自相关函数R(n),对R(n)进行傅立叶变换,得到x(n)的功率谱估计。
  其中complex方法,会将加入三种窗函数的图谱估计直接显示在一幅图上。
  图6 仿真得到的1/f噪声功率谱密度
  可以看到,PSD近似与lnf成一个反比的关系,随着f的增大而减小。对图形进行处理,横轴以ln(1/f)为坐标,下降的关系是成直线的,在低频率范围内出现的扭曲,是滤波器传递函数在N>Neff时的近似造成的。
  图7 对数坐标-1/f功率谱密度
  取对数坐标作图(见图7),舍弃超过转角频率的点,进行线性拟合得到:b=-1.4486 a=-2.2333r=-3.9922
  2 仿真过程的实现
  2.1 仿真产生1/f噪声
  2.1.1 仿真产生1/f噪声的程序
  function noise=f1_noise(tsim,Ts,fc,N0,N,npts)
  % noise=f1_noise(tsim,Ts,fc,N0,N,npts)
  % variable declaration
  % Ts: Sampling Period
  % N:frequecncy decades
  % tsim:total simulated time interval
  % fs:Sampling Frequency
  % fc:corner frequncy
  Neff=1+log10(tsim/Ts);%parameter Neff
  noise_tmp=shot_noise(Ts,N0,npts);
  fs=1/Ts;
  % Generation white noise using the shot_noise function
  fn=0;
  for n=0:N
  if n<=Neff
  b=[0 ((10^(-0.5*n))*sqrt(2)*pi*fc/fs)];
  a=[1-1*exp(-2*pi*(10^(-n))*fc/fs)];
  fn=fn+filter(b,a,noise_tmp);
  else
  fn=fn+sqrt(N0*pi*fc/4)*randn(1,1);
   end
  end
  plot(fn);pause;
  noise=fn;
  2.1.2 1/f噪声功率谱密度计算程序
  function psd_f(tsim,Ts,fc,N0,N,npts,method)
  % pad_f(tsim,Ts,fc,N0,N,npts,method)
  % variable declaration
  %Ts: Sampling Period
  %N:frequecncy decades
  %tsim: total simulated time interval
  %fs: Sampling Frequency
  %fc: corner frequncy
  % methods
  % 'direct'
  % 'indirect'
  % 'periodogram'
  % 'Kaiser'
  % 'Chebyshev'
  % 'complex'
  noise=f1_noise(tsim,Ts,fc,N0,N,npts);
  Fs=1/Ts;
  n=N0;
  xn=noise;
  %direct method
  switch lower(method)
   case{'direct'}
   window= boxcar(length(noise));
   nfft=1024;
   [Pxx,f]=periodogram(noise,window,nfft,Fs);
   plot(f,10*log10(Pxx))
  %indirect method
  case{'indirect'}
   nfft=1024;
   window=boxcar(length(n));
   noverlap=0;
   p=0.9;
   [Pxx,Pxxc]=psd(xn,nfft,Fs,window,noverlap,p);
   index=0:round(nfft/2-1);
   k=index*Fs/nfft;
  plot_Pxx=10*log10(Pxx(index+1));
   plot_Pxxc=10*log10(Pxxc(index+1));
   figure(1)
   plot(k,plot_Pxx);
   pause;
   figure(2)
  plot(k,[plot_Pxx plot_Pxx-plot_Pxxc plot_Pxx+plot_Pxxc]);
  case {'periodogram'}
   % Instantiate spectrum object and call its PSD method.
  h=spectrum.periodogram('rectangular');
  hopts=psdopts(h,xn);% Default options based on the signal x
  set(hopts,'Fs',Fs,'SpectrumType','twosided','CenterDC',true);
   psd(h,xn,hopts)
   case{'kaiser'}
   h=spectrum.welch('hamming',64);
  hpsd1=psd(h,xn,'Fs',Fs);
  W=hpsd1.Frequencies;
  h.WindowName='Kaiser';
  hpsd2=psd(h,xn,'Fs',Fs);
  Pxx2=hpsd2.Data;
  hpsd=dspdata.psd(Pxx2,W,'Fs',Fs);
  plot(hpsd);
  legend('kaiser');
  case{'chebyshev'}
  h=spectrum.welch('hamming',64);
  hpsd1=psd(h,xn,'Fs',Fs);
  W=hpsd1.Frequencies;
  h.WindowName='Chebyshev';
  hpsd3=psd(h,xn,'Fs',Fs);
  Pxx3=hpsd3.Data;
  hpsd=dspdata.psd(Pxx3,W,'Fs',Fs);
  plot(hpsd);
  legend('Chebyshev');
  case{'complex'}
  h= spectrum.welch('hamming',64);
  % Create three power spectral density estimates.
  hpsd1=psd(h,xn,'Fs',Fs);
  Pxx1=hpsd1.Data;
  W=hpsd1.Frequencies;
  h.WindowName='Kaiser';
  hpsd2=psd(h,xn,'Fs',Fs);
  Pxx2=hpsd2.Data;
  h.WindowName='Chebyshev';
  hpsd3=psd(h,xn,'Fs',Fs);
  Pxx3=hpsd3.Data;
  % Instantiate a PSD data object and store the three different
  % estimates since they all share the same frequency information.
  hpsd=dspdata.psd([Pxx1, Pxx2, Pxx3],W,'Fs',Fs);
  plot(hpsd);
  legend('Hamming','kaiser','Chebyshev');
  end
  3 结论
  用产生白噪声加滤波器的方法比较容易仿真产生1/f噪声,并且仿真得到的1/f噪声较真实。
  
  参考文献
  [1]Tae-Hoon Lee, Gyuseong Cho Chap1. Monte Carlo based time-domain Hspice noise simulation for CSA-CRRC cricuit[J]. Nuclear Instruments and Methods in Physics Research Section A, 2003,505:328-333.
  [2]Terry,S.C. Blalock, B.J. Rochelle, J.M. Ericson, M.N. Caylor, S.D. Time-domain noise analysis of linear time-Invariant and linear time-variant systems using MATLAB and HSPICE[C]. Nuclear Science, IEEE Transactions on 2005,52:805-812.
  [3]王爱萍,王惠南.基于小波分析的1/f噪声降噪 [J].数据采集与处理,2006.
  [4]文 俊,陈良栋.1/f噪声源以及MOS器件中的1/f噪声[J].电子器件,1996.
其他文献
摘 要:面向航海的地理信息系统的建立和发展相对于陆地而言具有更高的难度和紧迫性。本文针对目前国内外现状,讨论了面向航海应用的地理信息系统的特点、应用现状、关键技术及其未来的发展方向,希望能够对相关方面的研究有一定的参考作用。  关键词:航海;地理信息系统;关键技术  中图分类号:U644 文献标志码:A文章编号:1671-7953(2009)01-0010-03    Key Technology
期刊
提 要:本文提出了一种新的预测旋转机械随机响应方法——人工神经网络方法。研究了这种神经网络结构的学习算法。为了保证快速学习收敛,应用Lyapunov函数得到一种自适应学习率方法。用这种方法对某直立转子的地震响应进行在线预测,计算机仿真结果表明,这种网络学习算法是有效的,并且是可行的。  关键词:自递归神经网络;学习率;转子响应    Predicting Random Response of Hi
期刊
摘 要:正确的教育观和工科教育的工程观是工科院校人才培养模式的先导和灵魂。本文提出工科高校要用适合时代要求的“工程教育观”更新传统上狭窄的“技术教育观”,面向基层培养大批能综合运用现代科学理论和技术手段,懂技术、会管理,兼备人文精神和科学精神的实践性、综合性、创新性、人文文化都比较强的复合型应用型人才;并从课程体系改革、实践环节强化、专业教育和引导、机制与载体创新等方面对复合型应用型人才培养的途径
期刊
摘要:为了避免江河湖面上来往船只可能造成对桥墩的撞击,设计了一种基于知识的桥墩防撞智能化的系统。在桥墩设防区域的江河湖面上设置一定的监视区,一旦来往船只进入设防区域,系统能给出相应的警示报警和处理。  关键词:桥墩防撞;警示报警;产生式规则;智能系统  中图分类号:TP182文献标志码:A文章编号:1671-7953(2009)01-0045-04    Knowledge Based Intel
期刊
摘要:国产化CAD软件究竟如何发展,要看到它的内在定律,但国产化软件不排斥学习国外先进技术。通过企业应用,看到CAD是一种知识化产品,要经过培训、服务才能发挥最大效益。  关键词:CAD技术;发展阶段;发展趋势  中图分类号:TP391.72文献标志码:A文章编号:1671-7953(2009)01-0052-03    Discuss the Development Trend of CAD i
期刊
摘 要:作者通过分析三相异步交流电动机固有和人为机械特性,推导出了一个简单实用的电磁转矩计算公式,结合SolidWorks软件的CAE插件COSMOSMotion的动力学仿真功能,建立了交流机电传动系统的动力学仿真模型。运用此模型可以仿真机电传动系统各种工况下的过渡过程,并取得各种重要特性曲线,如速度、加速度、电磁转矩的过渡过程曲线,以便对此系统进行评价和研究。本文所提出的研究方法适用于各种直流、
期刊
摘要:本文对遗传算法的基本特点、步骤和流程和基于MATLAB的遗传算法优化工具箱进行了介绍,结合多目标函数问题的优化实例,说明了遗传算法是一种具有良好的全局寻优性能的优化方法。  关键词:遗传算法;MATLAB;多目标函数优化  中图分类号:TP311文献标志码:B文章编号:1671-7953(2009)01-0049-03    Multi-objective Optimization Base
期刊
摘 要:在基于嵌入式Linux系统的设计当中,一项最基本的也是嵌入式系统开发中至关重要的工作就是移植或构建一个Boot Loader。文章分析了Boot Loader工作原理及Blob的启动流程,介绍了Blob移植的基本过程,并成功实现了Blob在基于IntelPXA270处理器平台上的移植工作,目前Blob运行稳定。该移植方法具有一定的实践参考和借鉴意义。  关键词:嵌入式系统;引导程序;Blo
期刊
摘 要:现代仿真技术已经不满足于单纯的数字仿真,为了更好的表达效果,视景仿真作为人机交互的手段,成为了必然的选择。对于基于OpenGL的鱼雷仿真系统进行了详细的描述。为了能更方便的建立复杂的三维模型,应用了3DS作为OpenGL的辅助建模工具,同时利用OpenGL读取3DS模型。建立了仿真的框架,十分详细的讲述了仿真渲染的过程,同时应用了一种提高渲染速度的新方法。最后以仿真图的形式给出了仿真结果,
期刊
摘 要:随着网络应用越来越广泛,对各种嵌入式系统的网络功能要求越来越高。希望系统能够支持TCP/IP及其他Internet协议,使我们能够通过用户熟悉的浏览器查看设备状态、设置设备参数,或者将设备采集到的数据通过网络传送到Windows或Unix/Linux服务器上的数据库中。本文对嵌入式系统的网络连接由设备互联到以太网网络互联的实现进行深入讨论并提出解决方案。  关键词:嵌入式系统;网络;lin
期刊