Skip to content

Instantly share code, notes, and snippets.

@halserach
Created March 26, 2024 12:37
Show Gist options
  • Save halserach/e980a24aa83f6409532479c452a2729d to your computer and use it in GitHub Desktop.
Save halserach/e980a24aa83f6409532479c452a2729d to your computer and use it in GitHub Desktop.
My work for assignment 6.
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "Aw-0vixvS6SY"
},
"outputs": [],
"source": [
"# Initialize libraries\n",
"\n",
"import math\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"source": [
"# Implementation of Discrete Fourier Transform"
],
"metadata": {
"id": "8-Yt2sA8UM5f"
}
},
{
"cell_type": "code",
"source": [
"# Create list for time t\n",
"tBounds = [0, 2]\n",
"N = 40\n",
"\n",
"dt = (tBounds[1] - tBounds[0]) / N\n",
"print('dt =', dt, '\\n')\n",
"\n",
"t = np.linspace(tBounds[0], tBounds[1], N, False)\n",
"print('t = ', t)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "bGRH1T-lUK2o",
"outputId": "e8a462c4-b839-4cd1-e89d-70652c0a09ca"
},
"execution_count": 20,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"dt = 0.05 \n",
"\n",
"t = [0. 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65\n",
" 0.7 0.75 0.8 0.85 0.9 0.95 1. 1.05 1.1 1.15 1.2 1.25 1.3 1.35\n",
" 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 1.8 1.85 1.9 1.95]\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Create sine function x(t)\n",
"A = 2\n",
"f = 0.5\n",
"w = 2 * math.pi * f\n",
"x = [A * math.sin(w*i) for i in t]\n",
"print(np.round(x,3))\n",
"\n",
"plt.plot(t, x, 'o')\n",
"plt.grid()\n",
"plt.xlabel('t')\n",
"plt.ylabel('x')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 796
},
"id": "kNOUueH8UsD4",
"outputId": "4a4903e1-7533-42c3-aec3-57d169d69fd7"
},
"execution_count": 39,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[ 0. 0.126 0.251 0.375 0.497 0.618 0.736 0.852 0.964 1.072\n",
" 1.176 1.275 1.369 1.458 1.541 1.618 1.689 1.753 1.81 1.86\n",
" 1.902 1.937 1.965 1.984 1.996 2. 1.996 1.984 1.965 1.937\n",
" 1.902 1.86 1.81 1.753 1.689 1.618 1.541 1.458 1.369 1.275\n",
" 1.176 1.072 0.964 0.852 0.736 0.618 0.497 0.375 0.251 0.126\n",
" 0. -0.126 -0.251 -0.375 -0.497 -0.618 -0.736 -0.852 -0.964 -1.072\n",
" -1.176 -1.275 -1.369 -1.458 -1.541 -1.618 -1.689 -1.753 -1.81 -1.86\n",
" -1.902 -1.937 -1.965 -1.984 -1.996 -2. -1.996 -1.984 -1.965 -1.937\n",
" -1.902 -1.86 -1.81 -1.753 -1.689 -1.618 -1.541 -1.458 -1.369 -1.275\n",
" -1.176 -1.072 -0.964 -0.852 -0.736 -0.618 -0.497 -0.375 -0.251 -0.126\n",
" -0. 0.126 0.251 0.375 0.497 0.618 0.736 0.852 0.964 1.072\n",
" 1.176 1.275 1.369 1.458 1.541 1.618 1.689 1.753 1.81 1.86\n",
" 1.902 1.937 1.965 1.984 1.996 2. 1.996 1.984 1.965 1.937\n",
" 1.902 1.86 1.81 1.753 1.689 1.618 1.541 1.458 1.369 1.275\n",
" 1.176 1.072 0.964 0.852 0.736 0.618 0.497 0.375 0.251 0.126\n",
" 0. -0.126 -0.251 -0.375 -0.497 -0.618 -0.736 -0.852 -0.964 -1.072\n",
" -1.176 -1.275 -1.369 -1.458 -1.541 -1.618 -1.689 -1.753 -1.81 -1.86\n",
" -1.902 -1.937 -1.965 -1.984 -1.996 -2. -1.996 -1.984 -1.965 -1.937\n",
" -1.902 -1.86 -1.81 -1.753 -1.689 -1.618 -1.541 -1.458 -1.369 -1.275\n",
" -1.176 -1.072 -0.964 -0.852 -0.736 -0.618 -0.497 -0.375 -0.251 -0.126]\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"# Initialize result\n",
"\n",
"class complexList:\n",
" def __init__(self):\n",
" self.re = []\n",
" self.im = []\n",
"\n",
" def __str__(self):\n",
" return f\"Re: {self.re}\\nIm: {self.im}\"\n",
"\n",
" def abs(self):\n",
" return np.array([ np.sqrt(re**2 + im**2) for re, im in zip(self.re, self.im) ])\n",
"\n",
"y = complexList()\n",
"\n",
"# Calculate real and imaginary part\n",
"\n",
"for n in range(N):\n",
" w1 = 2*math.pi*n/N\n",
" sre = 0\n",
" sim = 0\n",
"\n",
" for id, el in enumerate(x):\n",
" sre += el * math.cos(id*w1)\n",
" sim += -el * math.sin(id*w1)\n",
"\n",
" y.re.append(sre)\n",
" y.im.append(sim)\n",
"\n",
"print(y)\n",
"\n",
"yabs = y.abs()\n",
"yamp = np.round(yabs) / np.size(yabs)\n",
"print('Amplitude:', yamp)\n",
"\n",
"# Calculate frequency value\n",
"\n",
"srate = 1 / dt\n",
"T = N / srate\n",
"freq = [i/T for i in range(N)]\n",
"print('Freq:', freq)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "8PzEMY-CU_oq",
"outputId": "ae8f4690-0a4d-43a9-a96b-04e52b0cdc71"
},
"execution_count": 43,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Re: [2.711719737646945e-14, 9.325873406851315e-15, -9.514611321037592e-14, -2.758904216193514e-14, -3.1086244689504383e-15, -1.0047518372857667e-14, -2.213507155346406e-14, 1.4516166046973922e-14, -1.2212453270876722e-14, 4.278521981149197e-14, -1.9637069748057456e-14, -1.8360313269738526e-14, 1.6667223157185163e-14, -4.025946243046974e-14, 3.0281332996651145e-14, 1.6084356069256955e-14, 1.3600232051658168e-15, 1.9441392939967272e-13, 1.2420620087993939e-14, 2.040034807748725e-15, -1.4488410471358293e-14, 1.4585554986012994e-14, -2.2676305277968822e-14, 1.189326415129699e-14, -1.6514567491299204e-15, -4.288236432614667e-15, -1.650068970349139e-14, 9.43689570931383e-16, -6.158962229108056e-14, 4.9585335837321054e-14, 3.2487901258093643e-14, -3.362587985833443e-14, 1.7541523789077473e-14, 2.040034807748725e-15, 1.4732659536775827e-13, 2.796374243274613e-14, 9.291178937331779e-15, -3.767125500431234e-14, 3.625572064791527e-14, 3.948230631323213e-15, -5.273559366969494e-16, -3.094052791752233e-14, 4.653569196655383e-14, -2.7304547511874944e-15, -1.72178243884602e-13, 1.0865613964128329e-13, -2.418377997859267e-13, -3.325117958752344e-14, 6.748594738592573e-14, 3.0825775959586466e-13, -9.573665586263535e-14, 1.4592146935221706e-13, -7.713794880626068e-14, -4.532832442727397e-15, 8.191711198257678e-14, 5.82728310050129e-14, 2.817468480742491e-13, -2.1889781653960938e-13, -8.52963533137796e-14, -3.1509517217642724e-14, 4.400646513857964e-13, 4.0197012385334574e-14, 5.537237335317968e-15, 6.315087341945969e-14, 1.625088952295073e-14, -2.2613161343443267e-13, -3.560346462094799e-14, -1.9588497490730106e-13, 5.5067062021407764e-14, 4.6199155612214327e-14, -2.6742497105658458e-14, -3.48471251854221e-14, -7.716050021144838e-15, -2.786659791809143e-14, 1.7479073743942308e-13, -3.564509798437143e-13, 5.9119376061289586e-15, -2.8449465006019636e-15, 3.633204848085825e-13, 1.5162870958818075e-13, 8.806844142839054e-14, -1.569577801063815e-14, 2.2010171463193728e-14, 2.4616420013501283e-13, -2.481348460037225e-14, 1.514899317101026e-13, 1.7395807017095422e-13, -8.865130851631875e-14, -2.012140454255018e-13, 5.2763349245310565e-14, -1.4779844015322396e-14, 1.125072257579518e-13, -1.8762769116165146e-14, -1.8199330931167879e-13, 1.6189827256596345e-13, 2.8130275886439904e-14, -1.2886913758336505e-13, -1.645350522494482e-13, 5.347666753863223e-13, -8.426592756904938e-13, -1.6375789613221059e-15, -1.9656498650988397e-13, -1.1757261830780408e-13, 4.6157522248790883e-14, 2.4841240175987878e-15, 1.217220768623406e-13, 6.150774334301445e-13, -1.9677315332700118e-13, -1.1225742557741114e-13, 2.6152691123826344e-13, -2.316341563002311e-13, -1.0894063429134349e-14, -6.021988463444927e-13, -6.934730567564884e-14, -5.377365219771946e-13, 1.2687073613903976e-13, 2.326056014467781e-13, 1.426636586643326e-14, -6.342149028171207e-15, -5.949407633210058e-13, 9.95453719454531e-13, -2.5589252938829077e-13, -3.788636071533347e-14, -1.0699774399824946e-13, -5.054290319606025e-14, 1.2194828480360798e-12, -9.088563235337688e-14, 7.387146450099635e-14, -2.6478819137309983e-14, -3.540501225529624e-13, 1.0860756738395594e-13, 8.787415239908114e-14, -1.435324081811018e-12, -9.227341113415832e-14, 1.9963197761541096e-14, 1.2837647611618763e-13, 1.894942536218025e-13, -4.1493197766584444e-13, -6.328201851424353e-13, -6.818851039369633e-13, 4.5005665860742283e-14, 9.524742106137296e-13, -5.6066262743570405e-15, 3.6660605107208255e-13, 9.794942634755444e-14, 2.622554950981737e-14, 1.351176115438335e-13, 1.871090088423344e-13, 4.746394249854902e-13, -6.096945864841885e-14, 1.1689121026847023e-13, 6.113469105950564e-13, -3.787942182142956e-14, -1.7018331188722868e-13, 4.081804338973427e-14, -1.0532894001435977e-13, -9.112502419306168e-14, 2.0376755838213967e-13, 1.638619795407692e-13, -5.190292640122607e-14, 1.4578616092109087e-14, 3.1462332739096155e-13, -2.0135976219748386e-13, -8.183037580877794e-14, -1.4552664628908474e-12, -4.890046700900541e-13, -6.729686252704425e-13, -3.7213288006654466e-13, 1.6034396033148823e-13, 8.587575095475586e-14, 7.159689507929556e-13, -2.501610030236634e-13, 3.0350721935690217e-13, -3.5255132146971846e-13, -2.3983592889464944e-13, 1.8789136912999993e-13, -2.155081668675507e-13, -6.506878369449964e-13, 8.908845883226491e-13, 1.0762224444960111e-13, -4.075212389764715e-13, 9.341138973439911e-14, 2.434302759368734e-13, -4.97615837424803e-13, -8.766598558196392e-14, 4.741623760295965e-13, 6.1201044232461754e-15, -4.465455782920458e-13, -1.2212453270876722e-14, -1.5912271500440056e-13, 9.849898674474389e-13, -5.618977505505995e-13, -1.612737721146118e-13, -8.38454305984726e-13, 2.583072644668505e-13, -4.324318680914985e-14, 7.41448569208103e-13, -2.450817326860033e-14, 1.7509049765607188e-12, 1.6264767310758543e-14]\n",
"Im: [0.0, 3.777620577460894e-14, -199.99999999999997, 1.3048589986297543e-14, -3.447936380851502e-14, 1.7045392874948107e-14, 2.796374243274613e-15, -1.6653345369377348e-15, -6.255412854372366e-15, 4.989064716909297e-15, -1.4786782909226304e-14, -3.6137759451548845e-14, 2.9004576518332215e-14, -2.6777191575177994e-14, 1.0318135235110049e-14, -3.2057689836051395e-15, -7.743805596760467e-15, 7.294165271787278e-14, -3.4763858458575214e-14, 1.4432899320127035e-14, -4.315992008230296e-15, 3.26405569239796e-14, -4.3298697960381105e-15, 1.7361112547575885e-14, 1.1157741397482823e-14, -2.0192181260370035e-14, 6.074307723480388e-14, 9.914291609902648e-14, -1.3317125180378753e-13, 1.659644643936531e-13, 6.494804694057166e-14, -4.385380947269368e-15, -5.54833956556422e-14, -2.615963001773025e-14, -1.7669199436909366e-13, 6.593336987492648e-14, -7.494005416219807e-16, 2.273181642920008e-14, -1.8818280267396403e-14, -1.8013368574543165e-14, -1.9290125052862095e-15, -8.304468224196171e-14, 9.39803790345195e-14, 3.2210345501937354e-14, -2.375877272697835e-14, -1.702804564018834e-14, -4.9460435747050724e-14, -5.082045895221654e-14, -6.833422716567839e-14, -6.342149028171207e-14, -6.492029136495603e-14, -1.5770718064800349e-13, 9.969802761133906e-14, 7.682743330406083e-14, 2.5465740627339528e-14, -1.0109968417992832e-13, 1.349614864309956e-13, -4.884564974716454e-13, 1.1868284133242923e-13, 1.3063161663495748e-13, 1.3607170945562075e-13, 2.3300805729320473e-14, -6.013245457126004e-14, 1.1782241848834474e-14, -4.911349105185536e-14, 2.2647161923572412e-13, 1.4069301279562296e-13, 5.197231534026514e-14, -1.2453926778732693e-13, -1.4183099139586375e-13, -2.015054789694659e-13, 1.0239031844605506e-13, 1.9470536294363683e-14, -2.456368441983159e-15, 1.066507993030541e-13, 2.0516921495072893e-13, -9.103828801926284e-15, 1.3178347302300608e-13, -2.8185787037671162e-14, -9.586775817638227e-14, -1.1102230246251565e-16, 3.952393967665557e-14, 8.396061623727746e-14, -8.932715678255931e-13, -7.650130529057719e-14, 3.4917208013851564e-13, -8.041484145238087e-14, -2.6222080062865416e-14, 2.559341627517142e-13, 8.612555113529652e-14, -7.17134684968812e-14, -1.4641066137244252e-15, 1.5314832735313644e-13, -6.19608531149396e-14, -6.517356099244864e-14, -9.752268437246414e-14, -1.8923404510040598e-13, -4.277481147063611e-14, -2.4437570023128075e-13, -9.495763550471104e-13, -1.8249448043005197e-13, 2.734002260695867e-13, -4.1761732960665654e-14, -1.8743513685581803e-13, -4.477702930660854e-13, 1.5621184901171148e-13, -2.14588763425283e-13, -3.5005331966431186e-13, -5.3963777890686515e-14, 1.0660916593963066e-13, -1.330463517135172e-13, 5.231648447789894e-13, 2.8256563755491015e-13, -1.5133033715031274e-13, -1.6834450500269327e-13, 2.307876112439544e-13, -1.4537676618076034e-13, 2.4782953467195057e-13, 1.4777068457760834e-13, -3.109318358340829e-13, 9.162115510719104e-14, -2.1577184483589917e-13, -2.9071189899809724e-13, -1.0266787420221135e-13, -1.359190537897348e-13, 5.979799988509171e-13, 1.2932710458102292e-13, -2.7919333511761124e-13, -4.047040480514852e-13, -3.715222574030008e-13, 8.118505867571457e-14, 5.1486592766991635e-14, 2.3138435611969044e-13, 4.8031023602845835e-14, -5.470623953840459e-14, 1.6305012895401205e-13, 5.943856518086932e-14, -1.339067745576017e-13, 1.615513278707681e-13, -3.306105389455638e-13, 1.7180701306074297e-13, -4.244105067385817e-13, -4.775763118303189e-13, 1.952604744559494e-14, -5.014044734963363e-14, 2.2995494397548555e-14, 7.902012377769552e-14, -3.808064974464287e-14, -4.226619054747971e-13, 5.592748486549226e-14, -5.892508703198018e-14, -6.154243781253399e-13, 4.5352610555937645e-14, -1.0047518372857667e-13, 4.5380366131553274e-14, 6.327438573094923e-13, -2.2402912858154878e-13, 1.7244539129990244e-13, -9.854617122329046e-14, 4.5477510646207975e-14, 3.1363800445660672e-15, -9.159339953157541e-16, -1.9662049766111522e-13, -4.427014310692812e-15, -1.2616574451840279e-12, 2.574607194105738e-13, 4.741901316052122e-13, 4.718447854656915e-14, -3.247679902784739e-13, 1.0215439605332222e-13, 1.7427725929053395e-12, -5.859202012459264e-14, -3.4564018314142686e-13, 4.627964678149965e-13, -1.2875811528090253e-13, -3.6637359812630166e-15, 8.863743072851094e-14, -3.0149494012476907e-13, 2.63428168167934e-13, -4.4576842217480817e-13, -2.906841434224816e-13, 2.8133051444001467e-13, 1.6123213875118836e-13, 1.8174350913113813e-13, 1.4250406410454275e-13, -1.302569163641465e-13, -2.0183854587685346e-13, 1.653954750935327e-13, -4.651140583789015e-14, -8.001099782717347e-13, 3.72257780156815e-13, 8.131689765988881e-14, -1.0023232244193991e-13, 1.4680409665679406e-12, -6.460318391354747e-13, 1.699959617518232e-13, 1.385804665465784e-12, 3.017461280840905e-12, 200.00000000000074, -4.1554606977634023e-13]\n",
"Amplitude: [0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 1. 0.]\n",
"Freq: [0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0, 5.25, 5.5, 5.75, 6.0, 6.25, 6.5, 6.75, 7.0, 7.25, 7.5, 7.75, 8.0, 8.25, 8.5, 8.75, 9.0, 9.25, 9.5, 9.75, 10.0, 10.25, 10.5, 10.75, 11.0, 11.25, 11.5, 11.75, 12.0, 12.25, 12.5, 12.75, 13.0, 13.25, 13.5, 13.75, 14.0, 14.25, 14.5, 14.75, 15.0, 15.25, 15.5, 15.75, 16.0, 16.25, 16.5, 16.75, 17.0, 17.25, 17.5, 17.75, 18.0, 18.25, 18.5, 18.75, 19.0, 19.25, 19.5, 19.75, 20.0, 20.25, 20.5, 20.75, 21.0, 21.25, 21.5, 21.75, 22.0, 22.25, 22.5, 22.75, 23.0, 23.25, 23.5, 23.75, 24.0, 24.25, 24.5, 24.75, 25.0, 25.25, 25.5, 25.75, 26.0, 26.25, 26.5, 26.75, 27.0, 27.25, 27.5, 27.75, 28.0, 28.25, 28.5, 28.75, 29.0, 29.25, 29.5, 29.75, 30.0, 30.25, 30.5, 30.75, 31.0, 31.25, 31.5, 31.75, 32.0, 32.25, 32.5, 32.75, 33.0, 33.25, 33.5, 33.75, 34.0, 34.25, 34.5, 34.75, 35.0, 35.25, 35.5, 35.75, 36.0, 36.25, 36.5, 36.75, 37.0, 37.25, 37.5, 37.75, 38.0, 38.25, 38.5, 38.75, 39.0, 39.25, 39.5, 39.75, 40.0, 40.25, 40.5, 40.75, 41.0, 41.25, 41.5, 41.75, 42.0, 42.25, 42.5, 42.75, 43.0, 43.25, 43.5, 43.75, 44.0, 44.25, 44.5, 44.75, 45.0, 45.25, 45.5, 45.75, 46.0, 46.25, 46.5, 46.75, 47.0, 47.25, 47.5, 47.75, 48.0, 48.25, 48.5, 48.75, 49.0, 49.25, 49.5, 49.75]\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Plot the data\n",
"plt.stem(freq[0:10], yamp[0:10], markerfmt='') # The // 2 division automatically round down\n",
"plt.grid()\n",
"plt.xlabel('f')\n",
"plt.ylabel('y')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 449
},
"id": "-6oeJP8JaLQg",
"outputId": "8f7b9998-e6a0-4b1b-97a7-2d683d050467"
},
"execution_count": 42,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"# The challanges:\n",
"\n",
"Is it possible that the integration from $ -\\infty $ to $ \\infty $ be approximated by a summation from $ 0 $ to $ \\infty $ ? Here is a \"better\" summation bound to approximate the integration:\n",
"\n",
"\\begin{align}\n",
"X(\\omega) & \\approx \\sum_{n=-\\infty}^{\\infty} x(t_n) e^{-j\\omega t_n} \\Delta t \\\\\n",
"& = \\sum_{n=-\\infty}^{0} x(t_n) e^{-j\\omega t_n} \\Delta t + \\sum_{n=0}^{\\infty} x(t_n) e^{-j\\omega t_n} \\Delta t \\\\\n",
"& = \\sum_{n=0}^{\\infty} x(-t_n) e^{j\\omega t_n} \\Delta t + \\sum_{n=0}^{\\infty} x(t_n) e^{-j\\omega t_n} \\Delta t\n",
"\\end{align}\n",
"\n",
"The first part goes backward in time, the second part goes forward in time. Let's break it into a real and imaginary part and rearrange,\n",
"\n",
"\\begin{align}\n",
"X(\\omega) & \\approx \\sum_{n=0}^{\\infty} x(-t_n) \\left[ \\cos(\\omega t_n) + i\\sin(\\omega t_n) \\right] \\Delta t + \\sum_{n=0}^{\\infty} x(t_n) \\left[ \\cos(\\omega t_n) - i \\sin(\\omega t_n) \\right] \\Delta t \\\\\n",
"&= \\sum_{n=0}^{\\infty} \\left[ x(-t_n) + x(t_n) \\right] \\cos(\\omega t_n) \\Delta t - i \\sum_{n=0}^{\\infty} \\left[ -x(-t_n) + x(t_n) \\right] \\sin(\\omega t_n) \\Delta t\n",
"\\end{align}\n",
"\n",
"Now here's the first insight: The value of $ x $ inside the square bracket correspond to the _behavior_ of the harmonic function it multiplies with; cosine function is *even* function, which means its value at $t = t_n$ is the same as at $t = -t_n$, and sine function is *odd* function, which means its value at $t = t_n$ is the negative of its value at $t = -t_n$.\n",
"\n",
"Second, we assume that the sample of the data is *periodic*, so $x(t_0) = x(t_{n-1})$, $x(t_1) = x(t_{n-2})$, and so on... Now, let's pretend we copy and paste $ x $ to the left and right without they overlap each other; this is the true form of discretized $ x(t) $ in $ t \\in \\{t_0, \\pm t_1, \\pm t_2, ... \\} $.\n",
"\n",
"Because of that, we can shift the boundary of summation either to the left, or to the right, as long as the summation *applied to the whole period of data*. By not caring whether the height of amplitude is exact, we can \"simplify\" (engineer style) the expression above:\n",
"\n",
"\\begin{align}\n",
"X(\\omega) & \\approx \\sum_{n=0}^{\\infty} x(t_n) \\cos(\\omega t_n) \\Delta t - i \\sum_{n=0}^{\\infty} x(t_n) \\sin(\\omega t_n) \\Delta t \\\\\n",
"& = \\sum_{n=0}^{\\infty} x(t_n) e^{-j\\omega t_n} \\Delta t\n",
"\\end{align}\n",
"\n",
"Now here's the part where I still don't get the answer about: Is this the reason why DFT results is only half the amplitude for the non-DC part? (I remember that integration of $f(x) = 1$, from $x = 0 \\rightarrow 2\\pi$ is $ 2\\pi $, and integration of $f(x) = \\cos(x)^2$ from $x = 0 \\rightarrow 2\\pi$ is instead $ \\pi $; maybe the same argument can be applied to why DFT results is half the amplitude, for the integration of squared-non-DC cosine is half its period, but the DC cosine which is constant 1 is full period)."
],
"metadata": {
"id": "LcfoaaJJeV0N"
}
},
{
"cell_type": "code",
"source": [
"# Now, a trial of Fourier transform of following equation:\n",
"\n",
"def x(t):\n",
" return 3*np.sin(20*np.pi*t) + 4*np.cos(5*np.pi*t) + 1\n",
"\n",
"Tobs = 4\n",
"N = 200\n",
"\n",
"dt = Tobs / N\n",
"\n",
"t = np.arange(0, Tobs, dt)\n",
"signal = x(t)\n",
"\n",
"y = complexList()\n",
"\n",
"# Calculate real and imaginary part\n",
"\n",
"for n in range(N):\n",
" w1 = 2*np.pi*n/N\n",
" sre = 0\n",
" sim = 0\n",
"\n",
" for id, el in enumerate(signal):\n",
" sre += el * math.cos(id*w1)\n",
" sim += -el * math.sin(id*w1)\n",
"\n",
" y.re.append(sre)\n",
" y.im.append(sim)\n",
"\n",
"yabs = y.abs()\n",
"yamp = np.round(yabs) / np.size(yabs)\n",
"\n",
"# Calculate frequency value\n",
"freq = [i/Tobs for i in range(N)]\n",
"\n",
"# Plot the data\n",
"plt.stem(freq[0:N//2], yamp[0:N//2], markerfmt='') # The // 2 division automatically round down\n",
"plt.grid()\n",
"plt.xlabel('f')\n",
"plt.ylabel('y')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 449
},
"id": "xQc2dl51hXOG",
"outputId": "1c30569a-e749-4655-d011-c89d4db13c0f"
},
"execution_count": 50,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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eGVlZbHP+0lNTY1GjRqlCRMm6LHHHtOHH35od0kR7/Lly5KkhIQESdLhw4fl9/uD9vXEiRM1evRo9nUffbbXHX75y18qMTFRkyZNUnFxsVpaWvrl9fllqGFw8eJFtbW1KSkpKWg8KSlJx48ft6mqgSkrK0vbtm3ThAkTVF9fr9LSUn3lK1/RsWPHNGzYMLvLG9AaGhokqct93vEcQmf27Nl65JFHlJ6ertOnT+vpp5/WnDlzVFtbq6ioKLvLi0jt7e1asWKF7r33Xk2aNEnSp/s6Ojpaw4cPD5rLvu6brnotSd/61rc0ZswYpaam6t1339UPfvADnThxQr/5zW9CXgMBCAPKnDlzAvenTJmirKwsjRkzRr/61a+0dOlSGysDQmvhwoWB+5MnT9aUKVM0btw41dTU6KGHHrKxssi1fPlyHTt2jOsGw6C7Xj/66KOB+5MnT1ZKSooeeughnT59WuPGjQtpDXwEFgaJiYmKiorq9F0DjY2NSk5OtqkqMwwfPly33367Tp06ZXcpA17HXmaf2+PWW29VYmIie/1zKioq0u9+9zv96U9/0i233BIYT05OVmtrqy5duhQ0n339+XXX665kZWVJUr/sawJQGERHR2vq1KmqqqoKjLW3t6uqqkrZ2dk2VjbwNTU16fTp00pJSbG7lAEvPT1dycnJQfvc6/Xq4MGD7PMweP/99/Xhhx+y13vJsiwVFRXptddeU3V1tdLT04Oenzp1qpxOZ9C+PnHihM6ePcu+7qXr9borR48elaR+2dd8BBYmbrdbBQUFmjZtmqZPn66NGzequblZhYWFdpc2oDz55JOaO3euxowZo3PnzqmkpERRUVFatGiR3aUNCE1NTUH/Ejtz5oyOHj2qhIQEjR49WitWrNC6des0fvx4paena9WqVUpNTVV+fr59RUeoa/U6ISFBpaWl+vrXv67k5GSdPn1aK1eu1G233aa8vDwbq448y5cv186dO/X6669r2LBhget64uPjNWTIEMXHx2vp0qVyu91KSEhQXFyc/vVf/1XZ2dn68pe/bHP1keV6vT59+rR27typr371q7rpppv07rvv6oknntD999+vKVOmhL6gsHyvGSzLsqz/+I//sEaPHm1FR0db06dPtw4cOGB3SQPOggULrJSUFCs6Otq6+eabrQULFlinTp2yu6wB409/+pMlqdOtoKDAsqxPvxV+1apVVlJSkuVyuayHHnrIOnHihL1FR6hr9bqlpcXKzc21Ro4caTmdTmvMmDHWsmXLrIaGBrvLjjhd9ViS9corrwTm/P3vf7e+//3vWyNGjLBiY2Otr33ta1Z9fb19RUeo6/X67Nmz1v33328lJCRYLpfLuu2226ynnnrKunz5cr/U4/j/RQEAABiDa4AAAIBxCEAAAMA4BCAAAGAcAhAAADAOAQgAABiHAAQAAIxDAAIAAMYhAAEAAOMQgAAYxbIsPfroo0pISJDD4Qj8riEAZuEnQQMwyh/+8AfNmzdPNTU1gd+gPngwvxYRMA1/6wEY5fTp00pJSdE999xjdykAbEQAAmCMJUuWaPv27ZIkh8OhMWPG6L333rO3KAC2IAABMMamTZs0btw4vfjii/rv//5vRUVF2V0SAJsQgAAYIz4+XsOGDVNUVJSSk5PtLgeAjfguMAAAYBwCEAAAMA4BCAAAGIcABAAAjEMAAgAAxuEnQQMAAOPwDhAAADAOAQgAABiHAAQAAIxDAAIAAMYhAAEAAOMQgAAAgHEIQAAAwDgEIAAAYBwCEAAAMA4BCAAAGIcABAAAjPP/AGTPes22PDBWAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment