时域信号的功率谱(PS)是基于有限数据集的信号中包含的功率在频率上的分布。信号的频域表示通常比时域表示更容易分析。许多信号处理应用,如噪声消除和系统识别,都是基于信号的特定频率修改。功率谱估计的目的是从一个序列的时间样本中估计信号的功率谱。根据对信号的了解,估计技术可以包括参数或非参数方法,并可以基于时域或频域分析。例如,一种常见的参数技术包括将观测值拟合到自回归模型中。一种常见的非参数技术是周期图。采用傅立叶变换方法进行功率谱估计,如韦尔奇法和滤波器组法。对于长度相对较小的信号,滤波器组方法产生的频谱估计具有更高的分辨率,更准确的噪声底噪声,峰值比Welch方法更精确,且频谱泄漏低或没有。这些优势是以增加的计算量和较慢的跟踪速度为代价的。 For more details on these methods, see光谱分析.您还可以使用其他技术,如最大熵法。
在MATLAB®,您可以执行实时频谱分析的动态信号使用dsp。年代pectru米一个n一个lyzer
系统对象™。属性可以在频谱分析仪中查看频谱数据,并将数据存储在工作空间变量中isNewDataReady
和getSpectrumData
对象的功能。或者,你可以用dsp。年代pectru米Estimator
系统对象,然后是dsp。一个rr一个yPlot
对象查看光谱数据。输出dsp。年代pectru米Estimator
对象是光谱数据。这些数据可用于进一步处理。
如果需要查看信号的功率谱,可以使用dsp。年代pectru米一个n一个lyzer
系统对象™。你可以改变输入信号的动态,并实时看到这些变化对信号功率谱的影响。
初始化
初始化正弦波源,生成正弦波;初始化频谱分析仪,显示信号的功率谱。输入的正弦波有两个频率:一个是1000赫兹,另一个是5000赫兹。创建两个dsp。年代我neW一个ve
对象,一个产生1000 Hz的正弦波,另一个产生5000 Hz的正弦波。
Fs = 44100;Sineobject1 = dsp。SineWave (“SamplesPerFrame”, 1024,“PhaseOffset”10...“SampleRate”Fs,“频率”, 1000);Sineobject2 = dsp。SineWave (“SamplesPerFrame”, 1024,...“SampleRate”Fs,“频率”, 5000);SA = dsp。年代pectru米一个n一个lyzer(“SampleRate”Fs,“方法”,滤波器组的,...“SpectrumType”,“权力”,“PlotAsTwoSidedSpectrum”假的,...“ChannelNames”,{“输入功率谱”},“YLimits”, 40 [-120],“ShowLegend”,真正的);
频谱分析仪采用滤波器组的方法来计算信号的功率谱。
估计
输入并估计信号的功率谱。构造一个为
循环运行5000次迭代。在每次迭代中,流1024个样本(一帧)的每个正弦波,并计算每个帧的功率谱。为了产生输入信号,将两个正弦波相加。合成的信号是一个具有两个频率的正弦波:一个在1000赫兹,另一个在5000赫兹。加入均值为零、标准差为0.001的高斯噪声。为了获得进一步处理的光谱数据,使用isNewDataReady
和getSpectrumData
对象的功能。的变量数据
包含在频谱分析仪上显示的频谱数据,以及有关频谱的额外统计信息。
数据= [];为Iter = 1:7000 sininewave1 = sinineobject1 ();Sinewave2 = Sineobject2 ();Input = Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);SA (NoisyInput);如果SA。我年代NewDataReady data = [data;getSpectrumData(SA)];结束结束释放(SA);
在频谱分析仪的输出中,你可以看到两个不同的峰值:一个在1000赫兹,另一个在5000赫兹。
分辨率带宽(Resolution Bandwidth, RBW)是频谱分析仪能分辨的最小频率带宽。默认情况下,RBWSource
财产的dsp。年代pectru米一个n一个lyzer
对象设置为汽车
.RBW是频率广度与1024的比值。在双边谱中,这个值是但从单方面的角度来看,事实的确如此.本例中的频谱分析仪显示的是单侧频谱。因此,RBW是(44100/2)/1024或21.53Hz
使用,计算一个光谱更新所需的输入样本的数量,为下式:.
在这个例子中,是44100/21.53或2048个样品。
在“自动”模式下计算得到一个很好的频率分辨率。
为了区分显示器上的两个频率,两个频率之间的距离必须至少为RBW。在本例中,两个峰值之间的距离为4000 Hz,大于.因此,你可以清楚地看到山峰。改变第二个正弦波的频率为1015hz。这两个频率之间的差值小于.
释放(Sineobject2);Sineobject2。Fre问uency=1015;为Iter = 1:50 000 sininewave1 = sinineobject1 ();Sinewave2 = Sineobject2 ();Input = Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);SA (NoisyInput);结束释放(SA);
山峰是无法区分的。
要提高频率分辨率,就要降低频率1赫兹。
SA。RBW年代ource=“属性”;SA。RBW=1;为Iter = 1:50 000 sininewave1 = sinineobject1 ();Sinewave2 = Sineobject2 ();Input = Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);SA (NoisyInput);结束释放(SA);
在放大时,两个相隔15赫兹的峰值现在可以区分了。
当频率分辨率增大时,时间分辨率减小。要在频率分辨率和时间分辨率之间保持良好的平衡,就要改变频率分辨率RBWSource
财产汽车
.
在流处理过程中,您可以更改输入属性或频谱分析仪属性,并立即看到对频谱分析仪输出的影响。例如,当环路的索引是1000的倍数时,改变第二个正弦波的频率。
释放(Sineobject2);SA。RBW年代ource=“汽车”;为Iter = 1:50 000 sininewave1 = sinineobject1 ();如果(mod(Iter,1000) == 0)释放(Sineobject2);Sineobject2。Fre问uency=Iter; Sinewave2 = Sineobject2();其他的Sinewave2 = Sineobject2 ();结束Input = Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);SA (NoisyInput);结束释放(SA);
在运行流循环时,可以看到第二个正弦波的峰值随着迭代值的变化而变化。类似地,您可以在模拟运行时更改频谱分析仪的任何属性,并在输出中看到相应的更改。
频谱分析仪提供三个单位来指定功率谱密度:瓦特/赫兹
,dBm /赫兹
,瓦分贝/赫兹
.对应的功率单位为美国瓦茨
,dBm
,瓦分贝
.对于电气工程应用,您也可以查看信号的RMS在Vrms
或伏特分贝
.缺省情况下,spectrum类型为权力在dBm
.
权力瓦分贝
是由:
权力dBm
是由:
对于振幅为1v的正弦波信号,其单侧频谱的功率为美国瓦茨
是由:
在这个例子中,这个功率等于0.5 W。对应的dBm功率为:
这里的功率等于26.9897 dBm。要用峰值查找器确认此值,请单击工具>测量>峰仪.
对于白噪声信号,所有频率的频谱都是平坦的。本例中的频谱分析仪在[0 Fs/2]范围内显示单侧频谱。对于方差为1e-4的白噪声信号,单位带宽功率(Punitbandwidth)是1的军医。白噪声的总功率美国瓦茨在整个频率范围内为:
频率箱的数量是总带宽与RBW的比值。对于单侧频谱,总带宽是采样率的一半。本例中RBW为21.53 Hz。有了这些值,白噪声的总功率就进来了美国瓦茨0.1024 W。在dBm中,白噪声的功率可以用10 * log10 (0.1024/10 ^ 3),等于20.103 dBm。
如果将光谱单位设置为dBFS
并设置满量程(FullScaleSource
)汽车
,权力dBFS
计算为:
地点:
P美国瓦茨
功率的单位是瓦吗
对于双精度和浮点数信号,Full_Scale为输入信号的最大值。
对于定点或整数信号,Full_Scale是可表示的最大值。
如果您指定一个手动满量程(集FullScaleSource
来财产
),在dBFS
是由:
在哪里FS
表格中是否规定了全部比例系数全尺度的
财产。
对于振幅为1v的正弦波信号,其单侧频谱的功率为美国瓦茨
是由:
在这个例子中,这个功率等于0.5 W,正弦波的最大输入信号是1v。dBFS中相应的幂为:
这里,幂等于-3.0103。要在频谱分析仪中确认此值,请运行以下命令:
Fs = 1000;%采样频率sinef = dsp.SineWave('SampleRate',Fs,'SamplesPerFrame',100);范围= dsp.SpectrumAnalyzer(“SampleRate”,Fs,…'SpectrumUnits','dBFS','PlotAsTwoSidedSpectrum',false) %% for ii = 1:10万xsin = sinef();范围(xsine)结束
权力dBm
是由:
电压的有效值是:
从前面的例子,PdBm= 26.9897 dBm。Vrms是计算
等于0.7071。
确认此值:
改变类型来RMS
.
点击打开峰值查找器工具>测量>峰仪.
或者,您可以使用dsp。年代pectru米Estimator
系统对象。您可以获得频谱估计器的输出,并存储数据以作进一步处理。中查看其他对象估计
图书馆,类型帮助dsp
在MATLAB®命令提示符中,单击估计
.
初始化
使用与上一节中使用的相同的源代码dsp。年代pectru米一个n一个lyzer
来估计功率谱。输入的正弦波有两个频率:一个是1000赫兹,另一个是5000赫兹。初始化dsp。年代pectru米Estimator
用滤波器组方法计算信号的功率谱。查看信号的功率谱dsp。一个rr一个yPlot
对象。
Fs = 44100;Sineobject1 = dsp。SineWave (“SamplesPerFrame”, 1024,“PhaseOffset”10...“SampleRate”Fs,“频率”, 1000);Sineobject2 = dsp。SineWave (“SamplesPerFrame”, 1024,...“SampleRate”Fs,“频率”, 5000);规范= dsp。年代pectru米Estimator(“方法”,滤波器组的,...“PowerUnits”,dBm的,“SampleRate”Fs,“FrequencyRange”,“单向的”);ArrPlot = dsp。ArrayPlot (“PlotType”,“行”,“ChannelNames”,{“输入功率谱”},...“YLimits”, 30 [-80],“包含”,“每帧样本数目”,“YLabel”,...“权力(dBm)”,“标题”,“样品的单边功率谱”);
估计
输入并估计信号的功率谱。构造一个为
循环运行5000次迭代。在每次迭代中,流1024个样本(一帧)的每个正弦波,并计算每个帧的功率谱。在输入信号中加入均值为0,标准差为0.001的高斯噪声。
为Iter = 1:50 000 sininewave1 = sinineobject1 ();Sinewave2 = Sineobject2 ();Input = Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);PSoutput =规范(NoisyInput);ArrPlot (PSoutput);结束
采用滤波器组方法,谱估计分辨率高,谱峰精度高,无谱泄漏。
转换x-轴表示频率
默认情况下,阵列图显示了功率谱数据与每帧的样本数量。x轴上的点数等于输入帧的长度。频谱分析仪绘制功率谱数据与频率的关系。对于单侧频谱,频率在[0 Fs/2]范围内变化。对于双边频谱,频率在[-Fs/2 Fs/2]范围内变化。要将数组图的x轴从基于样本转换为基于频率,请执行以下操作:
点击配置属性图标。
单侧光谱-开主要选项卡,设置样本增量来和x为0。
对于一个双边光谱-开主要选项卡,设置样本增量来和x来.
在这个例子中,频谱是片面的,因此样本增量和x分别为44100/1024和0。要指定以千赫为单位的频率,请设置样本增量44.1/1024。
arrplot.sampleincrement =(fs / 1000)/ 1024;arrplot.xlabel =.的频率(赫兹);ArrPlot。Title =“相对于频率的单侧功率谱”;为Iter = 1:50 000 sininewave1 = sinineobject1 ();Sinewave2 = Sineobject2 ();Input = Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);PSoutput =规范(NoisyInput);ArrPlot (PSoutput);结束
现场处理
输出dsp。年代pectru米Estimator
对象包含光谱数据,可用于进一步处理。数据可以实时处理,也可以存储在工作空间中。