Skip to content

Instantly share code, notes, and snippets.

@AllenDowney
Created August 22, 2019 18:42
Show Gist options
  • Save AllenDowney/01954327864c0657575cd0f74206234e to your computer and use it in GitHub Desktop.
Save AllenDowney/01954327864c0657575cd0f74206234e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Estimating the period of a signal\n",
"\n",
"Allen Downey\n",
"\n",
"[MIT License](https://opensource.org/licenses/MIT)\n",
"\n",
"A Reddit user recently posted [this question](https://www.reddit.com/r/statistics/comments/csxq35/q_analysis_of_data_set_approximate_sine_wave/)\n",
"\n",
">I have temperatures reading over times (2 secs interval) in a computer that is control by an automatic fan. The temperature fluctuate between 55 to 65 in approximately sine wave fashion. I wish to find out the average time between each cycle of the wave (time between 55 to 65 then 55 again the average over the entire data sets which includes many of those cycles) . What sort of statistical analysis do I use?\n",
"\n",
">[The following] is one of my data set represents one of the system configuration. Temperature reading are taken every 2 seconds. Please show me how you guys do it and which software. I would hope for something low tech like libreoffice or excel. Hopefully nothing too fancy is needed.\n",
"\n",
"A few people recommended using FFT, and I agreed, but I also suggested two other options:\n",
"\n",
"1) Use a [cepstrum](https://en.wikipedia.org/wiki/Cepstrum), or\n",
"\n",
"2) Keep it simple and use [zero-crossings](https://en.wikipedia.org/wiki/Zero_crossing) instead.\n",
"\n",
"And then another person suggested autocorrelation. So, let's see what each of these solutions looks like and what works best.\n",
"\n",
"If you are too busy to read the whole thing, I think the best option is computing the distance between zero crossings using a spline fitted to the smoothed data."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The signal"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's the data provided by OP:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"974"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \"55 56 56 56 56 57 57 57 56 57 59 57 59 58 59 59 59 59 59 59 59 60 61 60 60 61 61 61 62 62 62 62 61 61 61 61 62 62 63 63 62 63 62 63 63 63 64 63 63 63 63 62 62 61 60 58 59 58 58 57 58 57 56 56 56 56 56 55 55 55 55 54 54 55 56 56 56 57 56 57 57 57 58 57 58 59 57 59 59 59 58 60 59 60 60 59 60 61 60 60 61 61 61 61 61 61 61 62 62 63 62 63 63 63 63 62 63 63 63 63 63 63 63 64 63 63 63 63 62 61 60 60 58 59 59 58 58 58 57 56 56 56 55 55 56 55 55 54 55 55 54 55 55 55 56 56 56 57 57 57 57 57 58 57 60 58 58 59 58 60 60 60 60 60 60 61 61 61 62 61 62 61 62 62 62 62 62 62 61 62 64 63 62 62 63 63 63 63 64 63 62 63 64 64 63 64 64 63 65 63 64 62 62 60 60 59 59 57 57 57 56 55 55 55 55 55 54 55 54 54 54 54 55 55 57 56 57 56 56 58 58 59 58 58 58 58 58 58 59 59 60 60 60 60 60 61 60 61 61 60 61 62 61 62 62 61 62 61 62 62 62 61 62 63 63 63 63 64 63 63 63 63 64 63 64 64 63 62 61 60 61 59 60 58 57 57 56 56 57 55 56 55 55 55 55 55 55 56 56 56 56 56 57 57 58 58 59 59 58 59 60 60 60 59 60 59 60 60 60 60 61 62 61 61 62 61 61 62 62 63 61 62 63 63 62 63 64 63 63 63 62 61 61 60 60 60 58 58 57 57 57 56 57 56 56 56 55 56 56 57 58 57 58 57 57 59 59 58 59 59 60 59 60 59 60 59 61 61 60 61 61 61 61 62 61 62 62 62 62 62 62 63 62 63 61 63 63 62 63 63 64 63 64 64 65 63 65 63 65 63 63 63 61 60 59 60 59 58 57 57 56 56 56 55 55 55 56 56 56 56 58 57 57 58 58 57 58 58 60 59 59 60 60 61 61 60 61 60 61 61 61 61 61 62 62 62 62 63 62 62 63 62 62 61 63 63 64 64 64 63 64 63 64 64 64 62 62 61 61 60 59 59 58 58 58 56 56 56 56 55 56 55 55 54 55 55 56 55 57 57 58 58 58 57 59 58 58 58 58 59 59 61 60 59 60 60 60 59 60 60 60 61 62 61 61 62 62 62 63 62 62 62 62 63 63 63 63 62 63 63 64 63 64 64 64 64 63 64 63 63 65 64 63 63 63 62 63 60 61 60 60 59 59 57 58 58 58 56 56 56 55 55 55 55 55 56 56 55 55 56 57 57 58 57 58 59 58 58 59 60 59 59 60 60 61 60 60 61 60 60 61 61 62 60 61 61 62 63 62 62 62 62 63 62 63 63 64 63 64 64 63 63 63 63 63 64 64 64 63 64 63 63 61 60 60 59 58 58 58 58 57 56 56 55 56 55 55 55 55 55 55 55 55 55 55 56 55 56 58 57 58 58 59 57 57 58 59 58 59 59 59 60 60 60 61 61 60 60 61 62 61 61 61 62 61 62 62 62 62 63 62 63 63 62 63 63 62 62 64 64 64 64 64 65 63 65 64 63 62 61 61 60 60 59 58 58 58 57 57 56 55 56 56 55 54 55 55 54 55 56 57 55 56 57 58 57 57 58 59 57 58 58 59 59 60 60 60 60 60 60 60 61 61 61 61 61 61 60 62 62 62 62 62 63 62 62 63 62 63 63 63 63 63 63 63 64 64 63 63 64 64 64 63 64 64 63 62 61 61 60 59 59 59 59 58 58 58 57 57 57 56 56 56 55 55 54 55 54 55 54 55 56 56 55 57 56 57 57 57 57 58 59 58 58 59 58 59 59 59 59 61 60 60 61 61 60 60 60 60 60 61 63 61 62 63 63 62 63 62 62 62 62 63 63 63 62 64 63 64 63 64 63 64 64 62 62 60 59 60 59 58 57 57 57 57 56 55 56 56 55 55 55 55 55 55 55 55 56 55 57 57 56 58 57 58 58 59 59 60 59 58 60 60 60 60 59 60 60 60 60 60 61 61 61 61 61 61 62 61 62 63 63 62 61 62 63 63 63 63 63 64 64 64 64 63 64 63 63 64 63 64 64 64 63 64 61 60 61 61 59 59 59 59 58 57 57 57 57 55 57 56 55 55 55\"\n",
"t = s.split()\n",
"len(t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I'll put it in an array and plot it:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"ys = np.array(t, dtype=float)\n",
"ts = np.arange(0, len(ys)) * 2"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(ts, ys)\n",
"plt.xlabel('Time (s)')\n",
"plt.ylabel('Temperature (C)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like a sawtooth. I guess the computer heats up linearly and the cools off quickly when the fan comes on.\n",
"\n",
"And it definitely looks periodic, although we should not assume that the period is constant. The computer might generate more heat under some conditions and heat up more quickly.\n",
"\n",
"### FFT\n",
"\n",
"Let's see if we can estimate the frequency. I'll center and the compute the (real) FFT."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"centered = ys - np.mean(ys)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"fft = np.fft.rfft(centered)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here are the frequencies in Hz."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"freq = np.fft.rfftfreq(len(centered), d=2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I'll plot the magnitude of the FFT versus frequency."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"mag = np.absolute(fft)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(freq, mag)\n",
"plt.xlabel('Frequency (Hz)')\n",
"plt.ylabel('abs(FFT)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like there's a nice peak at the fundamental frequency, and one visible harmonic. Since the wave resembles a sawtooth, I expected to see more harmonics.\n",
"\n",
"Anyway, we can find the index of the peak, the corresponding frequency, and the corresponding period."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"index = np.argmax(mag)\n",
"index"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.006673511293634497"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"freq[index]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"149.84615384615384"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"period = 1 / freq[index]\n",
"period"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like the period is about 150 seconds."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cepstrum\n",
"\n",
"A cepstrum can be a good way to estimate the fundamental frequency of a signal with strong harmonics. But this signal doesn't have a lot of harmonics, so I don't expect it to work well.\n",
"\n",
"Nevertheless, the idea is to treat the FFT as if it were a signal, and compute the IFTT of the squared magnitudes."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"fft = np.fft.fft(centered)\n",
"log_mag = np.log(mag**2)\n",
"log_mag -= np.mean(log_mag)\n",
"cepstrum = np.absolute(np.fft.ifft(log_mag))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's what it looks like:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(cepstrum)\n",
"plt.xlabel('Quefrency (samples)')\n",
"plt.ylabel('abs(cepstrum)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Not much help there. I withdraw my suggestion."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Zero crossings\n",
"\n",
"Because the signal has such clear periodic behavior, we can estimate the period just by counting zero crossings or measuring the distance between them.\n",
"\n",
"But with a noisy signal, we should smooth it first to make sure we don't get spurious crossings.\n",
"\n",
"I'll compute a moving average with a window width of 11."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"n = 11\n",
"w = np.ones(n)\n",
"w /= sum(w)\n",
"\n",
"smooth = np.convolve(w, centered, mode='valid')\n",
"ts = np.arange(0, len(smooth)) * 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's the smoothed signal."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(ts, smooth)\n",
"plt.xlabel('Time (s)')\n",
"plt.ylabel('Temperature (C)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The fancy way to count zero-crossings is to interpolate and compute roots."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from scipy.interpolate import InterpolatedUnivariateSpline\n",
"interp = InterpolatedUnivariateSpline(ts, smooth)\n",
"zeros = interp.roots()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can compute the average distance between zeros and double it to get the period."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"150.19431794935966"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diffs = np.diff(zeros)\n",
"diffs.mean() * 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Yup, looks like 150.\n",
"\n",
"One nice thing about this method is that we can use the variability in `diffs` to quantify the precision of the estimate."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.957380324695285"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"standard_error_of_the_mean = np.std(diffs) / np.sqrt(len(diffs))\n",
"standard_error_of_the_mean"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A [simpler way to count zero crossings](https://stackoverflow.com/questions/30272538/python-code-for-counting-number-of-zero-crossings-in-an-array) is to look for adjacent elements with opposite sign."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"26"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"crossings = ((smooth[:-1] * smooth[1:]) < 0).sum()\n",
"crossings"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And divide the duration by the number of crossings."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1928"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"duration = len(smooth) * 2\n",
"duration"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like the period is about 150 s."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"148.30769230769232"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"period = duration / crossings * 2\n",
"period"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The simple method might be less accurate with another dataset, since there's no guarantee we have an integer number of periods in the observation window."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Autocorrelation\n",
"\n",
"Another reddit user suggests:\n",
"\n",
">Autocorrelation. Note that we get multiply peaks for different \"harmonics\", acutally this analysis shows that the second harmonic has a higher correlation than the \"fundamental\", you could not see this easily from only peak-to-peak analysis.\n",
"\n",
"They provided the following code to demonstrate:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Autocorrelation: 84\n",
"Mean peak difference: 81.27272727272727\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"from scipy.signal import detrend\n",
"\n",
"x = ys\n",
"\n",
"c = np.correlate(x,x,mode='full')\n",
"c = detrend(c[c.shape[0]//2:])\n",
"cpeak = c[50:130].argmax()+50\n",
"print('Autocorrelation:',cpeak)\n",
"\n",
"peaks = np.array([x[n*80:n*80+80].argmax()+n*80\n",
" for n in range(x.shape[0]//80)])\n",
"mpeaks = np.mean(peaks[1:] - peaks[:-1])\n",
"print('Mean peak difference:',mpeaks)\n",
"\n",
"from matplotlib import pyplot as plt\n",
"plt.subplot(211)\n",
"plt.plot(c, label='autocorrelation')\n",
"plt.plot(cpeak, c[cpeak], 'x', label='selected peak = %d'%cpeak)\n",
"plt.legend()\n",
"plt.subplot(212)\n",
"plt.plot(x, label='data')\n",
"plt.plot(peaks, x[peaks], 'x', label='peaks, mean diff = %0.02f'%mpeaks)\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The selected lag in the ACF is 84 samples, which corresponds to a period of 168 seconds, a little higher than my estimates.\n",
"\n",
"And the average distance they compute between peaks is 81 samples, or 162 seconds, also a little higher than mine.\n",
"\n",
"I'm not surprised that the peak of the ACF is a little off, due to limited resolution, but I thought the distances between the peaks would be more accurate."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Summary\n",
"\n",
"In my opinion, computing the distance between zero crossings, using a spline fitted to the smoothed data, is the best option."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment