目标:我的目标是幂律分布的计算和显示。
Phyton 的输入:我提供的 Python 输入文件是 1 列的 .txt 文件。每个 .txt 文件都有一列从时间序列数据中提取的数值。我的脚本将 .txt 文件加载到 Python 中,然后在前者上应用 Welch 方法。结果是初始时间序列数据的功率谱。所有 23 个主题(.txt 文件)都被绘制成一张图像。
据我所知,我需要在功率谱的两个轴上应用对数来计算幂律分布。我有两个问题:
1.Python中似乎有很多方法(工具)可以计算幂律分布。基于我使用 Welch 而不是 FFT 的事实,您现在推荐什么方法来计算幂律分布?
2.是否可以根据我输入的时间序列数据直接计算幂律分布,或者我是否需要以将welch的输出(功率谱)作为最终创建幂律分布的输入?换句话说:如果我的目标只是显示幂律分布(而不是幂谱),我可以缩短我的代码甚至跳过 Welch 方法吗?
谢谢,菲利普
我当前使用 Welch 方法创建功率谱的代码如下所示。
# Initialize
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
from matplotlib.pyplot import cm
# Numpy.loadtxt – Loads data from a textfile.
# Scipy.signal.welch – Creation of the power-spectrum via welch method. f, Welch creates the ideal frequencies (f, Welch = Power Spectrum or Power Spectral Density)
Subjects = ["Subject1", "Subject2", "Subject3", "Subject4", "Subject5", "Subject7", "Subject8", "Subject9", "Subject10", "Subject11", "Subject12", "Subject13",
"Subject14", "Subject15", "Subject16", "Subject17", "Subject18", "Subject19", "Subject20", "Subject22", "Subject23", "Subject24", "Subject25"]
for Subject in Subjects:
Txt = np.loadtxt("/volumes/SanDisk2/fmri/dataset/processed/extracted_timeseriespython/restingstate/{0}/TimeSeries.SPC.Core_ROI.{0}.txt".format(Subject), comments="#", delimiter=None,
converters=None, skiprows=0, usecols=0, unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)
f, Welch = signal.welch(Txt, fs=1.0, window="hann", nperseg=None, noverlap=None, nfft=1024, detrend="constant", return_onesided=True, scaling="density", axis=-1, average="mean")
Colormap = plt.get_cmap("plasma")
Segment_Colormap = Colormap(np.linspace(0, 1, len(Subjects)))
plt.plot(f, Welch, c=Segment_Colormap[Subjects.index(Subject)], linewidth=2.5)
plt.show()
以下列是 Subject1 的输入数据的简化示例(.txt 文件输入)。
-0.315046 -0.0641514 -0.921697 -0.976516 -0.546322 -0.857073 -1.59524 -0.447158 0.559437 -0.0138681 0.308289 1.26514 1.4109 1.65135 0.70157 0.454801 1.20363 1.36459 0.26468 -0.487983 -0.181889 0.095632 -0.825288