Python周期图介绍
周期图
功率谱密度我们直接进入离散时间信号,跳过整个自上而下的场景,从连续信号开始。我们的数据经常被采样;因此,离散时间处理是我们在实践中使用的处理方法。 考虑一个离散信号,其中是信号的长度。这可以是整个信号,也可以是一个较大信号的长度窗口。 我们还假设信号在频率上采样,其中采样间隔是采样之间的时间间隔,以秒为单位。 PSD的Python解决方案测试数据: 在我们可以计算实际PSD之前,我们需要生成一些测试数据。为此,我们使用频率为10Hz和60Hz的两个正弦波。然后我们引入一些高斯噪声,看看我们是否可以从数据中分离出这两个频率分量。 代码: 测试设置配置。 使用Scipy标准信号分析包scipy.signal.periodogram是计算周期图的方便实现。我们可以用这种方法简单地确定功率谱密度。Scipy很容易使用;周期图法只需要提供真实信号数据和采样频率即可。为了确保该过程返回PSD而不是功率谱,我们还设置了scaling='density'。 该方法可以得到频率分量和相应的功率密度。 绘制数据在分别为10Hz和60Hz的频率下,我们可以很容易地区分这两个频率成分。它们都有相同的振幅,这在给定正弦波振幅的情况下是说得通的。 用scipy&welch的方法估计PSD对于长时间的传输,PSD的计算可能很耗时。估计PSD的一个众所周知的方法是韦尔奇的方法。Scipy也有一种技术,可以随时使用这种评估策略。 可以观察到,Welch的方法非常接近我们测试信号的幅度和频率成分。正确的频率成分很容易从噪声中分辨出来。 我们可以通过增加片段长度来获得更准确的估计。 使用较大的段长度来区分频率成分。当信号组件彼此靠近时,这很有用。 使用MatplotlibMatplotlib还包括一个计算和显示PSD的方法。它使用前面讨论过的Welch方法计算PSD。 其结果与韦尔奇的Scipy方法相当。如果您希望避免Scipy需求,Matplotlib可能会很有用。 朴素Python实现我们可以编写一个简单的Python实现,只需要numpy。这个实现完全遵循定义。它相当慢。如果您只需要计算几个频率的PSD,那么它可能很方便。 代码: 然后,为了计算频率的PSD,我们可以使用下面的代码; 代码: 结论现在您已经拥有了计算psd和周期图的基本工具。这很容易与传统的信号处理包。您还应该了解如何严格遵循数学定义,自己实现PSD方法。
下一个话题
PltPcolor Python
|