主要内容

估计功率谱MATLAB

时域信号的功率谱(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进行功率谱估计。简介

要查看信号的功率谱,可以使用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的高斯噪声。若要获取光谱数据以作进一步处理,请使用isNewDataReadygetSpectrumData对象的功能。的变量数据包含在频谱分析仪上显示的光谱数据以及有关光谱的其他统计信息。

数据= [];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的比值。在双面谱中,这个值为美元\压裂f s {} {} {1024} $,而在单侧光谱中,它是$ \压裂{\压裂f s {} {} {2}} {1024} $.本例中的频谱分析仪显示的是单侧频谱。因此,RBW为(44100/2)/1024或21.53Hz

使用这个值RBW美元,计算一次光谱更新所需的输入样本数,美元N_{样本}$由下式给出:$N_{samples} = \frac{F_{s}}{RBW}$

在这个例子中,美元N_{样本}$是44100/21.53或2048个样本。

RBW美元在“自动”模式下计算,给出了良好的频率分辨率。

为了区分显示中的两个频率,两个频率之间的距离必须至少为RBW。在本例中,两个峰值之间的距离为4000hz,大于RBW美元.因此,你可以清楚地看到山峰。将第二个正弦波的频率改为1015hz。两个频率之间的差值小于RBW美元

释放(Sineobject2);Sineobject2。Fre问uency=1015;Iter = 1:5000 Sinewave1 = Sineobject1();Sinewave2 = Sineobject2();输入= Sinewave1 + Sinewave2;NoisyInput = Input + 0.001*randn(1024,1);SA (NoisyInput);结束释放(SA);

这些峰无法分辨。

若要增加频率分辨率,请减小RBW美元到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

将“功率单位为瓦”转换为dBW和dBm

权力瓦分贝由:

P d B W 10 日志 10 p o w e r n w 一个 t t / 1 w 一个 t t

权力dBm由:

P d B 10 日志 10 p o w e r n w 一个 t t / 1 l l w 一个 t t

对于振幅为1v的正弦波信号,其单侧频谱的功率为美国瓦茨由:

P W 一个 t t 年代 一个 2 / 2 P W 一个 t t 年代 1 / 2

在这个例子中,这个功率等于0.5 W。dBm中对应的功率为:

P d B 10 日志 10 p o w e r n w 一个 t t / 1 l l w 一个 t t P d B 10 日志 10 0.5 / 10 3.

这里的功率为26.9897 dBm。若要使用峰值查找器确认此值,请单击工具>测量>峰仪

对于白噪声信号,所有频率的频谱都是平坦的。本例中的频谱分析仪显示范围为[0 Fs/2]的单侧频谱。对于方差为1e-4的白噪声信号,单位带宽功率(Punitbandwidth)是1e-4。白噪声的总功率美国瓦茨在整个频率范围内为:

P w h t e n o 年代 e P u n t b 一个 n d w d t h n u b e r o f f r e u e n c y b n 年代 P w h t e n o 年代 e 10 4 F 年代 / 2 R B W P w h t e n o 年代 e 10 4 22050 21.53

频率箱的数量是总带宽与RBW的比值。对于单侧频谱,总带宽是采样率的一半。本例中RBW为21.53 Hz。有了这些值,白噪声的总功率在美国瓦茨为0.1024 W。在dBm中,白噪声的功率可以用10 * log10 (0.1024/10 ^ 3),等于20.103 dBm。

将功率转换为dBFS

如果你把光谱单位设置为dBFS并设置全比例(FullScaleSource)汽车,接通电源dBFS计算为:

P d B F 年代 20. 日志 10 P w 一个 t t 年代 / F u l l _ 年代 c 一个 l e

地点:

  • P美国瓦茨功率单位是瓦吗

  • 对于双精度和浮点数信号,Full_Scale为输入信号的最大值。

  • 对于定点或整数信号,Full_Scale是可以表示的最大值。

如果指定手动满刻度(setFullScaleSource财产),接通电源dBFS由:

P F 年代 20. 日志 10 P w 一个 t t 年代 / F 年代

在哪里FS中是否指定了完整的比例因子全尺度的财产。

对于振幅为1v的正弦波信号,其单侧频谱的功率为美国瓦茨由:

P W 一个 t t 年代 一个 2 / 2 P W 一个 t t 年代 1 / 2

在本例中,该功率为0.5 W,正弦波的最大输入信号为1v。dBFS中对应的幂为:

P F 年代 20. 日志 10 1 / 2 / 1

这里,幂等于-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中的Power转换为Vrms中的RMS

权力dBm由:

P d B 10 日志 10 p o w e r n w 一个 t t / 1 l l w 一个 t t

RMS中的电压为:

V r 年代 10 P d B / 20. 10 3.

从前面的例子中,PdBm等于26.9897 dBm。Vrms的计算方法为

V r 年代 10 26.9897 / 20. 0.001

等于0.7071。

确认此值:

  1. 改变类型RMS

  2. 点击打开峰值查找器工具>测量>峰仪

利用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)”“标题”"关于样本的单边功率谱");

估计

输入并估计信号的功率谱。构造一个-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轴从基于样本转换为基于频率,请执行以下操作:

  • 点击配置属性图标。

  • 对于单侧光谱-开主要选项卡,设置样本增量Fs / FrameLength美元而且x为0。

  • 对于双面光谱-开主要选项卡,设置样本增量Fs / FrameLength美元而且x- f / 2美元

在这个例子中,谱是单侧的,因此样本增量而且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对象包含光谱数据,可用于进一步处理。数据可以实时处理,也可以存储在工作空间中。

相关的话题