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