擅长:python、mysql、java
<p>您的数据是正确的,只是您没有正确地预处理它:</p>
<ol>
<li>第一个巨大的峰值是信号的直流电/平均值。如果你在做DFT之前减去它,它就会消失</li>
<li>在进行DFT之前不加窗会在DFT频谱中产生振铃,降低峰值并提高“非峰值”。在</li>
</ol>
<p>如果包含这两个步骤,则结果应该与您预期的更接近:</p>
<pre><code>import numpy as np
import scipy.signal
from matplotlib import pyplot as plt
L = np.array([2.762, 2.762, 1.508, 2.758, 2.765, 2.765, 2.761, 1.507, 2.757, 2.757, 2.764, 2.764, 1.512, 2.76, 2.766, 2.766, 2.763, 1.51, 2.759, 2.759, 2.765, 2.765, 1.514, 2.761, 2.758, 2.758, 2.764, 1.513, 2.76, 2.76, 2.757, 2.757, 1.508, 2.763, 2.759, 2.759, 2.766, 1.517, 4.012])
L = np.round(L, 1)
# Remove DC component
L -= np.mean(L)
# Window signal
L *= scipy.signal.windows.hann(len(L))
fft = np.fft.rfft(L, norm="ortho")
plt.plot(L)
plt.figure()
plt.plot(abs(fft))
</code></pre>
<p>您将注意到,您将在<code>8</code>左右看到一个峰值,另一个峰值在两倍<code>16</code>处。这也是意料之中的:周期信号在<code>n*period</code>采样之后总是周期性的,其中n是任何自然数。在你的例子中:<code>n*8</code>。在</p>