fft/fft.ipynb

228 lines
63 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "7c2e29c4-56e3-4356-8ee6-c1c102459bdd",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "da80a777-7d41-4253-80e7-f680aa9f9cd3",
"metadata": {},
"outputs": [],
"source": [
"Fs = 2000\n",
"tstep = 1 /Fs\n",
"f0 = 100"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9523da45-df8c-4f7a-ae8d-2fe0febc0e09",
"metadata": {},
"outputs": [],
"source": [
"N = int(Fs / f0)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b1f761e2-cc8f-4770-a1c2-e9f990e0a016",
"metadata": {},
"outputs": [],
"source": [
"t = np.linspace(0, (N-1)*tstep, N)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "2629b6db-d564-4c52-a813-05934fa0c047",
"metadata": {},
"outputs": [],
"source": [
"fstep = Fs / N\n",
"f = np.linspace(0, (N-1)*fstep, N)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "9f22fb15-0fdb-478e-abdc-50ea33eaed34",
"metadata": {},
"outputs": [],
"source": [
"y = 1 * np.sin(2* np.pi * f0 * t)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "1d9e0e46-475c-49be-bffe-4151a17cf116",
"metadata": {},
"outputs": [],
"source": [
"x = np.fft.fft(y)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "592cb87a-e51b-4016-aad6-36d539c851ef",
"metadata": {},
"outputs": [],
"source": [
"X_mag = np.abs(x) / N"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "37e1e880-a9fd-4105-8404-cba3ac6404e1",
"metadata": {},
"outputs": [],
"source": [
"fplot = f[0:int(N/2+1)]\n",
"X_magplot = 2 * X_mag[0:int(N/2+1)]\n",
"X_magplot[0] = 2 * X_magplot[0] / 2"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "ce41c71e-7bbf-43f9-9c67-6b92404eeb69",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, [ax1, ax2] = plt.subplots(nrows=2, ncols=1)\n",
"ax1.plot(t, y, \".-\")\n",
"ax2.plot(f, X_mag, '.-')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "42363132-69b1-42e7-a355-02c82e273cdb",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create a queue of data\n",
"queue = np.array([1, 1, 3, 4, 5, 5, 4, 3, 5, 6, 7, 1, 9, 4, 7, 7, 7, 8, 9, 8, 7, 6, 7, 8])\n",
"\n",
"# Apply FFT to the queue\n",
"fft_result = np.fft.fft(queue)\n",
"\n",
"# Plot the result\n",
"plt.plot(np.abs(fft_result))\n",
"\n",
"# Show the plot\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "cea51af1-5e99-4c78-982e-4721ea78b9c7",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'fftfreq' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[8], line 13\u001b[0m\n\u001b[1;32m 9\u001b[0m fft_result \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mfft\u001b[38;5;241m.\u001b[39mfft(audio_data)\n\u001b[1;32m 11\u001b[0m freq_axis \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mfft\u001b[38;5;241m.\u001b[39mfftfreq(\u001b[38;5;28mlen\u001b[39m(audio_data), \u001b[38;5;241m1\u001b[39m\u001b[38;5;241m/\u001b[39msample_rate)\n\u001b[0;32m---> 13\u001b[0m xf \u001b[38;5;241m=\u001b[39m \u001b[43mfftfreq\u001b[49m(N, T)[:N\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m2\u001b[39m]\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpyplot\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mplt\u001b[39;00m\n\u001b[1;32m 15\u001b[0m plt\u001b[38;5;241m.\u001b[39mplot(xf, \u001b[38;5;241m2.0\u001b[39m\u001b[38;5;241m/\u001b[39mN \u001b[38;5;241m*\u001b[39m np\u001b[38;5;241m.\u001b[39mabs(yf[\u001b[38;5;241m0\u001b[39m:N\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m\u001b[38;5;241m2\u001b[39m]),\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
"\u001b[0;31mNameError\u001b[0m: name 'fftfreq' is not defined"
]
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.io import wavfile\n",
"\n",
"# Read the audio file\n",
"sample_rate, audio_data = wavfile.read('/media/jimmy/B7DE-FCF0/mic.wav')\n",
"\n",
"# Apply FFT to the audio data\n",
"fft_result = np.fft.fft(audio_data)\n",
"\n",
"freq_axis = np.fft.fftfreq(len(audio_data), 1/sample_rate)\n",
"\n",
"xf = fftfreq(N, T)[:N//2]\n",
"import matplotlib.pyplot as plt\n",
"plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]),'b')\n",
"plt.plot()\n",
"plt.grid()\n",
"plt.show()\n",
"\n",
"\n",
"# Show the plot\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e20b3c1c-c4d9-40eb-bf96-2195e0f708d7",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}