关于dsp.SpectrumAnalyzer输出值的几个问题

信息处理 matlab 功率谱密度 频谱估计
2022-01-27 00:39:52

我正在测试混有白噪声的正弦波的 dsp.SpectrumAnalyzer 的输出值。σ2白噪声的 1e-4,所以我用0.01*randn(1024,1)它来生成它。正弦波由dsp.SineWave默认幅度 (=1) 生成。采样率为 44100 Hz。如果默认设置了'SpectrumType'属性dsp.SpectrumAnalyzer('Power'),则示波器输出如下:

在此处输入图像描述 根据Estimate the Power Spectral Density in MATLAB的“将功率转换为 dBW 和 dBm”部分的分析,峰值为 26.9897 dBm,这就是上面的屏幕截图显示的。但是图中的其他值让我感到困惑。我会一一问他们。

(1) 白噪声的功率谱为σ2=1e-4(对吗?),10*log10(1e-4/1e-3)根据上面链接中的定义,即=-10dBm。但该图显示白噪声的功率谱在-40dBm。这个值是如何获得的?PS:如果我们以 dBW 为单位计算功率谱,10*log10(1e-4)=-40 接近于图中所示,但这里我使用的是 dBm 单位!

(2) 如果我将'SpectrumType'属性更改dsp.SpectrumAnalyzer为'功率密度',System对象的输出如下:

在此处输入图像描述

根据文档dsp.SpectrumAnalyzer System object中对此属性的解释,现在正弦波的峰值应该是“归一化为 1 赫兹带宽的频谱的幅度平方”。频谱是0.5,所以它的平方是0.25,我期望得到的dBm应该是10*log10(0.25/1e-3)=23.9794dBm,但是我在图中看到的是12.6948dBm。这个值是如何获得的?

(3) 我们再来看看白噪声的功率谱密度。根据上述问题中的定义,该值应为10*log10(1e-4^2/1e-3)=-50dBm。我不确定计算是否正确,但它接近数字,虽然似乎有一些距离。问题是,在 MATLAB 中估计功率谱密度的“将功率转换为 dBW 和 dBm”部分Pwhitenoise=1e-4*(22050/21.53)=0.1024,但如果我们计算 dBm,我们得到10*log10(0.1024^2/1e-3)=10.2060。令我惊讶的是,该网页随后显示“白噪声的总功率为 -39.87 dBm”。这个 -39.87 dBm 是如何获得的?

我对这些价值观完全感到困惑。如果您能帮助我澄清它们,我将不胜感激。非常感谢!

以下是您的实验的一些参考代码。我正在使用最新的 Matlab R2016a。

Fs = 44100;
Sineobject1 = dsp.SineWave('SamplesPerFrame',1024, 'PhaseOffset',10,...
    'SampleRate',Fs,'Frequency',5000);
SA = dsp.SpectrumAnalyzer('SampleRate',Fs,'SpectrumType','Power',...
    'PlotAsTwoSidedSpectrum',false,'Window','Hann',...
    'ChannelNames',{'PSD of the input'},'ShowLegend',true);
for Iter = 1:5
    Sinewave1 = step(Sineobject1);
    Input = Sinewave1;
    NoisyInput = Input + 0.01*randn(1024,1);
    step(SA,NoisyInput);
end
1个回答

我真的不知道 Matlab 的频谱分析仪在内部做什么,但我怀疑它模仿了实际频谱分析仪的行为——它根本不做 DFT,然后对输出进行平方。

相反,SA 在整个频谱中移动过滤器。该滤波器的等效噪声带宽正是让多少白噪声功率通过并被测量以得出该显示中的单个点。因此,对于白噪声,功率谱密度和图中显示的功率之间总是存在“滤波器带宽”因素。

此外,滤波器不必单一的,即在您的正弦功率和显示功率之间可能还有另一个因素,即滤波器增益。

此外,在 SA 中,您通常需要将“频率提前步长”与滤波器带宽分开配置,从而定义窗口“重叠”的程度。matlab 文档的快速浏览说默认重叠是 0 - 所以你可能真的只是错过了你的正弦波的“峰值”。

总而言之,如果您还可以使用 Matlab 可以做的任何 PSD 估计器(从简单(窗口))一次直接估计频谱,而不会丢失任何信息,那么为什么要使用这种可视化是非常值得怀疑的FFT 估计器,用于更复杂的参数估计器。

这个工具的目的肯定只是说明如何对 Scope 上的测量进行建模,以及它们与 PSD 的数学概念有何不同。除非你需要为 SA 建模,否则我真的看不出这个工具有什么实用价值。