估计功率谱MATLAB
时域信号的功率谱(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估计功率谱。简介
若要查看信号的功率谱,可以使用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”,真正的);
频谱分析仪采用滤波器组方法计算信号的功率谱。
估计
输入并估计信号的功率谱。构造一个为
-循环运行5000次迭代。在每次迭代中,输入每个正弦波的1024个样本(一帧),并计算每帧的功率谱。要生成输入信号,需要将两个正弦波相加。产生的信号是具有两个频率的正弦波:一个是1000hz,另一个是5000hz。添加均值为零、标准差为0.001的高斯噪声。要获取光谱数据以作进一步处理,请使用isNewDataReady
和getSpectrumData
对象的功能。的变量数据
包含显示在频谱分析仪上的光谱数据以及有关光谱的其他统计信息。
数据= [];为Iter = 1:7000 Sinewave1 = Sineobject1();Sinewave2 = Sineobject2();输入= Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);SA (NoisyInput);如果SA。我年代NewDataReady data = [data;getSpectrumData(SA)];结束结束释放(SA);
在频谱分析仪的输出中,您可以看到两个不同的峰值:一个在1000hz,另一个在5000 Hz。
分辨带宽(Resolution Bandwidth, RBW)是频谱分析仪能分辨的最小频率带宽。默认情况下,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)释放(sinineobject2);Sineobject2。Fre问uency=Iter; Sinewave2 = Sineobject2();其他的Sinewave2 = Sineobject2();结束输入= Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);SA (NoisyInput);结束释放(SA);
在运行流循环时,可以看到第二个正弦波的峰值随着迭代值的变化而变化。类似地,您可以在模拟运行时更改频谱分析仪的任何属性,并在输出中看到相应的更改。
转换单位之间的功率
频谱分析仪提供三个单元来指定功率谱密度:瓦特/赫兹
,dBm /赫兹
,瓦分贝/赫兹
.相应的功率单位为美国瓦茨
,dBm
,瓦分贝
.对于电气工程应用,您还可以查看信号的均方根Vrms
或伏特分贝
.默认的频谱类型为权力在dBm
.
将功率转换为dBW和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
如果你把光谱单位设为dBFS
并设置全比例(FullScaleSource
)汽车
,电源接通dBFS
计算方法为:
地点:
P美国瓦茨
功率单位是瓦吗对于双信号和浮点信号,Full_Scale为输入信号的最大值。
对于定点或整数信号,Full_Scale是可以表示的最大值。
如果指定手动全比例尺(设置FullScaleSource
来财产
),接通电源dBFS
由:
在哪里FS
中是否指定了完整的比例因子全尺度的
财产。
对于振幅为1v的正弦波信号,单侧频谱的功率为美国瓦茨
由:
在这个例子中,这个功率等于0.5 W,正弦波的最大输入信号是1v。dBFS中相应的功率由:
这里,幂等于-3.0103。要在频谱分析仪中确认此值,运行以下命令:
Fs = 1000;%采样频率sinif = dsp.SineWave('SampleRate',Fs,'SamplesPerFrame',100);scope = sp. spectrum alyzer('SampleRate',Fs,…'SpectrumUnits','dBFS',' plotastwosidespectrum ',false) %% for ii = 1:100000 xsin = sinf ();范围(xsine)结束
将dBm中的Power转换为Vrms中的RMS
权力dBm
由:
有效值电压由:
从前面的例子中,PdBm等于26.9897 dBm。Vrms计算为
等于0.7071。
确认该值:
改变类型来
RMS
.通过单击打开峰值查找器工具>测量>峰仪.
用dsp估计功率谱。SpectrumEstimator
方法也可以计算信号的功率谱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)”,“标题”,“相对于样本的单边功率谱”);
估计
输入并估计信号的功率谱。构造一个为
-循环运行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。要指定以kHz为单位的频率,请设置样本增量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
对象包含光谱数据,可用于进一步处理。数据可以实时处理,也可以存储在工作空间中。