464 lines
132 KiB
Text
464 lines
132 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import matplotlib\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"# Show plots inline.\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"# Number of harmonics to include in subsequent plots.\n",
|
|
"Harmonics = 10\n",
|
|
"# Time in seconds.\n",
|
|
"Time = 2.0\n",
|
|
"# Plot resolution.\n",
|
|
"Steps = 200\n",
|
|
"\n",
|
|
"# Array of step values.\n",
|
|
"def time_space(sec=Time, samples=Steps):\n",
|
|
" '''An array of equally spaced samples over a period of time.'''\n",
|
|
" # One extra sample to also include the endpoint.\n",
|
|
" return np.linspace(0, sec, num=samples + 1)\n",
|
|
"\n",
|
|
"def sample_rate(sec=Time, samples=Steps):\n",
|
|
" '''Sampling rate in samples per second.'''\n",
|
|
" return (samples + 1) / float(sec)\n",
|
|
"\n",
|
|
"def frequency_spectrum(data):\n",
|
|
" '''Perform an FFT on `data`. Return the max frequency in Hz, and the raw data, suitable for plotting.'''\n",
|
|
" fft = np.fft.fft(data)\n",
|
|
" # We only need to use half of the FFT because FFT data mirrors itself across the middle. (Or something? IDK?)\n",
|
|
" fft_len = int(len(fft) / 2) \n",
|
|
" \n",
|
|
" # Get the frequency of coefficients in the FFT.\n",
|
|
" freqs = np.fft.fftfreq(fft_len)\n",
|
|
" \n",
|
|
" # Get the highest frequency in the FFT\n",
|
|
" max_idx = np.argmax(np.abs(fft))\n",
|
|
" max_freq = fft[max_idx]\n",
|
|
" \n",
|
|
" # Convert that frequency above into Hz.\n",
|
|
" max_freq_hz = abs(max_freq * sample_rate() ** -1)\n",
|
|
" \n",
|
|
" out = np.abs(fft[:fft_len - 1] * sample_rate())\n",
|
|
" return max_freq_hz, out"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Basic Waves"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Sine Wave\n",
|
|
"\n",
|
|
"Sine waves are easy. 😁 The have a single frequency, and no harmonics."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x104730358>]"
|
|
]
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Sine wave.\n",
|
|
"\n",
|
|
"def sine(domain, freq=1.0):\n",
|
|
" return np.sin(2.0 * np.pi * freq * domain)\n",
|
|
"\n",
|
|
"wave = sine(time_space())\n",
|
|
"plt.plot(time_space(), wave)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"max: 0.9973405302244392 Hz\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x104794550>]"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"max_hz, spectrum = frequency_spectrum(wave)\n",
|
|
"print(\"max: {} Hz\".format(max_hz))\n",
|
|
"plt.plot(spectrum[:Harmonics], 'x')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Saw Wave\n",
|
|
"\n",
|
|
"Saw waves consist of every integer harmonic _n_ above the fundamental frequency, where that harmonic's amplitude is n<sup>-1</sup>."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x10451f908>]"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def saw(domain, freq=1):\n",
|
|
" harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, Harmonics)])\n",
|
|
" wave = np.sum(harmonics, axis=0)\n",
|
|
" return wave\n",
|
|
"\n",
|
|
"wave = saw(time_space())\n",
|
|
"plt.plot(time_space(), wave)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"max: 1.0036806672579326 Hz\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x1044eec50>]"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"max_hz, spectrum = frequency_spectrum(wave)\n",
|
|
"print(\"max: {} Hz\".format(max_hz))\n",
|
|
"plt.plot(spectrum[:Harmonics], 'x')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"You can invert a saw wave to get what many synths call a \"blade\" wave. Instead of gradually falling and then spiking up, blade waves gradually rise and the sharply fall."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x104946940>]"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.plot(time_space(), -1 * saw(time_space()))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Square Wave\n",
|
|
"\n",
|
|
"Square waves are made of every other harmonic above the fundamental frequency. Again, the amplitude of each harmonic _n_ is _1 / n_."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x1049a7f98>]"
|
|
]
|
|
},
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def square(domain, freq=1):\n",
|
|
" harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, Harmonics, 2)])\n",
|
|
" wave = np.sum(harmonics, axis=0)\n",
|
|
" return wave\n",
|
|
"\n",
|
|
"wave = square(time_space())\n",
|
|
"plt.plot(time_space(), wave)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"max: 0.9993055302951397 Hz\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x104ac8cc0>]"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"max_hz, spectrum = frequency_spectrum(wave)\n",
|
|
"print(\"max: {} Hz\".format(max_hz))\n",
|
|
"plt.plot(spectrum[:Harmonics], 'x')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Triangle Wave"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x104b1f710>]"
|
|
]
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def triangle(domain, freq=1):\n",
|
|
" def label(i):\n",
|
|
" return 2. * i + 1.\n",
|
|
" harmonics = np.asarray([((-1) ** h) * (label(h) ** -2) * sine(domain, freq=freq * label(h)) for h in range(Harmonics)])\n",
|
|
" wave = np.sum(harmonics, axis=0)\n",
|
|
" return wave\n",
|
|
"\n",
|
|
"wave = triangle(time_space())\n",
|
|
"plt.plot(time_space(), wave)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"max: 0.9969907724658861 Hz\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x104bd6e48>]"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"max_hz, spectrum = frequency_spectrum(wave)\n",
|
|
"print(\"max: {} Hz\".format(max_hz))\n",
|
|
"plt.plot(spectrum[:Harmonics], 'x')"
|
|
]
|
|
},
|
|
{
|
|
"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.1"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|