fft/fft.ipynb

228 lines
63 KiB
Plaintext
Raw Normal View History

2023-07-17 07:49:15 +00:00
{
"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
}