-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6_DFT-plot.py
516 lines (516 loc) · 219 KB
/
6_DFT-plot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plotting the DFT\n",
"\n",
"In this notebook we will look at the practical issues associated to plotting the DFT and in particular the DFT of real-world signals. We will examine how to map the DFT coefficients to real-world frequencies and we will investigate the frequency resolution of the DFT and the effects of zero padding.\n",
" \n",
"As a quick reminder, the definition of the DFT for a length-$N$ signal is:\n",
"\n",
"$$\n",
" X[k] = \\sum_{n=0}^{N-1} x[n]\\, e^{-j\\frac{2\\pi}{N}nk}, \\quad k=0, \\ldots, N-1 \n",
"$$\n",
"\n",
"As we have seen, the above formula is just the expression of a change of basis in $\\mathbb{C}^N$: we're expressing the information contained in the signal in terms of sinusoidal components rather than in terms of pointwise data. The sinusoidal components have all an integer number of periods over the length of the data signal.\n",
"\n",
"In Python, we will use the `FFT` module in Numpy to compute the DFT"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# first our usual bookkeeping\n",
"%matplotlib inline\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"plt.rcParams[\"figure.figsize\"] = (14,4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Typically, we will take a vector of data points, compute the DFT and plot the magnitude of the result. For instance, consider the DFT of a linear ramp:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<Container object of 3 artists>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4fe7457b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.arange(0, 1.02, 0.02) - 0.5\n",
"plt.stem(x)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4fe876048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X = np.fft.fft(x);\n",
"plt.stem(abs(X));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Positive and negative frequencies\n",
"\n",
"The coefficient number $k$ indicates the contribution (in amplitude and phase) of a sinusoidal component of frequency\n",
"\n",
"$$\n",
" \\omega_k = \\frac{2\\pi}{N}k\n",
"$$\n",
"\n",
"Because of the rotational symmetry of complex exponentials, a positive frequency $\\omega$ between $\\pi$ and $2\\pi$ is equivalent to a negative frequency of $\\omega - 2\\pi$; this means that half of the DFT coefficients correspond to negative frequencies and when we concentrate on the physical properties of the DFT it would probably make more sense to plot the coefficients centered around zero with positive frequencies on the right and negative frequencies on the left.\n",
"\n",
"The reason why this is not usuall done are many, including\n",
" \n",
" * convenience\n",
" * since we are manipulating finite-length signals, the convention dictates that we start at index zero \n",
" * when dealing with real-valued data, the DFT is symmetric in magnitude, so the first half of the coefficients is enough\n",
" * if we're looking for maxima in the magnitude, it's just easier to start at zero.\n",
"\n",
"There is also another subtle point that we must take into account when shifting a DFT vector: **we need to differentiate between odd and even length signals**. With $k=0$ as the center point, odd-length vectors will produce symmetric data sets with $(N-1)/2$ points left and right of the oring, whereas even-length vectors will be asymmetric, with one more point on the positive axis; indeed, the highest positive frequency for even-length signals will be equal to $\\omega_{N/2} = \\pi$. Since the frequencies of $\\pi$ and $-\\pi$ are identical, we can copy the top frequency data point to the negative axis and obtain a symmetric vector also for even-length signals. \n",
"\n",
"Here is a function that does that:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dft_shift(X):\n",
" N = len(X)\n",
" if (N % 2 == 0):\n",
" # even-length: return N+1 values\n",
" return np.concatenate((X[(N/2):], X[:(N/2)+1]))\n",
" else:\n",
" # odd-length: return N values\n",
" return np.concatenate((X[int((N+1)/2):], X[:int((N-1)/2)]))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4fecf4f28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.stem(abs(dft_shift(X)));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While the function does shift the vector, the indices are still from zero to $N-1$. Let's modify it so that we returs also the proper values for the indices:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dft_shift(X):\n",
" N = len(X)\n",
" if (N % 2 == 0):\n",
" # even-length: return N+1 values\n",
" return np.arange(-int(N/2), int(N/2) + 1), np.concatenate((X[int(N/2):], X[:int(N/2)+1]))\n",
" else:\n",
" # odd-length: return N values\n",
" return np.arange(-int((N-1)/2), int((N-1)/2) + 1), np.concatenate((X[int((N+1)/2):], X[:int((N+1)/2)]))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4fee3e6d8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n, y = dft_shift(X)\n",
"plt.stem(n, abs(y));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Mapping the DFT index to real-world frequencies\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <audio controls=\"controls\" >\n",
" <source src=\"data:audio/wav;base64,UklGRiQAAQBXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YQAAAQAQARABEAEZARABEAEQARABEAEHARABEAEQARABEAEQARABBwEQARABEAEQAQcBBwEHAQcBBwEHAf4ABwH+AP4A9QD1AOwA7ADsAOMA7ADsAOwA7ADsAOwA7ADjAOwA4wDaAOMA2gDaAOMA4wDjAOMA4wDjAOMA7ADsAOwA7ADjAOMA4wDaAOMA4wDsAOMA2gDaAOMA4wDaANoA4wDjAOMA4wDsAOMA4wDjAOMA4wDaAOMA4wDjAOMA4wDjAOMA4wDjAOwA4wDjAOwA4wDjAOMA4wDjAOMA4wDjAOMA4wDjAOMA7ADsAOMA7ADjAOwA7ADsAOwA7ADsAOwA7ADsAPUA9QD1APUA9QD1AOwA7ADsAOwA7AD1APUA9QDsAOwA9QD1APUA9QDsAPUA9QDsAOwA7ADsAOwA4wDjAOMA2gDjANoA0QDRANEA0QDaANEA0QDaANEA0QDRANEA2gDaANoA2gDaAOMA4wDjAOMA4wDsAOwA9QD1APUA9QD1APUA9QD1APUA7AD1APUA9QD1AOwA9QD1APUA9QD1APUA9QD1AP4ABwEHAQcB/gAHAQcBBwEHAQcBEAEQARABBwEQARABEAEQARABEAEQARkBGQEQARkBIwEZASMBGQEZASMBIwEZARkBGQEZARABBwEHAQcBBwEHAf4ABwH+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A9QD+AP4A/gD+AP4A/gD+AP4A/gD+APUA9QDsAPUA9QD1APUA7AD1APUA7ADsAOwA7ADsAOMA4wDjAOMA7ADsAOMA7ADsAOwA7ADjAOMA7ADsAOwA7ADjAOMA4wDsAOMA4wDsAOwA4wDjAOMA4wDjAOMA4wDjAOMA4wDjAOMA4wDjAOwA7ADsAOwA7ADsAOwA7ADsAPUA7ADsAOwA7ADsAOwA4wDjAOMA7ADsAOwA7ADsAOwA7AD1APUA9QD+AP4ABwEHAQcBBwEHAQcBEAEQARABEAEQARABEAEQAQcBBwEHAf4A/gD+AP4A/gD1AP4A/gD+AAcBBwEHAQcBBwH+AAcBBwEHAQcBEAEHARABEAEZARkBEAEZARABEAEHAQcB/gD+AP4A/gD+AP4A/gAHAf4A/gAHAQcBBwEHARABBwEHAf4A/gD+AP4A/gD+AP4A9QD1APUA9QDsAOwA7ADsAOwA7ADsAPUA9QD1APUA9QDsAPUA9QD1APUA9QDsAOwA7ADsAOwA7ADsAOwA4wDsAOMA2gDaANoA2gDaANEA2gDRANEA0QDRANEA0QDRANEA0QDaANoA2gDaANoA2gDaANoA2gDjAOMA4wDjAOwA7ADjAOMA7ADjAOMA4wDjAOwA4wDsAOwA4wD1AOwA7ADsAOMA7ADjANoA2gDaAOMA4wDjAOMA4wDjAOMA4wDjAOMA7ADsAOwA7ADsAOwA7ADsAOwA7AD1AOwA7AD1AOwA7ADsAOwA9QD1APUA/gD+APUA9QD1APUA7ADsAPUA9QDsAOwA7ADjAOwA7AD1APUA9QD1AOwA9QD1APUA9QD1APUA/gD1APUA9QDsAPUA9QDsAOwA4wDsAOwA7ADsAOwA7ADsAOMA2gDjANoA4wDsAOMA7ADsAPUA7ADsAPUA9QDsAOwA7ADsAPUA7ADsAOwA9QD1APUA9QDsAOwA7ADjAOMA4wDjAOMA4wDjAOMA7ADsAPUA7AD1APUA9QD+AP4A/gD+AAcBBwEHAQcBEAEQARABEAEQARABEAEZARkBEAEQARkBEAEQARABEAEZARABEAEQARABEAEHAQcBBwEHAf4A9QDsAOwA7AD1APUA9QDsAPUA9QD1APUA9QD1APUA9QD1APUA9QD1APUA9QD1APUA7AD1APUA7AD1AOwA7ADjAOMA4wDjAOMA4wDjAOMA4wDjANoA4wDjAOMA4wDjAOMA2gDaANoA0QDaANoA2gDaANoA4wDjAOMA4wDjAOwA7ADsAOwA7ADsAPUA7ADsAOwA9QD1APUA7ADsAOwA7AD1APUA9QD1APUA9QD+APUA9QD+APUA/gD1APUA9QD+APUA/gD+AP4ABwH+AAcB/gAHAQcBBwEHAQcBBwEHAQcB/gD+AP4A/gD+AP4A/gAHAf4A/gD1APUA9QDsAPUA7ADsAOwA7ADsAOMA4wDjAOMA4wDjAOMA4wDjAOMA4wDjAOMA4wDjAOMA7ADjAOMA4wDjAOMA4wDsAOwA4wDjAOMA4wDjAOMA4wDsAOwA4wDsAOwA7ADsAOwA4wDjANoA2gDjAOMA4wDaANoA2gDaANoA2gDaANEA0QDaANEA0QDaANoA2gDaANoA2gDjAOMA4wDaAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAPUA7AD1AOwA7AD1APUA7ADsAOwA9QDsAOMA7ADjAOMA4wDjAOMA4wDaANoA0QDaAOMA2gDaANoA2gDjAOMA4wDjAOMA7ADjANoA2gDaANoA2gDaANoA2gDaAOMA4wDjAOMA4wDaANoA0QDaAOMA2gDjAOMA4wDjAOMA4wDjAOMA7ADjAOMA4wDsAOMA7ADsAOMA7ADsAOwA7ADsAOwA7ADsAOMA7ADsAOwA7ADsAOwA7ADsAOwA7AD1APUA9QD1AOwA7ADsAOwA7ADsAOwA7ADsAPUA9QD1APUA7AD1AOwA9QD1APUA9QD1AP4A9QD+APUA/gD+APUA/gD+AP4A9QD+APUA9QDsAPUA7AD1APUA7ADsAOwA7ADsAOwA9QD1AOwA7ADsAPUA7ADsAPUA/gD1AP4ABwH1APUA9QD1AOwA7ADjAOMA4wDsAOMA7ADsAOMA4wDsAOMA7ADjAOMA2gDaAOMA2gDaANoA4wDaAOMA4wDaAOMA4wDjAOMA4wDjAOMA4wDjAOMA4wDjAOMA7ADsAOMA7ADsAOwA7ADjAOwA7ADjAOwA7ADsAPUA9QDsAOwA7ADsAOwA7ADsAOMA4wDjAOMA4wDjAOMA2gDaANoA2gDjAOMA2gDjAOMA4wDjAOMA7ADsAPUA7ADsAPUA7ADsAOwA7ADsAOMA7ADjAOwA7ADjAOMA4wDjAOMA7ADjAOMA4wDjAOMA7ADjAOMA4wDjANoA2gDaANoA2gDaAOMA4wDjAOMA4wDjAOMA7ADjAOMA4wDsAOwA7ADjAOwA7ADsAOwA7ADsAOwA7AD1AOwA9QDsAPUA9QD1AP4A9QD1AOwA7ADsAOMA7ADjAOMA7ADjAOMA4wDjAOMA4wDaANoA2gDaANoA2gDaANEA2gDRANoA2gDaANoA0QDaANoA2gDaANoA2gDaANoA2gDaANoA2gDaANoA2gDaANoA2gDaANoA2gDjANoA2gDaANoA2gDaANoA2gDaANoA2gDRANoA0QDaANEA2gDRANoA2gDaANoA2gDaANoA0QDaANoA4wDjAOMA4wDsAOwA4wDaANoA4wDjAOMA4wDsAOwA9QDsAPUA9QD1APUA7ADsAOwA4wDjAOMA4wDjAOMA7ADsAOwA7AD1AOwA7ADsAOwA9QDsAOwA9QD1APUA/gD+AP4A/gD+AP4A/gD1APUA9QD1APUA9QDsAOwA9QD1APUA/gD+APUA/gD1APUA9QD1APUA7AD1APUA9QDsAOwA7ADjAOMA4wDaANoA4wDaANoA2gDaANoA4wDaANoA2gDaANoA2gDRANoA2gDaANoA2gDaAOMA4wDjAOMA7ADsAOMA7ADsAPUA9QDsAOwA9QDsAPUA9QD1AOwA9QDsAOwA4wDaANoA2gDaANoA2gDaAOMA4wDjAOMA7AD1APUA9QD1APUA7ADsAPUA9QD1AP4ABwEHAQcBBwEQARABEAEHARABEAEQARABEAEQAQcBBwEHAQcBBwEHAQcBEAEHAQcBBwEHAQcB/gAHAQcB/gD+AP4A/gD+AP4A/gD+AP4A/gAHAQcBBwEHAf4A/gD+AP4ABwH+AAcBBwEHAQcBBwEHAQcBBwEHAQcB/gD+AP4A9QDsAOwA7ADsAOwA7ADsAOwA7ADsAOMA4wDaAOMA2gDjAOMA4wDsAOwA7ADsAOwA9QD1APUA9QD+AP4A9QD1APUA9QD+AP4A/gD1APUA9QDsAOwA4wDjAOMA4wDjANoA2gDaANoA2gDaANoA4wDsAOwA4wDsAOwA7ADsAOMA7ADsAOwA7AD1APUA9QD+APUA/gAHAQcBBwEHAQcBBwEHAQcBBwEQARABEAEQAQcBBwEHAQcB/gAHAf4ABwEHAQcBEAEHAQcBBwEQARABBwEQARABBwEQARABEAEQARABEAEQARABEAEQAQcBEAEHARABEAEHAQcBEAEQAQcBBwEHAQcBBwEHAf4A/gAHAf4A/gD+APUA9QD1APUA7ADsAOwA7ADsAOwA7AD1APUA7ADsAOwA7ADsAOwA9QDsAOwA7ADsAOwA7AD1AOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAPUA9QD1APUA9QD+APUA/gD+AP4A/gAHAQcB/gD+AP4A/gD+AP4A/gAHARABEAEQARkBGQEZARkBGQEQARABEAEQARABBwEHAQcBBwH+AAcBBwEHAQcBBwEHAf4A/gAHAf4ABwH+AAcBBwH+AP4ABwH+AAcBBwH+AAcBBwEHAf4A/gD+APUA9QD1AOwA7ADsAOwA7ADsAOwA7ADsAPUA9QD1AP4A/gD+AAcBBwH+AAcB/gD+APUA9QD1APUA7ADsAOwA7ADjAOwA4wDjAOMA2gDjANoA4wDaANoA2gDaANoA2gDRANoA2gDaAOMA4wDaAOMA4wDjANoA2gDaAOMA4wDjAOMA4wDsAOMA4wDjAOwA7ADsAOwA7ADjAOwA4wDaANoA2gDaAOMA2gDaAOMA4wDjAOMA2gDjAOMA2gDaAOMA4wDjAOMA4wDjAOwA4wDjAOMA2gDaANoA0QDIAMgA0QDRANEA0QDRANEA2gDaANEA0QDRANoA2gDaANoA4wDjAOMA4wDsAOwA7ADsAOwA7ADsAOwA4wDsAOwA7AD1AOwA7AD1APUA9QD1AOwA7ADsAOwA7ADsAOMA7ADjAOMA4wDjAOMA2gDjANoA2gDaANoA2gDaANoA4wDjAOMA7AD1APUA7ADsAOwA7ADsAPUA9QD1APUA9QD1APUA9QDsAOwA7ADjAOMA4wDjANoA2gDjAOMA4wDsAOMA4wDjAOMA7ADsAOMA4wDjAOMA4wDjAOwA7ADjAOMA7ADsAOwA9QD1APUA/gD1AOwA7ADsAPUA9QD1APUA9QD1APUA9QD1APUA9QD1APUA9QD1AOwA7ADjAOMA4wDjAOMA7ADsAOwA7ADjAOMA7ADsAOMA4wDjAOMA4wDjANoA4wDaAOMA4wDjAOwA4wDjAOMA4wDjAOwA4wDjAOMA7ADjAOMA4wDjANoA4wDjAOwA7ADjAOMA4wDsAPUA9QD1APUA/gD+AP4ABwH+AAcBBwEHAQcBBwEQAQcBBwEHARABBwEHAf4A/gD+APUA9QD1APUA9QD1APUA9QD1APUA9QD1APUA7AD1APUA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAPUA7ADsAOwA7ADsAOwA7ADsAOwA4wDsAOMA4wDjAOMA2gDaANoA2gDaANoA2gDaAOMA4wDjAOwA9QD1AP4A9QD1AP4A/gD1APUA9QD1AP4A/gD+AP4A/gD+AAcBBwEHAQcBEAEQARABBwEQAQcB/gD+AP4A/gD+AAcB/gD+AP4A9QD1APUA9QDsAOwA7ADsAOwA7ADsAOMA7ADjAOwA7ADjAOMA7ADsAOMA7ADsAOwA9QDsAPUA7ADjAOMA4wDaANoA0QDRANEA0QDRANEA0QDRANEA0QDRANEA0QDRAMgAyADRANEAyADIAMgA0QDRANEA0QDaANoA0QDaANoA2gDaAOMA4wDjAOMA7ADsAOwA9QDsAOwA7ADsAOMA7ADjAOMA4wDjAOMA4wDjAOMA2gDaANoA2gDRANEA0QDaANoA2gDaANoA2gDaANEA0QDRANEA2gDRANoA2gDaAOMA4wDjAOMA4wDsAOMA7ADsAOwA7ADsAOwA4wDsAOwA4wDaANoA4wDjANoA2gDjAOMA2gDjAOMA4wDjAOMA4wDjAOwA7ADjAOMA4wDjAOMA4wDjAOMA4wDsAOwA7ADjAOwA4wDsAOMA4wDsAOwA7ADjAOMA7ADjAOMA4wDjAOMA4wDjAOMA4wDaANoA2gDRANoA2gDRANoA0QDaANoA2gDRANEA2gDjAOMA7ADsAOwA9QD1AOwA9QD+APUA9QD1AOwA4wDjAOMA2gDaANoA2gDaANoA2gDaANoA2gDaANoA2gDaAOMA4wDjAOMA4wDjAOMA7ADsAOwA7ADjAOMA7ADsAOwA4wDjAOwA7ADsAOwA7AD1AOwA4wDjAOMA4wDaANoA2gDaAOMA4wDjAOMA7ADsAOwA7ADsAOwA7ADsAPUA9QD+APUA9QD+AP4A9QD1AP4A9QD1APUA9QD1APUA9QD1APUA9QD1APUA/gD+AAcBBwEQARABEAEQARABBwEHARABBwEHAQcBBwH+AP4A/gD+APUA/gD+AP4A/gD+APUA9QD1APUA/gD+AAcBBwEHAQcBBwH+AP4A/gD+AAcBBwEHAQcBEAEQAQcBBwH+AP4A/gD1APUA9QD1APUA9QD1APUA9QD1APUA9QDsAOwA9QDsAOwA7AD1AP4A/gAHAQcBBwEHAQcBBwH+ABABEAEQARABGQEQARABGQEQARkBGQEZARkBGQEQARkBGQEQARABEAEQARABEAEQARABEAEQAQcBEAEHAQcBBwEHAQcBEAEQAQcBBwEQARABBwEZARABEAEZARkBGQEQARABGQEQARABEAEHAQcBBwH+AP4A/gD+AAcB/gAHAf4A/gD+AP4A9QD1APUA9QD+APUA9QD+APUA9QD1APUA9QD1APUA9QDsAPUA9QD1APUA9QD1AP4A/gD+AP4A/gD+AP4A9QD1APUA9QD1AOwA7ADjAOwA4wDjANoA4wDjANoA2gDRANoA2gDaANEA2gDRANoA2gDaAOMA2gDaANoA2gDaANoA2gDaANEA2gDaANoA2gDaANoA2gDRANEA2gDRANoA2gDaANoA2gDjAOMA4wDjAOMA4wDjAOMA4wDjAOwA9QD1APUA/gD+AAcBBwH+AAcBEAEQARABEAEZARABEAEQARABEAEHARABBwEHAQcBBwH+AP4A/gAHAQcBBwH+AP4ABwEHAf4A/gD+AAcBBwEQAQcBBwEQARABEAEHAQcBBwEHAf4A/gD+AP4A9QD+APUA/gD+AAcBBwH+AAcB/gD1APUA9QDsAPUA9QD1APUA9QDsAOwA7ADsAOMA4wDjAOMA4wDaANoA2gDaANoA4wDjAOMA2gDaANoA2gDaANEA0QDRAMgA0QDRANEA0QDRANoA2gDRANoA2gDaANoA0QDRANoA2gDaAOMA4wDjAOwA4wDjAOMA4wDjAOMA2gDaANoA2gDaANoA2gDaANoA0QDRANEA0QDRANEA0QDRAMgAyADIAMgAyADIANEA0QDRANoA2gDRANoA0QDRANEA0QDRANEA0QDaANoA2gDaANoA2gDjANoA2gDaANoA2gDaAOMA2gDjAOMA2gDaAOMA4wDjAOMA4wDsAPUA9QDsAOwA7ADsAOwA4wDjAOMA7ADsAOwA7ADsAOMA4wDjAOMA4wDaANoA0QDRANoA0QDRANEA2gDRANEA2gDRANEA2gDaANoA2gDjAOwA7ADjAOwA4wDaAOMA4wDjAOMA4wDjAOMA4wDjAOMA4wDsAOMA4wDjAOMA4wDjAOMA7ADsAOMA4wDjAOMA4wDaANoA2gDaANoA2gDjANoA4wDjAOMA4wDsAOMA4wDjAOMA4wDjANoA4wDjAOMA4wDjANoA2gDaANoA2gDaANEA0QDRANEA0QDaANEA2gDaANEA0QDRANEA0QDaANoA2gDaANoA2gDaAOMA4wDjAOMA2gDsAOMA7ADsAOwA7ADsAOwA9QD1AOwA9QDsAOwA7ADsAOwA4wDjAOMA7ADjAOMA4wDsAOwA4wDjAOMA4wDsAOwA7ADjAOwA7ADsAOMA7ADsAOwA7ADsAOwA7AD1AOwA7ADsAOwA9QD1APUA7AD1AP4A/gD+APUA/gD+AP4A/gD+APUA9QD1APUA9QD1AOwA7ADjAOMA4wDaANoA0QDRANEA0QDaANEA0QDRANoA2gDaANoA4wDjAOMA4wDjAOMA4wDjAOwA9QD1AP4A9QD1AP4A/gD+APUA9QDsAPUA9QD1APUA9QD+APUA9QD1APUA/gD+AP4A/gAHAQcBBwEHAQcBBwEHARABBwEHARABEAEHARABEAEQARABEAEZARkBGQEZARABGQEQARABGQEQARABBwEHAf4ABwEHAf4A/gD+AP4A/gD+APUA/gDsAPUA7AD1APUA9QD1AP4A/gD+AP4A/gD1AP4A/gD+AP4A9QD+APUA9QD1APUA9QD1APUA9QD1AP4A9QD1APUA7AD1APUA/gD+APUA/gD+AP4A9QD1AP4A9QD1APUA/gD1AP4A/gD1AP4A/gD+AP4A/gAHAf4ABwH+AAcB/gAHAQcBBwEHAf4A/gD+AP4A/gD+AP4A/gAHAQcBBwEHAQcBBwEHAQcBBwEQARABBwEQARABEAEQARABEAEQARABEAEQARABEAEQAQcBBwEQARABEAEQARABEAEQAQcBBwEHAQcBBwEHAQcBBwEHAQcBBwH+AP4ABwH+AP4A/gD+AP4A/gD1APUA9QD+AP4A/gD+APUA9QD1AP4A9QD+AP4ABwH+AP4ABwEHAQcBBwH+AP4A/gD+AP4A9QD1APUA9QDsAOwA7ADsAOMA4wDsAOMA7ADsAOwA7ADsAOwA9QD1APUA/gD+AP4A/gD+AP4ABwEHAQcBBwEHAQcBBwEHAQcB/gD+APUA9QD1AOwA9QD1AOwA9QD1AOwA9QDsAPUA7ADsAOwA7ADsAPUA9QD1APUA9QD1APUA9QD1AOwA7ADsAOwA9QDsAOwA7ADsAOMA7ADjAOMA4wDjAOMA4wDjAOMA4wDjAOwA7AD1APUA7AD1APUA7ADsAOMA4wDjAOMA4wDjAOMA4wDjAOMA7ADjAOwA7ADsAOwA7AD1AOwA7ADsAPUA9QDsAPUA9QD1AOwA7ADjAOMA4wDjAOMA4wDjAOMA4wDjANoA2gDaAOMA2gDaAOMA4wD1AOwA9QD+AP4A/gAHAf4ABwEHAQcBBwEHAQcBBwEHAQcB/gD+AP4A/gD1AP4A9QDsAPUA9QD+APUA/gD1APUA9QD1APUA9QD+APUA/gD+APUA/gD1APUA/gD1APUA9QD1APUA9QDsAPUA7ADsAOwA7ADsAOwA7AD1APUA9QD1APUA9QD1APUA9QD1AOwA7AD1AOwA9QDsAOwA7ADsAOMA4wDjAOwA4wDsAOMA4wDjAOMA4wDjAOMA4wDjAOMA4wDjAOwA7ADsAOwA7ADsAOwA7ADsAOwA9QD1AOwA7ADsAPUA9QD1APUA9QD+AP4A9QD1AOwA9QDsAPUA7ADsAPUA9QD1AOwA4wDsAOwA7ADsAOwA9QDsAPUA9QD1APUA/gAHAf4A/gD+AP4A/gD1APUA9QD+APUA9QD+APUA9QD1APUA9QD1APUA7ADjAOMA4wDjANoA4wDaANoA2gDaANoA4wDjAOMA4wDjAOMA4wDjAOMA4wDsAOwA7ADsAPUA9QD1AP4A9QD+APUA/gD+AP4A/gD+AP4ABwEHAf4A/gD+AP4A/gD+AAcBBwEHARABBwEQAQcBBwEHAQcB/gAHARABBwEHAQcBBwEHAQcBBwEHARABEAEQARABEAEQARABEAEQARABEAEQARABEAEZARkBGQEZARkBIwEjASMBIwEZARABEAEZARABEAEHAQcBEAH+AP4A/gD1AP4A9QD+AP4ABwH+AP4A/gD+APUA7ADsAOMA4wDjAOMA2gDRAMgAvgC+AKwArACjAKMAowCaAJoAmgCaAJoAmgCRAJEAkQCRAIgAiACIAIgAfwB/AIgAiACRAIgAfwB/AIgAiACIAJEAmgCjALUAvgDIANEA2gDjAOMA7AD1APUABwEHARABEAEsASMBNQE+ATUBRwFQAWIBWQFrAXQBhwGQAaIBqwGrAbQBvQG9Ab0BvQG9Ab0BvQG9Ab0BvQG9AasBqwG0AasBogGiAZkBkAGHAYcBhwF0AXQBdAFiAWIBWQFZAUcBNQEsARkBGQEQAf4A7ADaAMgAvgC1AKMAmgCaAJoAkQCRAJEAiAB/AH8AdgBtAG0AbQBkAGQAUQBRAEgAPwA2AC0ANgA2AD8APwA/AFEASABIAEgASABRAFEAUQBaAG0AbQB2AH8AiACRAJoAowCsALUAvgDRANoA4wDsAPUA/gD+AAcBEAEjASwBNQE+AT4BPgE1AT4BNQE+AT4BPgEsASwBLAEjASwBIwEsATUBLAEsASwBLAEsASMBEAEQARABEAEQARABBwH+AP4A7ADjANEA2gDRANEA0QDRAMgAvgCsAJoAiAB/AHYAbQBkAGQAZABaAGQASAA/AC0ALQAtAC0ALQA/AFEAWgBkAG0AdgCIAJEArAC+AMgAyAC+ALUAowCsAKwAmgCaAJoA2gAjAT4BNQEHAdEAowB/ALUANQG9AQ8CRgJYAioCzwGZAVkB9QCjAIgAmgC+ADUBqwEGAkYCWAIOAxQF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eP9v/2b/b/+T//f/dgAHAX0BtAGiAUcBvgAtAKb/VP84/0v/iv/c/xsASABaAFoAUQBRAGQAfwCRAIgASAD3/5z/S/8m/xT/Jv9L/4H/uP/l/wkAJABRAIgAtQDRAMgAowB2ADYA9//B/6b/r//l/y0AiADIAPUA/gDjAKMAPwDc/4r/VP9L/1T/Zv94/4r/iv94/2b/Xf+B/8r/PwC+ACwBawF0ATUByABRANz/gf9d/2b/iv/K/wAALQA/AD8APwA/AFoAdgCIAH8AWgASAMH/gf9U/0L/Qv9d/4H/r//K/+X/CQA2AG0AmgCsALUAowB/AEgACQDT/7j/uP/c/xsAWgCjANEA7ADaAKwAWgAAALj/iv94/3j/gf+K/5z/nP+K/2//Xf9v/6//EgCIAOwANQFHARkB0QBkAAAAr/+B/4H/nP/K//f/GwAtAC0ALQAtAEgAbQB/AH8AWgAkAOX/r/94/2b/Xf9v/5P/r//B/9P/7v8kAFEAdgCRAJoAkQB/AEgAEgDc/8H/uP/T/wkANgB2AKMAyAC+AJoAWgAbANz/r/+T/4r/iv+c/6b/pv+T/3j/Zv9v/5z/7v9RALUA9QAQAQcByAB2ABsA0/+m/5P/nP/K/+7/EgAbABsAGwAkAD8AUQBtAG0AWgAtAAAAyv+c/4H/eP+B/5P/pv+v/8r/5f8JADYAWgB2AIgAiAB2AFEAGwDu/9P/yv/T/+7/GwBRAIgArACsAJEAZAAtAAAA0/+v/6b/pv+v/7j/uP+m/4H/b/9v/5P/0/8kAH8AvgDsAOwAvgB/ADYA7v/B/6b/r//T/+X/AAAJAAkACQAbADYASABaAGQAWgA/ABIA3P+4/5z/nP+c/5z/pv+v/8H/3P8AABsAPwBaAHYAfwBtAEgAGwAAANz/0//T/+X/CQA/AG0AkQCaAIgAZAA/ABIA5f/K/7j/uP/B/8r/wf+v/5P/eP94/4r/wf8JAFoAmgC+AMgAtQCIAEgACQDT/8H/wf/T/+7/9/8AAAAACQASACQANgBIAFoAUQA/ABsA7v/T/7j/r/+v/6b/r/+4/8H/3P/u/wkAJABIAGQAbQBaAD8ALQAJAO7/3P/T/9z/AAAtAFEAdgB/AH8AZABIABsA9//T/8r/yv/T/9P/0//B/6b/iv+B/5P/uP/u/zYAbQCaAKwAowB/AEgAGwDu/9P/0//c/+7/9//3//f/AAAJABsALQA/AFEAUQA2ACQAAADl/9P/yv+4/7j/uP+4/8r/0//l//f/GwA2AFEAWgBRAD8ALQASAPf/3P/T/+X/9/8bAD8AWgBtAG0AZABIACQAAADl/9z/3P/c/9z/3P/K/7j/nP+K/5P/r//c/xsAUQB2AJEAkQB2AFEAGwD3/+X/3P/l/+7/7v/3//f/AAAAABIAJAA2AEgASAA2ACQACQD3/+X/0//K/8H/wf/B/8r/0//c/+7/EgAtAD8ASABIAD8ANgAbAPf/5f/c/9z/9/8SAC0ASABRAGQAWgBIAC0ACQD3/+X/5f/l/+7/5f/T/8H/pv+c/5z/r//T/wAANgBaAHYAfwBtAFEAJAAJAPf/7v/u/+7/9//3//f/9/8AAAkAGwAtADYANgAtACQAEgAAAO7/5f/T/8r/yv/K/8r/yv/c/+7/AAAbAC0APwA/AD8ALQAbAAAA7v/c/+X/7v8AABsANgBIAFEAUQA/AC0AEgAAAO7/7v/u/+7/7v/c/8r/uP+m/6b/r//K/+7/GwBIAGQAbQBkAEgALQASAAAA9//u//f/9//3//f/9//3/wAAEgAkAC0ALQAtACQAGwAJAPf/5f/c/9z/0//T/8r/yv/T/+X/AAASABsALQA2ADYALQAbAAAA7v/l/+X/7v8AAAkAJAA2AEgASAA/AC0AEgAJAPf/9//3//f/9//l/9P/wf+4/6//r//B/+X/CQAtAEgAWgBRAD8ALQAbAAkA9//3//f/9//3//f/9//3/wAACQAbACQALQAtACQAGwAJAAAA9//u/+X/3P/T/9P/0//c/+X/9/8JABIAJAAtAC0AJAAbAAkA9//u/+7/7v/3/wkAGwAtADYAPwA2AC0AGwAJAAAAAAAAAAAAAADu/+X/0//B/7j/uP/B/9z/AAAkAD8ASABIAD8ALQAbAAkAAAAAAAAA9//3//f/9//3/wAACQASABsAJAAkACQAGwASAAAA9//3/+7/5f/c/9z/0//c/+X/7v/3/wkA\" type=\"audio/wav\" />\n",
" Your browser does not support the audio element.\n",
" </audio>\n",
" "
],
"text/plain": [
"<IPython.lib.display.Audio object>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import IPython\n",
"from scipy.io import wavfile\n",
"Fs, x = wavfile.read(\"piano.wav\")\n",
"IPython.display.Audio(x, rate=Fs)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In order to look at the spectrum of the sound file with a DFT we need to map the digital frequency \"bins\" of the DFT to real-world frequencies. \n",
"\n",
"The $k$-th basis function over $\\mathbb{C}^N$ completes $k$ periods over $N$ samples. If the time between samples is $1/F_s$, then the real-world frequency of the $k$-th basis function is periods over time, namely $k(F_s/N).\n",
"\n",
"Let's remap the DFT coefficients using the sampling rate:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dft_map(X, Fs, shift=True):\n",
" resolution = float(Fs) / len(X)\n",
" if shift:\n",
" n, Y = dft_shift(X)\n",
" else:\n",
" Y = X\n",
" n = np.arange(0, len(Y))\n",
" f = n * resolution\n",
" return f, Y"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4ff5ef860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# let's cut the signal otherwise it's too big\n",
"x = x[:32768]\n",
"X = np.fft.fft(x);\n",
"f, y = dft_map(X, Fs)\n",
"plt.plot(f, abs(y));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The plot shows what a spectrum analyzer would display. We can see the periodic pattern in the sound, like for all musical tones. If we want to find out the original pitch we need to zoom in in the plot and find the first peak. This is one of the instances in which shifting the DFT does not help, since we'll be looking in the low-frequency range. So let's re-plot withouth the shift, but still mapping the frequencies:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAD8CAYAAAB92JUEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3XmcXFWd///Xqa33fUmnO/tCIAthiRAEkUUhiA4uOIM6gogyKi4zOn7dvvPV0fGr/mYcRx3HkZEI+FU2UUEFkVVkTwdCyEa6s3fS6X3vrv38/qhbleqkO92dpW5X6v18PPrR3adu3XuTnNy6n/s553OMtRYRERERERGZPI/bJyAiIiIiIpJtFEiJiIiIiIhMkQIpERERERGRKVIgJSIiIiIiMkUKpERERERERKZIgZSIiIiIiMgUKZASERERERGZIgVSIiIiIiIiU6RASkREREREZIp8bp9AplRXV9t58+a5fRoiIiIiIjJNrV+/vtNaWzOZbXMmkJo3bx6NjY1un4aIiIiIiExTxpg9k91WQ/tERERERESmSIGUiIiIiIjIFCmQEhERERERmSIFUiIiIiIiIlOkQEpERERERGSKFEiJiIiIiIhMkQIpERERERGRKVIgJSIiIjmjqW2AF3d2uX0aInIKyJkFeUVERETe+r2nAdj97atdPhMRyXbKSImIiIiIiEyRAikREREREZEpUiAlIiIiIiIyRQqkREREREREpkiBlIiIiIiIyBQpkBIREREREZkiBVIiIiIiIiJTpEBKRERERERkihRIiYiISM757L0b3D4FEclyCqREREQk5/z65f1un4KIZLkJAyljTL4x5iVjzKvGmM3GmH922ucbY140xjQZY+4xxgSc9jzn92bn9Xlp+/qS0/66MebKtPY1TluzMeaLae1TPoaIiIiIiMjJNpmMVAi4zFq7EjgLWGOMWQ18B/ietXYx0APc5Gx/E9BjrV0EfM/ZDmPMUuA6YBmwBvgvY4zXGOMFfgRcBSwF3udsy1SPISIiIiIikgkTBlI2YdD51e98WeAy4FdO+x3AO52fr3F+x3n9cmOMcdrvttaGrLW7gGbgPOer2Vq701obBu4GrnHeM9VjiIiIiIiInHSTmiPlZI42AO3Ao8AOoNdaG3U2aQEanJ8bgH0Azut9QFV6+2HvGa+96hiOISIiIiIictJNKpCy1sastWcBs0hkkM4YazPn+1iZIXsC2492jFGMMTcbYxqNMY0dHR1jvEVERERERGTqplS1z1rbCzwFrAbKjTE+56VZwAHn5xZgNoDzehnQnd5+2HvGa+88hmMcfr63WmtXWWtX1dTUTOWPKiIiIiIiMq7JVO2rMcaUOz8XAG8BtgJPAtc6m90APOD8/KDzO87rT1hrrdN+nVNxbz6wGHgJWAcsdir0BUgUpHjQec9UjyEiIiIiInLS+SbehJnAHU51PQ9wr7X298aYLcDdxph/AV4BbnO2vw34uTGmmUSW6DoAa+1mY8y9wBYgCtxirY0BGGM+CTwCeIG11trNzr6+MJVjiIiIiIiIZMKEgZS1diNw9hjtO0nMlzq8PQi8d5x9fRP45hjtDwEPnYhjiIiIiIiInGxTmiMlIiIiIiIiCqRERERERESmTIGUiIhkTCQW5yd/3kEoGnP7VERERI6LAikREcmYX764l289vI1b/7zT7VMRERE5LgqkREQkY0YiiUzUQCjq8pmIiIgcHwVSIiKSMV5jAIjFtfSfiIhkNwVSIiKSMV6PAikRyW19wxG6h8Jun4acAJNZkFdEROSEUCAlIrlu5df/BMDub1/t8pnI8VJGSkREMsaTDKSsAikREcluCqRERCRjknOkrAIpERHJcgqkREQkY5yElIb2iYhI1lMgJSIiGXNojpTLJyIiInKcFEiJiEjGHAqkFEmJiEh2UyAlIiIZkwqkNLJPRESynAIpERHJGI9TbCKuYhMiIpLlFEiJiEjGpAIpFZsQEZEsp0BKREQyTlX7REQk2ymQEhGRjLEkAigFUiIiku0USImISMYk46eY5kiJiEiWUyAlIiIZY60yUiIicmpQICUiIhmTrNanhJSIiGQ7BVIiIpIxyXV4lZESEZFsN2EgZYyZbYx50hiz1Riz2RjzGaf9a8aY/caYDc7X29Le8yVjTLMx5nVjzJVp7WuctmZjzBfT2ucbY140xjQZY+4xxgSc9jzn92bn9XkTHUNERKavZPikOVIiIpLtJpORigKfs9aeAawGbjHGLHVe+5619izn6yEA57XrgGXAGuC/jDFeY4wX+BFwFbAUeF/afr7j7Gsx0APc5LTfBPRYaxcB33O2G/cYx/y3ICIiGZEc2mdcPg8REZHjNWEgZa1ttda+7Pw8AGwFGo7ylmuAu621IWvtLqAZOM/5arbW7rTWhoG7gWuMMQa4DPiV8/47gHem7esO5+dfAZc72493DBERmcaSxSaMIikREclyU5oj5QytOxt40Wn6pDFmozFmrTGmwmlrAPalva3FaRuvvQrotdZGD2sftS/n9T5n+/H2dfj53myMaTTGNHZ0dEzljyoiIidBcmqUUU5KRESy3KQDKWNMMXA/8PfW2n7gx8BC4CygFfhuctMx3m6Pof1Y9jW6wdpbrbWrrLWrampqxniLiIhkUlxzo0RE5BQxqUDKGOMnEUT9wlr7awBrbZu1NmatjQP/w6GhdS3A7LS3zwIOHKW9Eyg3xvgOax+1L+f1MqD7KPsSEZFpTHGUiIicKiZTtc8AtwFbrbX/ntY+M22zdwGbnJ8fBK5zKu7NBxYDLwHrgMVOhb4AiWIRD9rEgPkngWud998APJC2rxucn68FnnC2H+8YIiIyjWmOlIiInCp8E2/ChcAHgdeMMRucti+TqLp3FokhdbuBvwOw1m42xtwLbCFR8e8Wa20MwBjzSeARwAustdZudvb3BeBuY8y/AK+QCNxwvv/cGNNMIhN13UTHEBGR6Ss1R0qBlIiIZLkJAylr7TOMPSfpoaO855vAN8dof2is91lrdzJG1T1rbRB471SOISIi05fmSImIyKliSlX7REREjoeq9omIyKlCgZSIiGSMVUZKREROEQqkREQkYxRHiYjIqUKBlIiIZExcVftEROQUoUBKREQyJq6MlIiInCIUSImISMaoap+IiJwqFEiJiIiIiIhMkQIpERHJmHg8OUdKk6RERCS7KZASEZGMObSOlIhIbjvza4+4fQpynBRIiYhIxmiOlIhIQn8w6vYpyHFSICUiIhmTXJBX4ZSIiGQ7BVIiIpIxyQDKKjMlIiJZToGUiIhkTHJon+IoERHJdgqkREQkY5LFJqwG94mISJZTICUiIhmjjJSIiJwqFEiJiEjGJAMoBVIiIpLtFEiJiEjGJItMqAy6iIhkOwVSIiKSMYfmSImIiGQ3BVIiIpIxqUyUIikREclyCqRERCRjknGUhvaJiEi2UyAlIiIZk6ra5/J5iIiIHK8JAyljzGxjzJPGmK3GmM3GmM847ZXGmEeNMU3O9wqn3RhjfmCMaTbGbDTGnJO2rxuc7ZuMMTektZ9rjHnNec8PjDHmWI8hIiLT16GqfQqlREQku00mIxUFPmetPQNYDdxijFkKfBF43Fq7GHjc+R3gKmCx83Uz8GNIBEXAV4HzgfOAryYDI2ebm9Pet8Zpn9IxRERkelNGSkREThUTBlLW2lZr7cvOzwPAVqABuAa4w9nsDuCdzs/XAHfahBeAcmPMTOBK4FFrbbe1tgd4FFjjvFZqrX3eJh5R3nnYvqZyDBERmcbidvR3ERGRbDWlOVLGmHnA2cCLwAxrbSskgi2g1tmsAdiX9rYWp+1o7S1jtHMMxxARkWnMakVeERE5RUw6kDLGFAP3A39vre0/2qZjtNljaD/q6UzmPcaYm40xjcaYxo6Ojgl2KSIiJ5uG9omIyKliUoGUMcZPIoj6hbX2105zW3I4nfO93WlvAWanvX0WcGCC9lljtB/LMUax1t5qrV1lrV1VU1MzmT+qiIicRCp/LiIip4rJVO0zwG3AVmvtv6e99CCQrLx3A/BAWvv1TmW91UCfMyzvEeAKY0yFU2TiCuAR57UBY8xq51jXH7avqRxDRESmsbhG9omIyCnCN4ltLgQ+CLxmjNngtH0Z+DZwrzHmJmAv8F7ntYeAtwHNwDBwI4C1ttsY8w1gnbPd16213c7PHwduBwqAh50vpnoMERGZ3pJzpBRIiYhItpswkLLWPsPYc5IALh9jewvcMs6+1gJrx2hvBJaP0d411WOIiMj0lRzSp6F9IiKS7aZUtU9EROR4qOy5iIicKhRIiYhIxiTjKCWkxC3VxQEA6svyXT4TEcl2CqREcszBviD3Nu6beEORk+BQ+XNFUuKOPJ8XgER9KxGRYzeZYhMicgr5wE9fYEfHEGuW11Ga73f7dCTH2NQcKZdPRHKeVVpURI6TMlIiOaa1LwiMX0FG5GSKxxPfdRMrbrFaFFpEThAFUiI5JhrT7YO4J66bWJkmFMuLyPFSICWSYyJOSkBDq8QNKjYhbkv1QYXzInKcFEiJ5JjkDayGVokbDi3Iq/4n7kh2PT1MEpHjpUBKJEfpJkLckOx36n7iNsXyInK8FEiJ5ChlBMQNqTlS6n7iEps2uE9E5HgokBLJUcpIiRviqWFV6oDijkPDm909DxHJfgqkRHKUMlLiBquMlLhM+SgROVEUSInkKGWkxA0KoGS6UFZURI6XAimRHKWbCHFDst+p/4lbUlX79DRJpgGNDsluCqREcpRuZMUNKjYh7lMflOlD/TC7KZASyVG6eIsbDpU/VwcUd+lhkkwH6oXZTYGUSI7SPYS4Qouhisu0IK9MJxral90USInkKD2NFTdoaJ+4Ldn1dA2U6UC9MLspkBLJUbqJEDcc6nfqf+IuXQJlOlA/zG4KpERylIa1iBtSc6TU/8QlVpUjZRrRfNHspkBKJEdpXLa4QTex4jYN7ZPpRN0wuymQEslRykiJGzSwT6YLXQNlOlAgld0mDKSMMWuNMe3GmE1pbV8zxuw3xmxwvt6W9tqXjDHNxpjXjTFXprWvcdqajTFfTGufb4x50RjTZIy5xxgTcNrznN+bndfnTXQMEZk8PY0VN6jYhLgtve8pMy9u09C+7DaZjNTtwJox2r9nrT3L+XoIwBizFLgOWOa857+MMV5jjBf4EXAVsBR4n7MtwHecfS0GeoCbnPabgB5r7SLge8524x5jan9sEVEgJW6Ix53v6n/ikvTgSVkpcZsuhdltwkDKWvs00D3J/V0D3G2tDVlrdwHNwHnOV7O1dqe1NgzcDVxjjDHAZcCvnPffAbwzbV93OD//Crjc2X68Y4jIFOjiLW5IBVDqfzINKKAXt6kHZrfjmSP1SWPMRmfoX4XT1gDsS9umxWkbr70K6LXWRg9rH7Uv5/U+Z/vx9nUEY8zNxphGY0xjR0fHsf0pRU5Run8QN6n7iVvS+54CKXGbhpdmt2MNpH4MLATOAlqB7zrtZoxt7TG0H8u+jmy09lZr7Spr7aqampqxNhHJWbqBEDccmiOl/icuGTVHyr3TEAE9VMp2xxRIWWvbrLUxa20c+B8ODa1rAWanbToLOHCU9k6g3BjjO6x91L6c18tIDDEcb18iMgUKpMQNyTkpmpsi04Gug+I2dcHsdkyBlDFmZtqv7wKSFf0eBK5zKu7NBxYDLwHrgMVOhb4AiWIRD9rEI8kngWud998APJC2rxucn68FnnC2H+8YIjIFupEVN6QyUnoOKy4ZPbTPtdMQSVAfzGq+iTYwxtwFXAJUG2NagK8ClxhjziLxz78b+DsAa+1mY8y9wBYgCtxirY05+/kk8AjgBdZaazc7h/gCcLcx5l+AV4DbnPbbgJ8bY5pJZKKum+gYIjJ5GlolbkjVmlD3E5eMrtqnjiju0kOl7DZhIGWtfd8YzbeN0Zbc/pvAN8dofwh4aIz2nYxRdc9aGwTeO5VjiMjk6UmsuMFqHSmZBrweQyxusXG3z0RynT6Ls9vxVO0TkSymJ7HihkNzpNT/xB0W8Dhlq9QPxW0aHZLdFEiJ5Chdu8UNyRvXmDqguMRa8JhEJKVAStymHpjdFEiJ5Cg9BRM3pM+RimtMi7jE60kGUi6fiOQ8fRRnNwVSIjlKNxDihvQMQFSdUFxgsamMlB4oidtUbCK7KZASyVEa0iJuSO92MQVS4gJrwaTmSLl7LiKKo7KbAimRHKVAStyQ3u8icZVME3ckh/YpGyBuUw/MbgqkRHKU4ihxQ3oGIBZTJ5TMS1Tt0xwpmR70WZzdFEiJ5ChlpMQNVnOkxG3pVfvUB8VlyopmNwVSIjlK9w/ihri1+L2Jm1jNkRI3WCxe5+5Hz5PEbboMZjcFUiI5StWqxA0W8Dt3sVHNkRKXeLWOlEwT+izObgqkRHKUnoKJG+JxmwqklJESNySq9imQkulBXTC7KZASyVF6CiZusPZQRiqiYhPiAosW5BWRE0OBlEiO0g2EuCFuLQHNkRKXpcqf64GSuExdMLspkBLJURrSIm6IWUvApzlS4h5rrRbklWlDVfuymwIpkRylQErcEI+TCqSUkRI3WFRsQqYPdcHspkBKJEfp4i1uiMbjaRkpdUJxx6E5UuqD4i71wOymQEokR2k4gWSatZa4hTyfF1BGStyRXrVPcZS4TfP0spsCKZEcpekpkmnJuCmQqtqnTijuSC7Iq4yUuE3Pk7KbAimRHKUbCMm0ZAYqz685UuKuQ3OkXD4REY0OyWoKpERylOIoybRk8J7MSGmOlGRachiVFuSV6UJdMLspkBLJUTFdvSXDkhmoVNU+LcgrGZa87GkdKZku1AOz24SBlDFmrTGm3RizKa2t0hjzqDGmyfle4bQbY8wPjDHNxpiNxphz0t5zg7N9kzHmhrT2c40xrznv+YFxHhMdyzFE5OjSbxr0JFYyLRm8q2qfuE1D+2S60EdxdptMRup2YM1hbV8EHrfWLgYed34HuApY7HzdDPwYEkER8FXgfOA84KvJwMjZ5ua09605lmOIyMTSL9ianyKZFnf6XL4/UbUvrGITkmHJ4N3ndQIpXQfFZaqgm90mDKSstU8D3Yc1XwPc4fx8B/DOtPY7bcILQLkxZiZwJfCotbbbWtsDPAqscV4rtdY+bxOPyu88bF9TOYaITCA9C6VASjIt2edK8nwAjISjbp6O5KCRSAyAwkCiD+oyKG5TRiq7HescqRnW2lYA53ut094A7EvbrsVpO1p7yxjtx3IMEZlA+vVagZRkWnJoX2mBH4ChUMzN05EcFHQCqaK8RFZUc6TEbeqC2e1EF5swY7TZY2g/lmMcuaExNxtjGo0xjR0dHRPsVuTUp6F94qbk2mUl+YlswLAyUpJhI+HRGSkV3RG3ab5ydjvWQKotOZzO+d7utLcAs9O2mwUcmKB91hjtx3KMI1hrb7XWrrLWrqqpqZnSH1DkVDRqaJ8u3pJhyT6X5/MQ8HoYCisjJZmVHNqXDOb1QElEjsexBlIPAsnKezcAD6S1X+9U1lsN9DnD8h4BrjDGVDhFJq4AHnFeGzDGrHaq9V1/2L6mcgwRmQKVnpZMS07s9xhDYZ6X4ZAyUpJZqUDKmacX1XVQXKZnmtnNN9EGxpi7gEuAamNMC4nqe98G7jXG3ATsBd7rbP4Q8DagGRgGbgSw1nYbY74BrHO2+7q1NlnA4uMkKgMWAA87X0z1GCIysVFD+3T1lgxLPv33egxFAZ8yUpJxyaF9yYyUSvCL21S1L7tNGEhZa983zkuXj7GtBW4ZZz9rgbVjtDcCy8do75rqMUTk6FS1T9yUDN69HkNhwKs5UpJxyUCqOD9R8CQaVwl+cZc+irPbiS42ISLTmKr2iZtGD+3zqWqfZNzhc6Q0tE/cFtF6ellNgZRIDrHKSImL0jNSRQEvQ5ojJRl2eCClm1hxWziqPpjNFEiJ5BBlpMRNsfSMlOZIiQuS60iVOkP7dB2UTDt87TIFUtlNgZRIDrFp12tNspZMS05H8XoMRXmaIyWZd3ixiYiug+KykAKprKZASiSHpFcH0iKAkmmHhvYlFkTVHCnJtOFksYlU+XPdxEpmHf7RG1YfzGoKpDJsJBzjou88wS9f3Ov2qUgOSr+AKyMlmZY+tK9IVfvEBcFILLEgtC9x+6OhfZJph/e4UEQPlLKZAikXtPSM0B+MuH0akoPSs1Bx3UBIhsXTy5/n+RgOx9QPJaNGIjEKAl58nsTtT0RV+8RlykhlNwVSGWZM4ruGVYkb0nudMlKSaakFeZ2MFByqoiaSCSPhGAV+Lz5v4sNYQ/sk01Rs4tSiQCrDPE4kpThK3JDe75QJkExLrSPlZKQAhjS8TzLoUEYq8VmsYhPiNgVS2U2BVIZ5khkpXbzFBelPwpSRkkw7fB0pgGEVnJAMCkYSGSljDF6PIRbXTaxk1uGfvAqkspsCqQxLZqR0DytuGLWOlNKikmGHryMFykhJZg07Q/sAfB5DVHOkJMNUte/UokAqwzRHStyU3u1iuoGQDEsvNlGU52SktCivZFByaB+A3+tRsQlxnTJS2U2BVIaZ1BwpXbwl89IDeGWkJNOSD1696RmpkDJSkjkj4Rj5yYyU1xDV0D7JMHvY4L6gCu5kNZ/bJ5CLPEZD+8Qdo4b2qRNKhkWcSCrg8+D3JR4qKSMlmZScIwXO0D5dByXDDn+GqWtgdlMg5QKPMUc8kRDJhPRMqAIpybRkIOX3GvzexM3soDJSkkEjkRiFgWQg5VH5c3GdAqnspqF9LvAYo4yUuGJU+XMN7ZMMS84F8Hs9FOdpaJ9k3nDa0L6Az0NI81PEZSq4k90USLnAGN3EijvSu52qVUmmJSf2B3weivMTgVT/iG4iJHOCacUmCgNeZQPEdVoCIrspkHKBxxgtyCuuSB9SqpKrkmmHhvZ58Hs9FAa89AcjLp+V5IpILE4kZlNzpAoDXkYUSEmGpd//eT1GGaksp0DKBR6jBXnFHekXcFUKkkxLLzYBUJLvY0CBlGRI8pp3KJDyMaybWMmw9AeayopmPwVSLtAcKXFL+pBSBVKSaaHooWITAKX5fg3tk4xJ3rAmh/YV6CZWXFYU8GmeaJZTIOUCzZEStyR7nd9rCEY0tE8yKzW0z5P46Ckt8NM3ooyUZMZAMHHDWuLMzysMeBnRAyXJsPTbv6I8BfPZToGUCzweowV5xRXJblfg9yojJRkXicXxeQweTyIjtaC6iG0H+zXUWTIiWWr/UCDl002sZFz61a4oz8dQOKp7wix2XIGUMWa3MeY1Y8wGY0yj01ZpjHnUGNPkfK9w2o0x5gfGmGZjzEZjzDlp+7nB2b7JGHNDWvu5zv6bnfeaox0jW2hon7glebEuDPgUSEnGRWIWv/fQx86qeRX0DEfY2Tno4llJrhh0MlLFeX7AmZ+iYVXiosKAF2vRCJEsdiIyUpdaa8+y1q5yfv8i8Li1djHwuPM7wFXAYufrZuDHkAiKgK8C5wPnAV9NC4x+7GybfN+aCY6RFQwa2ifuSPa6AmdIi56CSSaFo/HU/CiAc+dWArB+T49bpyQ5JJmRSq5hVpznYzgS0+LkklHpn7up9fRU9CRrnYyhfdcAdzg/3wG8M639TpvwAlBujJkJXAk8aq3tttb2AI8Ca5zXSq21z9tEr7vzsH2NdYysYIxBl21xQ/L6ne/3EreH1vURyYRILJ6q2AeJoX0Bn4ednUMunpXkisOH9lUU+rEWzdMT1xQGEn1Ra0llr+MNpCzwJ2PMemPMzU7bDGttK4DzvdZpbwD2pb23xWk7WnvLGO1HO8YoxpibjTGNxpjGjo6OY/wjnngegzIB4orkZP/kjYQmWksmRWLxUUP7PB5DfVk+B3qDLp6V5Ipkqf1kFqCiKABA91DYtXOS3DN6jlSiguRwRBmpbHW8gdSF1tpzSAzbu8UYc/FRtjVjtNljaJ80a+2t1tpV1tpVNTU1U3nrSeUxhriGw4oLkovwluYn5ghonpRkUiRmR2WkAOrLC9jfM+zSGUku6RoM4/UYygoS179KJ5DqGVYgJZmT/hx9RUM5AEPKSGWt4wqkrLUHnO/twG9IzHFqc4bl4XxvdzZvAWanvX0WcGCC9lljtHOUY2QFj8qfi0vCzjo+taV5gIa0SGYNh6PkjRFIKSMlmdAxEKKyKJCqGllRqIyUuOfLbzud02YUA2hh6Cx2zIGUMabIGFOS/Bm4AtgEPAgkK+/dADzg/PwgcL1TvW810OcMy3sEuMIYU+EUmbgCeMR5bcAYs9qp1nf9Yfsa6xhZwahqn7gkGUjVleYDiSe0IpnSMxxJ3bwmNZQX0DYQTA07FTlZOgdDVBfnpX5PZaQUSEkmOfd/Xo8nNUdKGans5TuO984AfuNUJPcBv7TW/tEYsw641xhzE7AXeK+z/UPA24BmYBi4EcBa222M+Qawztnu69babufnjwO3AwXAw84XwLfHOUZW8Hg0R0rckQqkyhKBlIa0SCb1DodZUF08qq2hvABr4WBfkNmVhS6dmeSCg/1BaksOBVKpjJSug5JB1omkDGlzpJSRylrHHEhZa3cCK8do7wIuH6PdAreMs6+1wNox2huB5ZM9RrZIrCOlQEoyLzlHKpWR0pNYyaDuoQjnzh2dkaovLwBgf++IAik5aaKxOE3tg7xxYVWqrSDgpcDvVUZKXJPKSGlh6Kx1MsqfywS0IK+4JZmRmlmWj8dAe7/mpkhmxOOW3uEwFYX+Ue0NFYlA6kDviBunJTli84F+wtE4y+rLRrVXFgXoHtJcUcmc5P2fMWkZKS0MnbUUSLnAqNiEuCQZSBUEvNSXF7C3W9XSJDP29QwTjdsjsk4znWGmCqTkZHpsaxtej+HSJaNXS6ko8muIs2RUKJrIPuX7veT7vBijjFQ2UyDlAsPo8pcimRJyhvYFfB7mVBYqkJKM2XKgH4Bl9aWj2vP9XqqLA+xXICUn0caWPhbXFlN2WEa0ojCgQEoyasQJmgoDXjweQ6Hfq4xUFlMg5QLNkRK3JDNSeV4vM0rz6RgIuXxGkita+xLDSGdXHDkPqr68gP0qgS4nibWWTfv7WNFQdsRrFYUBzZGSjBqJHMpIARTm+ZSRymIKpFzgMUYZKXFFMpDgBW+2AAAgAElEQVQK+DxUFukGQjKnayg0ajHUdA1alFdOooP9QbqGwiwfI5BKzJHSdVAyJ5mRKnACqaKAV1X7spgCKRdojpS45fBAaigcIxjRkzA5+boGw6MWQ023oKaIPV3D6otyUmzanxhWOlYgVVEYoD8Y1TpmkjHJjFRBwMlIBXxaRyqLKZBygar2iVvCsRhej8HrMak1VDQ/QDKhczBMVVFgzNdWNJQRjVu2HRzI8FlJLti0vw+PgaUzS494rbY0sa5Uu4Y5SwY89ForH7ztJeBQRqpQGamspkDKBVqQV9wyFIpR6DwFq3EWpjzYp7kpcvJ1DYWoLs4b87VFtSUA7OwYzOQpSY7YtL+PRbXFqQxAutQ6Zj0qdiIn3yd+8XLq51RGSnOkspoCKReo2IS4ZSAYpTQ/MUdlfnURALs6h9w8JckRXYNhqorHzkjNrizAY2C3+qKcYNZaNu7vY3n9kcP6IDE/D2CfKphKho2aI6WqfVlLgZQLjIb2iUsGghFK8hMrqc+pLMTrMezs0M2rnHxdgyGqisbOSOX5Euua7e7SzaycWK/s66VjIMTqhVVjvj63qpCKQj9/aerI8JlJrjs0tM/HsDJSWUuBlAs8KjYhLhkIRlOBVMDnYW5lITs0nEpOspFwjKFwbNyMFCQypLu7FNTLifXTv+ykvNDPFUtnjPm63+vhkiW1PNPcpSH3clLFD3uCnhzaV5TnZX/vCI9vbTtiG5n+FEi5QOXPxS0DoQgl+YfKTy+oKaK5XYGUnFxdQ4mJ/NVHCaTmVRWxq3NIN7NywsTilmebu3jrGTMoLxy/750/v5LOwRBbWvszeHaSazoGRxc0yfMlbsELA4mHmzfd0cgfXmvN+HnJ8VEg5QKDMlLijoFglOI8X+r3c+dW0tQ+qPkBclIl1+kZb2gfwLzqIgaCUa3pIyfMlgP99I1EuGhx9VG3W7O8Dp/H8JBuYuUkOtA7uqCJMYmlIOpKD10XtyqYzzoKpFygYhPilm5nLZ+kt585E4Dfb9QNhJw8XYNOIHXUoX2FABkb3tc3EuHBVw/w5OvtRLWG0CnpmeZOAC4YZ35UUnlhgGUNZTy3oysTpyU56OW9Pbzrv54b87WywkOjRPb3qnpktlEg5YLEgrxun4XkmpFwjIFQNFX2HGB2ZSFLZ5ZqorWcVJ2DyaF942ekznDW+Gnc3XPCj79+TzdffWATT77ejrWW3716gNX/93E+fdcr3PizdVz63ado3N19wo8r7vntK/v5weNNrGgoo7Ykf8Ltr15Rxyt7e2lq01pmcuLd+ued4772hnmVqZ8f2HCArz24OROnJCeIAikXeIwBBVKSYe0DifWiaktG38yuXlDF+j09hKKqGiQnx+YD/QR8nlFB/OFmlhWwrL6Ux7a2HfFaNBaf0pC/SCzOzo5BntvRyWfv2cB7fvw8dzy/hxt/to4LvvUEn7rrFZbVl3L/xy/gJx88F4Phultf4PuPNRGM6P9BtrPW8q2Ht7KotpiffPDcSb3niqV1ALykgFpOsKFQlL6RyLivz6ooZPe3r+b7150FwO3P7dbc5Szim3gTOdE8HojEFElJZiUX3p1ROvrp7OoFlax9dhcv7OzmzafVuHFqcgpr6RnmvsZ9XH56Lfn+IxdETfeWM2bwwyeaEqXSnexV12CIv73tJba29nPe/EqisTh7uoapLArwxatO57LTa1NzDSKxOHe9tJd/e+R1+oOJdVkCXg+3XLqQm9+0kD+81sqzzZ0sqCnik5ctIs+XOJ/VC6r4ym9e43uPbef253Zx/QXz+PglCyc8X5meXt7bS1t/iM9dsSS14O5E5lYVMruygHvW7eMD5889yWcouWJP1xBv/tenJrXt21bM5P6X9/P09g7+6bebuPyMWj7ypgUn9wTluCkj5QLNkco9oWiMn/5lJx++fR0/erLZlXPY6Sx2mlyIN+mixdU0lBfwjd9vUVZKTrg7n99DJGb58tvOmHDbty6dQdzCE9vaU21f+vVr7OwY5G0r6thyoB8LnDO3gnAszk13NPLff95JOBrnK795jbO//ij/54HNLK0v5d/eu5JffvR8nvnCpXz+ytMpK/Tz/vPn8KMPnMPnrliSCqIAygr8/Of7z+Guj67mDfMq+f7jTVz1/b/w6JY2zZ/KMsFIjH/+3WZK8n1cvWLmpN9njOGjb1rAxpY+fvvK/pN4hpJLfv78nlG/z60qHHdbv9fDnR8+j3lVhTy/s4t/+cNWfvLnHRp2PM0pI+UCLcibWzbs6+Wz925gZ8cQ5YV+ntjWzqLaYq5cVpfR82hqG6TA76XhsCe0hQEf//Ku5dz4s3Xc19jC364e/TQ2EQTuYt3ubq5eMZN3nd2Az3tin8E07u7mxV3d/M0bZh91Ho1kl33dw6zf08PyhlJmV45/A5G0rL6UmWX5PL61nfeums2Gfb38aUsbn79yCbdcumjUtuFonFt++TLf+eM21j67i46BEO88q553rKwflaWaigsWVnHBwir+0tTBV36ziY/e2ciKhjI+d8VpXLy4Bo9n6vuUzPqfp3eysaWP/331GRTlTe0W59pzZ/Hz5/fwvce281cr6/XvLcftydcPPRT6+jXLuP6CeSz68kPUlY0/b++v3zCb7z/WRCga51sPbwPg7DnllOT7aeke5h0r67nxwnlHLekvmaNAygUeg9ZKyRG7Oof46J2N+DyG2298Axcuquav/vNZvvrAZs6cVcbMsskNOzkRmjsGWVBTNObNwSWn1bCotpg7n9/Nrs4hGnd3s3phFXk+L7979QC7OocoDHh56vUOfv3yfm770KrU2hfHa8O+Xt7/Py8SjsX5xQt7+PZ7zuT8BZXk+bz0jUQo8HsJ+CYXuHUOhvivJ3fw0u4urlhax6cuW3RMN9Ry/J7Y1saHb28E4KaL5k/qPcYY3riwmqecohD3r28h3+/h+guOHGoV8Hn4znvOpKXnRTwGvnHNMtYsn3wG4mjetLiGRz97MQ+91sq3HtrGh362jtJ8Hx+/ZBEfe/MC9alpaF/3MP/2p9f50+Y21iyrO6YhUYUBH5+6fDGfvusV/rTl4AnrT5KbfvRkMzs6hnjLGbV0DIR4m5Mh3fz1KzGMfw35xCWL+MQli/jjplb+uOkg2w4O8Mre3tTr33+8ie8/3sR337uS95w766T/OeToFEi5wKOMVE5o7w/ytz99kWgszu03ns+y+jIA/vXaM3nfrS/w1z95nl9+ZPWkntQfL2stzW0DnDe/cszXjTF8cc3pfOTORra3DRLweXi1pQ+AhvICfvahN3De/EruXrePb/5hCx++fR1rP/QGCvxeYnE7bobKWstDrx1k3e5uqosDzK4s5Mpldam5J/3BCJ+662VqSvL4znvO5PO/epXr175ERaGfWRWFvLa/j5J8H99970qumCCDNxyOcuPP1vH6wQEW1hbz749uZ3fnEN9+z5mTDsTk6Pb3jnDXi3vpGQ4zv7qID14wd9QQuaS/NHXwmbs3pH5fNbdi0se4cFEV97/cwpOvt/P7jQd469K6UYtIp6ssCvDwZ9409T/IJOT5vLzr7FlcvaKeP24+yG9f2c93/riNbQf7uWr5TNoHgoQicS4+rYYldSUn5RxkYnu6hrjrpX3cs24vPcMRLlxUxVeunngY6XjWLKtjRmken75rA7/+RCHLG8pO4NnKqer1gwP84Ikmrl89l/MXVDEQjPCDx5s4b34l/9+1K0ctOzLWNXMsa5bPZM3ymfQMhRl0Clb4vIb7Glt46LVWPnffq9z10l5++P6zmVGSrwyqS0w2Z0aMMWuA7wNe4KfW2m+Pt+2qVatsY2Njxs7taD5yxzp2dw3z+09dpMnMwF0v7eW7f9pOfXk+n7hkEU1tA6zb08P/efsZLKpN3KAEIzGeaeokHIuzal7FpMrZZlpT2wC/29jKay2JJ0frdvcQt5ZffnQ1Z80uH7XtxpZerl/7Evk+Lx978wIuWlzNotoSBkNRHt1ykIsW1VBTkpdaU+Lw4XhJsbhl3e5ultaXUhzwjXshXb+nh/f8+Dm++a7lR51I/diWNvqDEd59ziza+oMMh2PMqSzEm7bfBzbs5x/u2UBdaT7BaJze4TArGsqoK8untiSfgM/DO1bWs2RGCf/4q1f5w8ZWPGkl/+tK8/nWu1dw8Wk1fOIX63lsazv3/t1qzp1byWAoyrPNndzXuI+D/UGuXFrHA68eoLl9kNPrSijN91NTmofHGJrbB7HW8u5zGvjomxbwnT++zk+e3sFtN6zi0iW1/OjJZv7tT9t5zzmz+O5fryQUjfGnzW08vrWNYCTOvOoiVs2t4OLTao450IrHLQOhKMPhKJVFgUl/QELiCfpXfruJxt3dzKoo4OLFNXzqssWj1hSZSCxueei1Vh7e1MrCmmIuXFTN+fMrj8iYDIej/H5jK1sO9FNXls/Zs8s5Z24F/ikM0QxGYrz9h8+MqiZVnOfjf61ZwtUrZlJVnIe1ls0H+nn7D58B4MMXzmf1gkouO7120sNBQ9EYl/7rUxxwiqOs/dAqLjt9xqTP82Sx1vIfjzXxn082EzvsSdibFldz00XzefNpNeNmq6y1tA+E6B4KE4zEiMQs5YV+TptxYoKwUDTG+j09dAyEWFBdzOkzS/B5Eg/tvB7DcDhKMBKnMOAlz+c54jxHwjGCkRgFAe+0+lza2trPM02dnD6zhIsWVafO+8/bO/jRE82pKnvnzavkn96+lBWzjj/waW4f5IO3vUhlUYDfffKica+r1tqjPkiSU1PXYIh8v5eiPB/BSIwv3r+R3244kHr945csZHZFIV/+zWvc//E3cu4UHiRNVs9QmK//fgu/cebzleb7uOasBq45q56zZperTx4nY8x6a+2qSW2brYGUMcYLbAfeCrQA64D3WWu3jLX9dAqkPnvPBn79yn4K/F6uWl7Hxy5ZyGkzSrDWnlJDRiKxOPc1tvAmp5hB+odR4+5udncl5k/c9dLeMd9fXujnH95yGtecVc8nfvFyarHEgNfDkroSrr9gLhWFAVbOLj9qWeWJWGv5/cZWDvSOELOWV/b28uLOLs6cVc67zm7g3ec0YIwhFrdsPtDHgppiivN8WGsZicRo7w/xg8ebeGhTK6FonPnVRcTjlqI8H//3XStYeVgQlbTtYD/X3/YS7QOJNXYW1RYTisbY1z2C12OoKAzQMxzGWstpM0qYW1VIZVEelUV+LllSy+sHB3i2uZOHNx1M/X199E0L+NibF44KfAA+c/crPLG1nRe+fPmU5w2MJRlMzSwr4KrldWw92E9z+yDhaJyhcIxoLE5ZgZ/ekQifv3IJH33TAmJxy/o9PXzj91vY3TXE6gVVPPV6B//09qVHHfo1FIpy+3O7eXlPD0PhKG39IYKRGGfMLKVzMMTGlj4+9uaF/OKFPVy8pIYfvf+c1Hu/9fBWfvLnndxz82q+9fA2NuzrpaLQT3lhgJaeYSIxS0N5Ae87bzZXrZjJ/KoiwrE4961vYcuBPqqK8qgvL6C0wIfP42HxjGKGQzE2H+jjrnX72NjSS/ol9KzZ5fz7X69kQU1xqi0etxjDqP/bXYMh3vHDZxgIRnnn2Q3s6xnmL02dzK0s5OcfOZ+G8gLicct96/dxz7p9zK0q4g3zKrlkSQ315QX0ByM8tLGVnz6zi+b2QaqL8+geChG3iezPZ996GgUBL49tbWNb6wAv7OxiKByjKOBlKJwoKFJVFOAdK+tZs7yOQafCnddjmF1ZQFPbIOv39FBXls87z26gujiPL/16I3e9tI+1H1rFqnmVvLSzm58+s5MXdiZuZOvL8ukcDBOOxcn3e/jFR1ZzzpzyY7qm/fyFPfzTbzcB0PTNq6YU8J1sbf1B2vtDzCjLw2C4b/0+7nhuN239IRrKCzhrTjkrZ5Vx1uwKzp5TTiga52fP7OK2Z3fRO3xkCeSLFlXztb9axqLa0X3mhZ1d/Hl7R+pJ9GAoSigSJxSN4fUYakryKAr4GApHGQhG2djSN6rEcsDnwe8xDIVjFAa8DIcPFZLxGCjwe5lVUcgnL1vE6wcHuO2ZXYw4pd8riwKcXlfCefMrOX9+FWfPKR8VXI2EY2zY18v6Pd209gUZDEXpHgrTUF5AbUke7QMhKooCzKooYG5lEQtri6guzqN/JMJdL+3l4U0HsTYx7+Oy02u5dEntEcFKc/sgX/r1RtalrSt27twK3nxaDb9a38Le7mFqSvJYs6yOG944N/XQ7US5Z91evnD/a/i9hrefWc+KhjLOmVtBKBJje/sgv31lPwd6R2gfCHHmrDIuWlTN366ey4zSfIbDUe54bg9t/UGK8rysaChjUW0xsyoKxwxiTxRrLXGbqJTZuLuHXZ1DeAzUluazrL6UM2aWjvp3jMctB/pGsDZR6MDrMQyFonQPJ4L9ooCPgoCXGaX5lOb7Tpn7k6FQlMFQlPJC/xEPv4KRGH/a0kZz+yCXLqlh5axymtoHeWTzQZ7f0cWOjkE6BkOUFfgpL/ATjMQ52B/k3Wc3UF9ewH+mFZOaU1nInz9/yUn9e3tlbw/3Nrbw5LZ2DvYnHj7l+z18/M2LeP/5c47r3miqIrE4OzoS9wFej8HaxLIrr7X00zYQZF/3MFVFAWZVJCpkDoVi9Acj7Oseoal9gAsWVPGlSRQlyoRcCaQuAL5mrb3S+f1LANbab421/XQKpAZDUZ5r7uSp7R389pX9qQ+4mWX5/OMVS5hZns9tf9lFVXGANcvrKAz4WNFQRsxa/rCxlXPmVFBa4GM4HOP/vbCHVXMrWVJXTN9IlJ0dgzRUJLIXwUiMYCSOIVGZLRa3FAS85Pm87O8dIRZL3OCVF/qJxBJP1soK/AyGorT2jeDzeKgry2cgGKGpfZAlM0qoLcljOBKjYyDEttYB+oMR2vqD9I1EONgXpKo4wLL6MjoHQty9bh/7e0coyfcRisYJRxPDYAaDEV52xvvm+z1cs7KBf7xyCc82dzKjNJ+93UOsaCjnaw9uHrWmx/+++gzOnlPBrU/v4JHNo9eaqSoKUFeWT77f69zMRynweyl0nq4WBrxUFuXRMRCkpWeEtv4gDRUFnDmrnFAkzv0vt6T2Na+qkMUzStjeNsCermGuPnMmFy+u5idP72RnxxABn4cbL5zH1tYBnmvuJBq3FPi9XLFsBv9rzenjZo/GEozEaOkZcQKiVvZ2DfOpyxeztbWfjS191JbksWFfL+0DIeZVFdIzHDliPYpZFQVcvWIm6/f00Linh6qiABVFAc6eXU5pgZ/bntkFwI0XzuOr71g2+Y46gYN9QYrzfRQfFpj1jUT48VM7aGob4KY3zeeNC6tHvd4xEOIDP32BpvZBPnP5Yv7+Lacd8zlYa/n7ezbwgPM08IFbLhwVuPaNRHjzvz6ZuoH9j785KzWJPBKL88S2dn76l52pm7WG8gJC0TidgyEqCv30B6NHZB+SFtYUceWyOsoL/RTn+WnrD/LzF/YQjsb5h7eehs9jeGFnF09v78BjDEvqSjh9ZgkLa4q58/k97O8d4f6PvTH1BH3d7m4+fPs6SvIS8zQe2LCfF3Z2s6i2mL6RCB0DITwmMX9n84E+OgfDLJlRwqcvX8xVy+sYjsT47Sv7+eETTbT1J4Jzr8ewsKaIs2aX89erZnPu3Ao6BkO8sLObRzYd5NEtbYTHqUrn8xiicUtxno83n1bDH15r5eOXLOQLa05PbROJxXmmqZNHNh9kS2s/r+3v45qV9bzrnFnHVUo/FI3x8f/3Mu88u4G/Wll/zPvJlHA0zh9eO8CfNrexsaUvlUkuyfdhbeKaf/nptVyypIaq4jzy/R4CXi9bW/v54RNNjERi3HTRAq5aXsfj29q5f30L+3tH8HsNHmOoKgpQU5JHns9Lnt9D2OmjQ6FY6v/g/Ooirl4xk9mVhWxvG2BjSy+R2KFrelmBn9J8H8ORGCPhGMPhGE+93s6OjkQ1z7efOZNz51YwHI6xr3uYV1v62HawH2sTfaEk30c4GiduE/8+yf8WZQV+jIG5lYW09IzQNRSmqihAfzAyapmP9Kz0+fMr8XqMs35dnNmVBbz9zHpae0fYfKAfr8ews2OIwjwvt1yyiCuWzeCZ5k7+47EmOgZCFPi9XHfebD5z+eKTNuHeWsvaZ3fzjd+P+WyWeVWFLGsoo9DvZfOBfra09uMxiYIlze2DtPWHjghgIRHA1pfnc8mS2sTDpuEI4VgMv9fDkhklrF5QxZzKwlRgaa1lMBSlOM9HLJ7IagZ8HgI+D/t7En9fyfuJgcP+zo1h1IMer8ewqKaYBTVFDIaibNjXy4DzEGUilUUB5jkP86qLAyx3gsP51UUMBKN0DoZo7RshErNEY5ZILE5rXzB1Yz2jNI8FNcUsqC6iMOAjHItRV1pAbWkeuzuH2HpwgG2t/bT0jDCjNI8Cv5fq4rxU/y7O84362ef10DMcJt+XmEM7GIrS3h/kQO8I+50vjzFcuayO02aU0B+M8NjWNl7a1c2GfYkHYAV+L+9YOZO3rZhJa1+QXZ1D3Ne4j560Bx4Ffm/qAcOM0jzOnFVOgd+bqnDbPRTmhjfO4+1nJq5TwUiMc77xKMPhGJ++bBGfvWLJpP5+T4SBYIQ/bGzl0S1tPL6tHa/HsLi2mA+snssVS2fQOxwhbi1zKgtT2bR8v5d43BKNW7qGQnQNhtnRMYjHGPxew46OIV7d18vB/iCtfUEGghGK8/zMqiigoaKA4kDi36WlZ5hnm7sYDB3Zn4yBisIA9eX5dA2GaR8IjfpcrS7O44yZJbzljBnc8MZ5Gfv7OppcCaSuBdZYaz/i/P5B4Hxr7SfH2n46BVLpeobCrH12Fz984uglsf1ec8LWnirO843Z2SHxgRmzlhPRLU6vK+Hd5zTw9PZOnmnuTLXPrizg3WfPYtW8Cs6ZUzFuhsRay4OvHuDz923kuvNm8/VrlqfaN+3vZyAUIRSN09Q2wHM7unjq9Q6MgRUNZcyqKCAUiTMSSdww9I9E6BwMUV9ekHhqWprv3CwkPkjefU4D//xXy7BAqTMfIx63/Puj21NPmM6YWcoNF8zlmeZOfr+xNXWe86oK+e8PnsvpdaXH/5c2juQFD2BnxyB7u4eZWVZASb4vtU5KPG75+Qt7+M4ftx3x4Q3w5D9eckTpc7fE44ls3onIjgUjMf7+7g3MrS7kS1cd+TTrZ8/u4p9/t4W/WTWb71x75pj72NExyF+2d/D4tnbKCvy877w5XLiommgsTttAiP6RCOFonOb2QYryfCyqLWJBdfERT9H3947wiV+8zKv7Eg8KqosDXLKklgK/l20H+9nWOsBAKDEM8CcfPHfUivYAmw/0ccPadXQOhigv9POFNadz3Rtmp87xjuf28JemDurLC/jUZYs5f37lEecwEo7xyOaDWGxqiOh49nUP88q+XhrKCwh4PYxEYrT0DDO3qogzZ5Wxu3OIr/xmEy/t7mZxbTF/+PSbjjoMMhyNaz4aiaInjbu7eer1DuLW8r7z5nD2nLGH93QOhvj2w9v41frEwxxjElmqa8+dxRVL68j3e5z2E/9Uu28kwn2N+zh/ftWYQ+L6hiOs293NK/t66B+JEvB58JhEUYZl9aW8cVH1EQ9SorE4Pq+HWNzS1h9kd+cQu7qGaO0NUpTn46JF1aljRWJxHt50kLXP7GLDvl7qSvM5rS4xJHFBdREfWD131DUrFI3xyt5eltWXjjtv7kQLRWNsbR0gbi3bDw4Q8HlYWl/K4tqSUZn/Tfv7+O8/7+CRzQdZNbeSj148n0uX1BKOxdl8oJ+mtgE6B8N0DITYfKCPDft6U5/pRQEvMWsJRkY/1PB5DAGfh+FwjIDXgzEQih754KOswM/lp9dSW5qPz2OoK8tn1bwKTnOydPudAHXzgT427e9jT/cw+T4vZ80pZ3l9Wer+IhqPUxTwUVkUIN/vZTgcZSgco60vyPa2AQ70jdA9FOFA78hRF5hN8nsN86uLCPg87O0aTq3tNp7SfB+zKgrpGgoxHI5NOsg7XJ7PQ0NFAT1D4VFBESTuS86fX0ldWQGvH+zn4U0HU3+nHgOr5lVy00XzOXNWGY9vbee5HZ1UFgX4u4sXMquiYFL/D/+8vYNbn97Bv167ctLrmJ1oze2D3LNuL/etbzkiE24MFAd8DISiFAa8ROOW8Bj9KmlhTRENFYXUlebh93qIxiz7e0do6RmmtS9IKBqnobyAi0+r4Zw55ZQXBhgOJ/7tZpTms7S+NHVfBYnPibb+ICX5h4Li6SZXAqn3AlceFkidZ639VNo2NwM3A8yZM+fcPXv2jLmv6cBay8t7exkJx9jRMUgsbukcDPGG+ZW8sqeHrqEwfq+HPL+HgNeTeEpZHMDvfGBZIBaLc/acCobCUYKRGHk+LyX5PicD1kXXUDjxFMXCQCjKmQ1l5Pu9WBLDASLROL0jEUrz/dSX5+PzJp4K1pTksbi2hJd2dROJxSkv9FOa72dpfSllBX5mluUzGEo8ud/bPUxRno+yAj+1JXmjLjrRWJxHt7Rx8Wk1U7qBHgxFKQp4J3UBi8XtEcPajiYet3QPJ56gjrf/p7d3AIl5EMltugZDRGL2qCVM3bave5g8n4e93cMsqi3O2VKp1lpe3NXNylnlFARO/tyPSCzO1tZ+6krzqTns/4C1lgN9QcoL/OP+H+gPRmjpHmFRbfG0CEpiccszzZ0sqy9VafqTaGtrP9udgjCZrOY5HSSzLpkKjk6meNxOetJ/JBbHm1xMOh5nX/cwz+/spnswTCweJxK3BCMxakvy6R0JE4tZFtQUE43HCUZi1JUVsKimmNPrSjJaaCAWtxzsD/L6wX729wYpzU985s+uTAxd9Hs9+DyGsgL/qJvk9v4g+3tHCEfj+H2exNDI/hBzqwo5Y2Zi6YP062U4Gk8NwxsIRhkKRxkMRhkIRRkJR6kuziMSixOKxinO8yTeRQkAAAY7SURBVFFbkk9dWT7VxYnP8+FwlM0H+tnfkxguf+nptUcE/h0DIZ7e3sGCmiJmVxaectc4ay3PNnfxaksvRc4Inbb+ED3DYfL8HroGw/g8htqSPKpL8qgoDDCvqgiPB4bDMWpL8phbdfQHsJFYfFoNvz4RciWQytqhfSIiIiIiMv1MJZDK5hByHbDYGDPfGBMArgMedPmcREREREQkB2TtOlLW2qgx5pPAIyTKn6+11m52+bRERERERCQHZG0gBWCtfQh4yO3zEBERERGR3JLNQ/tERERERERcoUBKRERERERkihRIiYiIiIiITJECKRERERERkSlSICUiIiIiIjJFWbsg71QZYzqAPW6fR5pqoNPtk5Cspj4kJ4L6kRwv9SE5EdSP5HidqD4011pbM5kNcyaQmm6MMY2TXTVZZCzqQ3IiqB/J8VIfkhNB/UiOlxt9SEP7REREREREpkiBlIiIiIiIyBQpkHLPrW6fgGQ99SE5EdSP5HipD8mJoH4kxyvjfUhzpERERERERKZIGSkREREREZEpUiCVYcaYNcaY140xzcaYL7p9PjJ9GWNmG2OeNMZsNcZsNsZ8xmmvNMY8aoxpcr5XOO3GGPMDp29tNMac4+6f4P9v725CrarCMI7/H66ZaZRZFKWFSlJJUEaYfRCiYV+SDYyMIjGjSdAHRVQTaeAgiCwonPiRRVhxk5IGhVRQk6TMQZJBYqG3TIWrFgWZ9DTY6+jxetW7r3rOifv84HLPWnsN1uDl3efde611olNI6pK0UdJHpT1B0voSQ+9KGl76Ty/tLeX6+HbOOzqHpNGSuiX9UHLS9clFUYekJ8u9bJOk1ZJGJBfF8UhaIWmXpE1NfbVzj6T5ZfyPkuafrPmlkGohSV3A68DtwGTgPkmT2zur6GAHgKdsXwFMAx4t8fIs8KntScCnpQ1VXE0qf48AS1s/5ehQjwObm9ovAktKDO0BFpb+hcAe25cCS8q4CIBXgY9tXw5cRRVPyUUxIJLGAo8B19q+EugC5pFcFMf3BnBbn75auUfSGGARcB0wFVjUKL5OVAqp1poKbLG91fZ+4B1gTpvnFB3K9g7b35bPf1B9cRlLFTOryrBVwN3l8xzgTVe+AkZLurDF044OI2kccCewrLQFzAC6y5C+MdSIrW5gZhkfQ5iks4CbgeUAtvfb3ktyUdQzDDhD0jBgJLCD5KI4DttfAL19uuvmnluBdbZ7be8B1nFkcTYoKaRaayywvandU/oijqksa5gCrAcusL0DqmILOL8MS3xFf14BngH+Le1zgb22D5R2c5wcjKFyfV8ZH0PbRGA3sLIsEV0maRTJRTFAtn8BXgK2URVQ+4ANJBfF4NTNPacsJ6WQaq3+nqbk2MQ4JklnAu8DT9j+/VhD++lLfA1hkmYDu2xvaO7uZ6gHcC2GrmHANcBS21OAPzm0lKY/iaM4TFlGNQeYAFwEjKJahtVXclGciKPFzSmLpxRSrdUDXNzUHgf82qa5xP+ApNOoiqi3ba8p3Tsby2TK/12lP/EVfd0I3CXpZ6qlxDOo3lCNLstr4PA4ORhD5frZHLmkIoaeHqDH9vrS7qYqrJKLYqBuAX6yvdv2P8Aa4AaSi2Jw6uaeU5aTUki11tfApHJKzXCqjZZr2zyn6FBlPfhyYLPtl5surQUaJ87MBz5s6n+wnFozDdjXePUdQ5Pt52yPsz2eKt98Zvt+4HNgbhnWN4YasTW3jM9T4CHO9m/AdkmXla6ZwPckF8XAbQOmSRpZ7m2NGEouisGom3s+AWZJOqe8HZ1V+k5YfpC3xSTdQfVEuAtYYXtxm6cUHUrSTcCXwHcc2t/yPNU+qfeAS6huTvfY7i03p9eoNlD+BSyw/U3LJx4dSdJ04GnbsyVNpHpDNQbYCDxg+29JI4C3qPbj9QLzbG9t15yjc0i6murAkuHAVmAB1cPY5KIYEEkvAPdSnUi7EXiYap9KclEclaTVwHTgPGAn1el7H1Az90h6iOo7FMBi2ytPyvxSSEVERERERNSTpX0RERERERE1pZCKiIiIiIioKYVURERERERETSmkIiIiIiIiakohFRERERERUVMKqYiIiIiIiJpSSEVERERERNSUQioiIiIiIqKm/wAxzWMyRh5YcAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4fecdcbe0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X = np.fft.fft(x);\n",
"f, y = dft_map(X, Fs, shift=False)\n",
"plt.plot(f[:2000], abs(y[:2000]));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see that the first peak is in the vicinity of 200Hz; to find the exact frequency (to within the resolution afforded by this DFT) let's find the location"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"DFT resolution is 0.48828125 Hz\n",
"the note has a pitch of 220.703125 Hz\n"
]
}
],
"source": [
"dft_resolution = float(Fs)/ len(x)\n",
"print(\"DFT resolution is\", dft_resolution, \"Hz\")\n",
"\n",
"# let's search up to 300Hz\n",
"max_range = int(300 / dft_resolution)\n",
"ix = np.argmax(abs(y[:max_range]))\n",
"pitch = f[ix]\n",
"print(\"the note has a pitch of\", pitch, \"Hz\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"so the note is a A, half the frequency of concert pitch."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Zero-padding\n",
"\n",
"Since the resolution of a DFT depends on the length of the data vector, one may erroneously assume that, by *artificially* extending a given data set, the resulting resolution would improve. Note that here we're not talking about *collecting* more data; rather, we have a data set and we append zeros (or any other constant value) to the end of it. This extension is called zero-padding.\n",
"\n",
"The derivation of why zero-padding does not increase the resolution is detailed in the book. Here we will just present a simple example. \n",
"\n",
"Assume we're in $\\mathbb{C}^N$ with $N=256$. The resolution of the DFT in this space is \n",
"\n",
"$$\n",
" \\Delta = 2\\pi/256 \\approx 0.0245\n",
"$$\n",
"\n",
"Let's build a signal with two sinusoids with frequencies more than $\\Delta$ apart and let's look at the spectrum:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4ff58e4e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"N = 256\n",
"Delta = 2*np.pi / N\n",
"n = np.arange(0, N)\n",
"\n",
"# main frequency (not a multiple of the fundamental freq for the space)\n",
"omega = 2*np.pi / 10 \n",
"\n",
"x = np.cos(omega * n) + np.cos((omega + 3*Delta) * n)\n",
"plt.plot(abs(np.fft.fft(x))[:100]);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"we can tell the two frequencies apart and, if you zoom in on the plot, you will see that they are indeed three indices apart. Now let's build a signal with two frequencies that are less than $\\Delta$ apart:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzkAAAD8CAYAAABU32qDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XuQnHd95/v3t29zk0aypLEty7JlEwE2DrcIYyDJskASSABzduHEQBInYY9rdzlZ9nYS2K0TkspSlYQ9m5ADIetgFlNJkXiBs3aybHbBgXAJdiJDAF8wVmTZEr6NJEszmmtP9+/80U/P9Ix6NKPpGc30M+9X1VQ/l9/zPD+pep7pT/8uT6SUkCRJkqS8KKx3BSRJkiRpNRlyJEmSJOWKIUeSJElSrhhyJEmSJOWKIUeSJElSrhhyJEmSJOWKIUeSJElSrhhyJEmSJOWKIUeSJElSrpTWuwIAu3btSvv27VvvakiSJEnaoO67777jKaWh5ZTdECFn3759HDx4cL2rIUmSJGmDiojHllvW7mqSJEmScsWQI0mSJClXDDmSJEmScsWQI0mSJClXDDmSJEmScmXJkBMRH4+IZyLi/gXbfykiHo6IByLit1u2vy8iDmX7fmItKi1JkiRJi1nOFNKfAD4MfLK5ISL+IXAj8MKU0lREXJxtvxa4CXgBcBnwhYh4bkqpttoVlyRJkqR2lmzJSSl9GTi5YPM/A34zpTSVlXkm234j8CcppamU0qPAIeD6VayvpFXwxKkJ7n7o6fWuhiRJ0ppY6Zic5wI/EhH3RsRfRcTLsu17gKMt5Y5l284SEbdExMGIODg8PLzCakhaidv/+gj/7I++QUppvasiSZK06lYackrARcANwP8F3BERAUSbsm0/RaWUbk0pHUgpHRgaGlphNSStxKnxKtO1OlMz9fWuiiRJ0qpbacg5Bnw2NfwNUAd2Zdv3tpS7HHiisypKWm2jU1UAJqYdLidJkvJnpSHnvwGvAYiI5wIV4DhwF3BTRPRExFXAfuBvVqOiklbPyMQMAGPTM+tcE0mSpNW35OxqEfEp4NXArog4Brwf+Djw8Wxa6Wng5tTo3P9ARNwBPAjMAO92ZjVp4xmdtCVHkiTl15IhJ6X09kV2/cwi5T8AfKCTSklaWyOTzZYcQ44kScqflXZXk9TFmi0543ZXkyRJOWTIkTah5pic8SlbciRJUv4YcqRNZrJaY7rWmDp6vGrIkSRJ+WPIkTaZkayrGsD4lN3VJElS/hhypE2m2VUNYNyJByRJUg4ZcqRNZrS1JceJByRJUg4ZcqRNpjl9NNiSI0mS8smQI20y81tyDDmSJCl/DDnSJtMck1MIu6tJkqR8MuRIm0yzJWdoa48tOZIkKZcMOdImMzJZpVgIdm0x5EiSpHwy5EibzOjkDFt7SwxUSnZXkyRJuWTIkTaZkYkqg71l+ipFW3IkSVIuGXKkTWa2JafHkCNJkvLJkCNtMiOTWUtOucT4lN3VJElS/iwZciLi4xHxTETc32bfv42IFBG7svWIiN+LiEMR8e2IeOlaVFrSys1ryanakiNJkvJnOS05nwBev3BjROwFfgx4vGXzG4D92c8twEc7r6Kk1TQyUWWwLxuTM2XIkSRJ+bNkyEkpfRk42WbX7wC/DKSWbTcCn0wN9wDbI2L3qtRU0qponV1tulanWquvd5UkSZJW1YrG5ETEm4Hvp5S+tWDXHuBoy/qxbJukDaBWT4xOzTDYW6a/UgRw8gFJkpQ7pfM9ICL6gX8P/Hi73W22pTbbiIhbaHRp44orrjjfakhagTPZRANbe0v0Vxq//hPTNbb1ldezWpIkSatqJS05zwGuAr4VEUeAy4FvRMSlNFpu9raUvRx4ot1JUkq3ppQOpJQODA0NraAaks7XyEQVgMG+uZacMR8IKkmScua8Q05K6TsppYtTSvtSSvtoBJuXppSeAu4Cfi6bZe0G4HRK6cnVrbKklRqdbASawd7SbMiZsLuaJEnKmeVMIf0p4OvA8yLiWES86xzFPwccBg4Bfwj881WppaRVMTKZteT0lme7q435rBxJkpQzS47JSSm9fYn9+1qWE/DuzqslaS00W3K29pap1huzqvmsHEmSlDfnPfGApO41NyanxEQWbnxWjiRJyhtDjrSJjGbd1bb2lilEYzLEcScekCRJOWPIkTaRkcm5KaTrqTG7u8/JkSRJebOih4FK6k6jk1X6ykXKxQID2cQDhhxJkpQ3hhxpExmZmGGwrxFuessFIuyuJkmS8seQI20io1NVtvaWAYgI+stFW3IkSVLuGHKkTWRkYobB3rmheH2Vki05kiQpdww50iYyOjnXkgMw0GNLjiRJyh9DjrSJjEzOMNg3F3L6ykXGfE6OJEnKGUOOtIk0WnLmuqsN9JSYqNpdTZIk5YshR9pEGmNy5lpy+iu25EiSpPwx5EibxGS1xnStPq8lp79SZMIxOZIkKWcMOdImMTJZBZg3Jqe/UmLM2dUkSVLOGHKkTWJ0shFmBm3JkSRJOWfIkTaJkYmsJWfhmBxbciRJUs4YcqRNotmSM39MTonJap1aPa1XtSRJklbdkiEnIj4eEc9ExP0t2z4YEd+NiG9HxP8XEdtb9r0vIg5FxMMR8RNrVXFJ56f9mJwiABNVu6xJkqT8WE5LzieA1y/Y9nngupTSC4HvAe8DiIhrgZuAF2TH/H5EFFettpJWrG1LTk9jedwua5IkKUeWDDkppS8DJxds+18ppeanonuAy7PlG4E/SSlNpZQeBQ4B169ifSWtUNsxOeXGdxDjPitHkiTlyGqMyflF4H9ky3uAoy37jmXbJK2z0ckZioWY7aIGMNCThRxnWJMkSTnSUciJiH8PzAB/3NzUpljbEc0RcUtEHIyIg8PDw51UQ9IyjExW2dpbImLu17SvYnc1SZKUPysOORFxM/BG4J0ppWaQOQbsbSl2OfBEu+NTSremlA6klA4MDQ2ttBqSlml0cmZeVzWAgYotOZIkKX9WFHIi4vXArwBvTimNt+y6C7gpInoi4ipgP/A3nVdTUqdGJqrzJh0A6JsNObbkSJKk/CgtVSAiPgW8GtgVEceA99OYTa0H+HzW9eWelNI/TSk9EBF3AA/S6Mb27pSSXxFLG0D7lpxmdzV/TSVJUn4sGXJSSm9vs/m2c5T/APCBTiolafWNTFa5Ykf/vG3NSQjGDDmSJClHVmN2NUldYGSiOu9BoDD3nJwJu6tJkqQcMeRIm8To5MzZY3Ky5+SM+ZwcSZKUI4YcaROo1ROjU2ePySkWgt5ygYmqIUeSJOWHIUfaBM5MNbqjLWzJAeivlBibsruaJEnKD0OOtAmMTFQBzhqTA43JByaceECSJOWIIUfaBEYnGy01g21bcoqMOfGAJEnKEUOOtAmMTGYtOb3tWnJKPidHkiTliiFH2gSaLTlb24acoiFHkiTliiFH2gTmxuS0n3jAkCNJkvLEkCNtAqNZd7XFW3IckyNJkvLDkCNtAiOTi08hPdBjdzVJkpQvhhxpExidrNJXLlIunv0r31cuMe5zciRJUo4YcqRNYGRipu14HMhacqo1UkoXuFaSJElrw5AjbQKjU9W243EA+ipFUoLJav0C10qSJGltGHKkTWBkYqbtg0ABBiqN7U4+IEmS8sKQI20Co5PnbskBnHxAkiTlxpIhJyI+HhHPRMT9Ldt2RMTnI+KR7PWibHtExO9FxKGI+HZEvHQtKy9peUYmZxjsax9y5lpyDDmSJCkfltOS8wng9Qu2vRe4O6W0H7g7Wwd4A7A/+7kF+OjqVFNSJxotOe27q/VnLTljdleTJEk5sWTISSl9GTi5YPONwO3Z8u3AW1q2fzI13ANsj4jdq1VZSSvTGJPTviWnGXImbMmRJEk5sdIxOZeklJ4EyF4vzrbvAY62lDuWbZO0TiarNaZr9XO05DS2j/msHEmSlBOrPfFAtNnW9uEbEXFLRByMiIPDw8OrXA1JTSOTVYBFx+T092QtOVVbciRJUj6sNOQ83eyGlr0+k20/BuxtKXc58ES7E6SUbk0pHUgpHRgaGlphNSQtZXSy0UKz2BTSs2Nypgw5kiQpH1Yacu4Cbs6WbwbubNn+c9ksazcAp5vd2iStj5GJrCVn0TE5PidHkiTlS/uvdltExKeAVwO7IuIY8H7gN4E7IuJdwOPA27LinwN+EjgEjAO/sAZ1lnQemi05S82u5hTSkiQpL5YMOSmlty+y67Vtyibg3Z1WStLqWWpMTrlYoFIsGHIkSVJurPbEA5I2mKVacgD6KkW7q0mSpNww5Eg5t9SYHICBStGWHEmSlBuGHCnnRidnKBZiduxNO7bkSJKkPDHkSDk3Mllla2+JiHaPsWoY6CnZkiNJknLDkCPl3OjkzDnH4wD0lYuM+5wcSZKUE4YcKedGJqrnHI8DWUtO1e5qkiQpHww5Us4tqyWnYkuOJEnKD0OOlHMjk8toyXF2NUmSlCOGHCnnGi055w45/ZUSY86uJkmScsKQI+XcyESVwb5zd1frrxSZmK6RUrpAtZIkSVo7hhwpx+r1xJnpmSW7q/VXiszUE9O1+gWqmSRJ0tox5Eg5Njo1Q0osOfFAf6Wxf8JxOZIkKQcMOVKOjU5WARjsW7olB3DyAUmSlAuGHCnHRiYakwkMLtWS09PYP+7kA5IkKQcMOVKOzbbkLDUmp2xLjiRJyg9DjpRjI5ONlpklp5DuaYScMR8IKkmScqCjkBMR/yoiHoiI+yPiUxHRGxFXRcS9EfFIRPxpRFRWq7KSzs/cmJxlTjxQtbuaJEnqfisOORGxB/gXwIGU0nVAEbgJ+C3gd1JK+4FngXetRkUlnb+RiUbIWaolZ6BiS44kScqPTrurlYC+iCgB/cCTwGuAT2f7bwfe0uE1JK3Q6Gx3tXO35PRlIccppCVJUh6sOOSklL4P/EfgcRrh5jRwH3AqpdTs83IM2NNpJSWtzMhklb5ykXLx3L/qA1l3tTFnV5MkSTnQSXe1i4AbgauAy4AB4A1tiqZFjr8lIg5GxMHh4eGVVkPSOYxMzCw5HgfmWnKcXU2SJOVBJ93VXgc8mlIaTilVgc8CrwS2Z93XAC4Hnmh3cErp1pTSgZTSgaGhoQ6qIWkxo1PVJcfjAPSUChQL4XNyJElSLnQSch4HboiI/ogI4LXAg8AXgbdmZW4G7uysipJWamRiZskHgQJEBP3loi05kiQpFzoZk3MvjQkGvgF8JzvXrcCvAP86Ig4BO4HbVqGeklZgdHJ5LTnQeFbOuLOrSZKkHFj6K95zSCm9H3j/gs2Hges7Oa+k1TEyOcMVOweWVba/UmK8asiRJEndr9MppCVtYI2WnOV9l9FfKTI+5ZgcSZLU/Qw5Uo41xuQss7taxTE5kiQpHww5Uk5NVmtM1+rn0ZJTcnY1SZKUC4YcKadGJqsADPbZkiNJkjYXQ46UU6OTjVaZ5UwhDc2WHEOOJEnqfoYcKadGJrKWnPMak2N3NUmS1P0MOVJONVtylj0mp6fImC05kiQpBww5Uk6d95icconpmToztfpaVkuSJGnNGXKknDrflpyBniKADwSVJEldz5Aj5dT5jsnpqzRCzoRd1iRJUpcz5Eg5NTo5Q7EQ9GfhZSkDlUaLz9iUkw9IkqTuZsiRcmpkssrW3hIRsazyzZYcp5GWJEndzpAj5dTo5Myyx+PAXEuOIUeSJHU7Q46UU6fGp5c9HgdaW3LsriZJkrqbIUfKqaPPTnD5RX3LLj87u5otOZIkqcsZcqQcqtUTj58YZ9/OgWUf01+2u5okScqHjkJORGyPiE9HxHcj4qGIeEVE7IiIz0fEI9nrRatVWUnL8+TpCaZrdfbtOo+Q02N3NUmSlA+dtuR8CPiLlNLzgRcBDwHvBe5OKe0H7s7WJV1Aj50YB+DKnf3LPqbf2dUkSVJOrDjkRMQg8KPAbQAppemU0ingRuD2rNjtwFs6raSk83PkxBjAeXVX6y0ViYBxn5MjSZK6XCctOVcDw8B/iYhvRsTHImIAuCSl9CRA9nrxKtRT0nk4cnyMnlKBSwd7l31MoRD0lYu25EiSpK7XScgpAS8FPppSegkwxnl0TYuIWyLiYEQcHB4e7qAakhY6cmKcK3f2Uygs70GgTf2VEmOGHEmS1OU6CTnHgGMppXuz9U/TCD1PR8RugOz1mXYHp5RuTSkdSCkdGBoa6qAakhY6cnzsvLqqNfVXikw48YAkSepyKw45KaWngKMR8bxs02uBB4G7gJuzbTcDd3ZUQ0nnpV5PPHZy/LxmVmvqrxRtyZEkSV2v1OHxvwT8cURUgMPAL9AITndExLuAx4G3dXgNSefhqZFJpmfq5zWzWlOjJceQI0mSultHISel9HfAgTa7XtvJeSWt3JHjjZnVrlpBd7WBnhJnnF1NkiR1uU6fkyNpgznSfEbOCrqr9ZVtyZEkSd3PkCPlzJETY1RKBXafx/TRTQM9JcaceECSJHU5Q46UM0eOj3HljvOfPhqgzzE5kiQpBww5Us48dmKcK1cwHgdgoFJkbMqQI0mSupshR8qRej1x5MQYV+06/5nVAPoqJSaqNer1tMo1kyRJunAMOVKOPD06ydRMvaOWHICJqq05kiSpexlypBx5NJs+et8KQ05/FnLGHZcjSZK6mCFHypHHsumj962wu1p/pfHorHFnWJMkSV3MkCPlyJETY1SKBXZv61vR8bbkSJKkPDDkSDly5PgYV+zsp7iC6aMB+ntsyZEkSd3PkCPlyGMnxtm3c2Vd1cCWHEmSlA+GHCknmtNHr3RmNZgLOT4rR5IkdTNDjpQTz4xOMVmts29XJyGn0V1tomp3NUmS1L0MOVJOzE0fvfLuagO25EiSpBww5Eg58diJzp6RA9DXfBioY3IkSVIXM+RIOXHkxDjlYnDZ9pVNHw1z3dXGnF1NkiR1sY5DTkQUI+KbEfHn2fpVEXFvRDwSEX8aEZXOqylpKUeOj7F3x8qnjwYoFoKeUsGWHEmS1NVWoyXnPcBDLeu/BfxOSmk/8CzwrlW4hqQlHDkxxlUddFVrGugp2ZIjSZK6WkchJyIuB34K+Fi2HsBrgE9nRW4H3tLJNSQtLaXEYyfGO5o+uqmvXPQ5OZIkqat12pLzu8AvA/VsfSdwKqXU/Br4GLCn3YERcUtEHIyIg8PDwx1WQ9rcnhmdYqJa46pdK59ZrWmgp8i4s6tJkqQutuKQExFvBJ5JKd3XurlN0dTu+JTSrSmlAymlA0NDQyuthiQa43GA1WnJqZQYrxpyJElS9yp1cOyrgDdHxE8CvcAgjZad7RFRylpzLgee6Lyaks7lyCpMH900UCkyPuWYHEmS1L1W3JKTUnpfSunylNI+4CbgL1NK7wS+CLw1K3YzcGfHtZR0TnPTR/d2fK7+imNyJElSd1uL5+T8CvCvI+IQjTE6t63BNSS1OHJ8jL0X9VMqdv4r3V8pMe7sapIkqYt10l1tVkrpS8CXsuXDwPWrcV5Jy3PkxDj7dnXeVQ1syZEkSd1vLVpyJF1Ajemjx7hyZ+czq0GzJceQI0mSupchR+pyw6NTjE/XVmXSAWi25MyQUtuJESVJkjY8Q47U5Y6cGAdYve5qPUXqCaZm6ksXliRJ2oAMOVKXaz4jZ99qdVcrFwHssiZJkrqWIUfqckdOjFEqBHu2963K+fp7GvORjE5WV+V8kiRJF5ohR+pyj50YZ++O1Zk+GuAH92wD4PMPPr0q55MkSbrQDDlSl3v0+OrNrAZwze5Brt+3g9u/foRa3ckHJElS9zHkSF2sOX30as2s1vTzr9rH0ZMTfPG7z6zqeSVJki4EQ47UxYbPTDE2XVu1SQeafvzaS9i9rZdP/PWRVT2vJEnShWDIkbrYY6s8fXRTqVjgZ264kq8eOs4jT4+u6rklSZLWmiFH6mKPzk4fvbohB+Dt119BpVTg9q8fWfVzS5IkrSVDjtTFHjsxRrEQ7LlodaaPbrVjoMKNL7qMz9z3fU5POJ20JEnqHoYcqYsdOTHO3ov6KK/S9NEL3fzKfUxUa/zXg0fX5PySJElrwZAjdbFHh8e4cg26qjVdt2cbL9t3EZ/8+mNOJy1JkrqGIUfqUl87dJwHnxzh5VfvWNPr/Pwrr+Lxk+N86WGnk5YkSd3BkCN1oamZGv/3nfdz5c5+fvFVV63ptX78BZdw6aDTSUuSpO6x4pATEXsj4osR8VBEPBAR78m274iIz0fEI9nrRatXXUkAH/vKoxweHuPX3vwCesvFNb1WuVjgZ19xJV955DiHnnE6aUmStPF10pIzA/yblNI1wA3AuyPiWuC9wN0ppf3A3dm6pFVy9OQ4/+9fPsLrX3Ap//B5F1+Qa970sr2N6aT/+rELcj1JkqROrDjkpJSeTCl9I1seBR4C9gA3ArdnxW4H3tJpJSXN+fU/e5BCBL/6pmsv2DV3bunhzS+6jM9845jTSUuSpA1vVcbkRMQ+4CXAvcAlKaUnoRGEgLZfNUfELRFxMCIODg8Pr0Y1pNz7woNP84WHnuY9r93PZdtX/9k45/Lzr9zH+LTTSUuSpI2v45ATEVuAzwD/MqU0stzjUkq3ppQOpJQODA0NdVoNKfcmpmv82p89wP6Lt/CLP7y2kw20c92ebRy40umkJUnSxtdRyImIMo2A88cppc9mm5+OiN3Z/t2A885Kq+AjXzzEsWcn+I23XLdmD/9cys+/ah+Pnxzn9794iJQMOpIkaWPqZHa1AG4DHkop/aeWXXcBN2fLNwN3rrx6kgD+fvgM//nLf88/eskebrh657rV4w3X7ebNL7qM/+fz3+M//PeHqNuiI0mSNqBSB8e+CvhZ4DsR8XfZtn8H/CZwR0S8C3gceFtnVZQ2t5QSv3rn/fSWi7zvJ69Z17oUC8Hv/vSL2TFQ4bavPsrxM1N88K0volLykVuSJGnjWHHISSl9FYhFdr92peeVNN+ff/tJvnboBL9x4wsY2tqz3tWhUAje/6ZruXiwh9/+i4c5OTbNH/zMDzHQ08l3JpIkSavHr1+lDew7x07z63/2ID+4ZxvvePmV612dWRHBP3/1D/Db//iFfO3Qcd7xh/dw4szUeldLkiQJMORIG1JKidu++ij/6KNfo1wMPvi2F1IsLNZwun7+95ft5T//7AG++9Qob/uDr3P05Ph6V0mSJMmQI200z45N83988iC/8ecP8g+eezH/4z0/wvMvHVzvai3qx669hD/6Jy/n+Jkp/vFH/5qvHTruzGuSJGldGXKkDeTewyd4w4e+wpe/d5xfe9O1/OHP/RDb+yvrXa0lvWzfDv7rP30l5WKBd37sXt72B1/nSw8/Y9iRJEnrIjbCh5ADBw6kgwcPrnc1pHVTqyc+/JeH+NDd3+OKHf18+B0v5bo929a7WudtslrjjoNH+YMv/T1PnJ7khZdv45des5/XXXMxjVnnJUmSViYi7kspHVhWWUOOtH5SSnzj8Wf54P98mHsOn+QtL76M//C//SBbunymsumZOp/5xjF+/0uHOHpygudfupVfes1+3nDdpRQ24NgiSZK08RlypA1uYrrGnX/3fT759cd48MkRtvaW+NU3Xstbf+jyXLV4VGt17vq7J/jIFw9x+PgYlwz28NprLuF111zMK5+zi95ycb2rKEmSuoQhR9qgjhwf44/ueYw7Dh5lZHKG51+6lZ99xZW85cV7cv2cmVo98Rf3P8V//84T/NXDw4xN1+grF/mR/bt43bWX8JrnX8yuLev/DCBJkrRxnU/Iye+nKmmD+P6pCb76yDCf+85T/NX3hikVgp+47lJufsU+Xrbvoly13CymWAh+6oW7+akX7mZqpsY9h0/yhQef5gsPPc3/evBpIuC6y7bx4r3beeHl23jR3u08Z2jLhpw2W5IkbXy25EirbHSyyj2HT/LVR4b5yiPHOXx8DIDd23r56Zft5R3XX8HFg73rXMuNIaXEA0+M8IWHnubewyf5zvdPc2ZqBoCBSpHr9jQCz3V7tvGcoQGu3rWFvopd3CRJ2oxsyZEukFo98ejxMR58coQHnjjNfUee5ZtHT1GrJ/rKRV5+9Q7e8fIr+NHnDrH/4i2botXmfEQE1+3ZNjuTXL2eOHz8DN86eppvHTvFt46d5hNfO8J0rT57zGXberl6aAtXDw1w9a4Brhrawp7tfVy2vZf+irc0SZJkS460LCklToxN89iJMR5+6gwPPnmaB54Y4btPjjJRrQFQLgbX7h7kVT+wix/ev4sfuvIiekq2OnRqeqbO3w+f4fDwGIeHz3D4ePY6PMZo1urTtL2/zGXbGoHnsu197N7Wx8Vbe9i1tYehLT3s2lph50CP3eAkSepCtuRIKzAxXeOpkUmePD3B0ZPjHDkxzuMnxjlyYozHTozPdqMC2NpT4prLBrnp+r1cu3uQF1y2jR+4eAuVks/XXW2VUoFrdg9yze7BedtTShw/M82RE2M8cWqC75+a4IlTEzxxapJjz07wN4+eZGRy5qzzFQJ2DFTYtaWHi/orXDRQZnt/hYv6y1zUX5ld3tZXZmtvmcG+Elt7ywxUirbESZLUJQw5yrV6PTEyWeX4mWlOnJnixFjj9fiZaZ4emeTJ05Ozr6cnqvOOLRWCK3b0c+XOfl62bwdX7uxn384BnjO0hb07+vzAu84igqGtPQxtXXxWtjNTMxwfnWL4zBTHR6c4fmaK4TPTjdfRKZ4dm+bhp0Y5NV7l1ESVWn3xlu1iIdjSU2Kwr8SWnjJbeops6Skx0FOafW0sF+mrlOgvF+mvFOnvKdFfKdKXrfdly73lIj2lgu8jSZLWgCFHG169njgzPcOZyRlGJ2cYnawyOjnDSPZ6eqLKqfHp2Q+qp8ernJqY5tnxKs+OTTPT5oNrBOza0sOlg73s3dHP9Vft4JLBXnZv653dtntbL6WiLTPdbEsWQPbtGliybEqJ0akZTo1VeXZ8mtMT1dn32MjE3HtuZKLKmakZzkzNMHxmiiNZK9/Y1Azj07XzrmNvuTAbeprBpyd7nV0vFegpFanMLjd+Ks2fYoFKqUi5GLNlysXGvnIxWy4WKJdidrlUbCyXC43lUjEoFwo+rFWSlAtrFnIi4vXAh4Ai8LGU0m+u1bW0vlJKTM3UGz9f3WW1AAAKOElEQVTVGpPVOhPVGpPNn5k6k9UaE9M1xqdrTFRrTEw3PhCOTzfKjE3XGM8+OI5NzzA+VeNM9qFxbHqGpYaO9ZWLbM+6GG3vL3P1ri1s7y+zc0tjDMa81y0VdvRXDDCaJyIY7C0z2Fvmip39KzpHrZ4Yn56Zfa833u9z7/Xx6Rkmq9nvQ7XG5HTj92Mi+72Y/R3KXkcmqkxm26ebv2MztdnltVAsBKVCIwCVio3lUmEuFLXuby43yjXWy8XIts/tL2SvxdnXAsUC816b+wsxd0wxoFgsUIygWIBCNMrM/kSzXGM9gvnbC0Eh5o4rRLQsM3tsIeaOLURQyK5ViMb+aF57YbnAljhJ2qDWJORERBH4CPBjwDHgbyPirpTSg2txvW6XUqKeYKZep16HWkrU6ol6PTFTT9RT47VWS8zU69Sy7c3XmVo9e53bX82WZ2qJ6Vp9dl+1lqjW6szU6kxny9Mzdaq1erbcKD+dfZCazvY3P1Q111s/jE2v8MNWsRD0lxvdd/orxdnuPkNbehjYWWKgMtf9Z2tvma29jbERW3pLbO0tMZitb+sr01t2gL/WX7EQ2Xu1vObXSqnxez41U6NaS7O/x1Mz9dnf6+lanepMnWo9NV5r2bbsd7+aLTfvIc1tM7WWe0jzHlNLVOuJWnYfqWXlm/ehiWqNmex8s/esenZPqs3dy6q1uXtb8153rm6C3aAZpBYGpAgIGmGqNRS1lo/ZZeaOaVlvnL9x3mDuHK3HBXPr0eY8wfxtAWeVa2ybX55oveZceVq2tV6b1vNmy81zM6/s3HLzunHWtrkA2XYfZ/975p+rsbG1PPPKZduyjDp77Oy1567Bwn1tzkVr2QXlWXAcLXWdKz//3zhXbv61Zusyb715ljblWuvQUoZ5x569b+G/c+4KrcdHm31xVtl2151/rTjr3G3rumChXf1av3RY7JzzztHm/Av/DYudY7F/z2L1P/uci9d14X6tzFq15FwPHEopHQaIiD8BbgQ2dMiZmK7xpg9/FWh8gGhKLQsp29d4hURqvGaF6illP1m5xOx6PfsjX2tZr2Vl1kulWKBcDMqlli4tWZeXuW4wBbb1V6gUs24y5UbXmbOWs+41jZ/WLjiNMs0w018u0VdpdK3xl1hamYigUopcTHax8Iue1i98WpfrLV/u1FsCUnO5nt1vm18S1dP841rvz/PWs/OnlKjVG+dIC87ZelyzXGLuXl9vbsuOSzTPM/fva55n3t+FlvXmcQv/dqQ0V6fGeReWmf9val67nv2hqmd/q+p15p2/tf6p5e9ba3kWbsvqM/d3cO7vYT07ST21+RsJ2d/QlmvCuv79k7pV2/A3u295IW1hobPPM7f8phdexgff9qKVVHVdrVXI2QMcbVk/Brx8ja61agoFeN4lW+c2LJLwz/rWKCsQzHWpmPumbe5brUJLN4rmN3CNLhYxr6tG8xzNba1dOUrFuS4fhVjYZWR+d5FysTDbraTc2gc/61piyJC0EURkXdMKzRZZW2Y3k4Uha2FAgrMD02y5+iLbs/LNLycXO0dz+zmvkSW0tNi5mtdqc6655ZZ/a0s55l2vpU6t52r5R6RlnLtZcOH/X/P4hWVb63L2OVvqsOA8Cx9B0q5su+u2rpPan3t+vRYvQ5v/r3bXmX+u+WXO9W9oe8025dqF9cX+f5Y617nKLty5cN9y63/2NRbsXbB67WXzZzftFmsVctp9cp73XxYRtwC3AFxxxRVrVI3z01Mq8pF3vnS9qyFJ0qbR/FIwW1vPqkjKkbXq53AM2NuyfjnwRGuBlNKtKaUDKaUDQ0NDa1QNSZIkSZvNWoWcvwX2R8RVEVEBbgLuWqNrSZIkSdKsNemullKaiYj/E/ifNDpXfzyl9MBaXEuSJEmSWq3Zc3JSSp8DPrdW55ckSZKkdrp/7lFJkiRJamHIkSRJkpQrhhxJkiRJuWLIkSRJkpQr0e6Jrxe8EhHDwGPrXY8Wu4Dj610JdSXfO+qE7x+tlO8ddcL3j1bqQr93rkwpLesBmxsi5Gw0EXEwpXRgveuh7uN7R53w/aOV8r2jTvj+0Upt5PeO3dUkSZIk5YohR5IkSVKuGHLau3W9K6Cu5XtHnfD9o5XyvaNO+P7RSm3Y945jciRJkiTlii05kiRJknLFkNMiIl4fEQ9HxKGIeO9610cbW0TsjYgvRsRDEfFARLwn274jIj4fEY9krxetd121MUVEMSK+GRF/nq1fFRH3Zu+dP42IynrXURtTRGyPiE9HxHeze9ArvPdoOSLiX2V/s+6PiE9FRK/3Hi0mIj4eEc9ExP0t29rea6Lh97LP0d+OiJeuX80NObMiogh8BHgDcC3w9oi4dn1rpQ1uBvg3KaVrgBuAd2fvmfcCd6eU9gN3Z+tSO+8BHmpZ/y3gd7L3zrPAu9alVuoGHwL+IqX0fOBFNN5H3nt0ThGxB/gXwIGU0nVAEbgJ7z1a3CeA1y/Ytti95g3A/uznFuCjF6iObRly5lwPHEopHU4pTQN/Aty4znXSBpZSejKl9I1seZTGh4w9NN43t2fFbgfesj411EYWEZcDPwV8LFsP4DXAp7MivnfUVkQMAj8K3AaQUppOKZ3Ce4+WpwT0RUQJ6AeexHuPFpFS+jJwcsHmxe41NwKfTA33ANsjYveFqenZDDlz9gBHW9aPZdukJUXEPuAlwL3AJSmlJ6ERhICL169m2sB+F/hloJ6t7wROpZRmsnXvQVrM1cAw8F+y7o4fi4gBvPdoCSml7wP/EXicRrg5DdyH9x6dn8XuNRvqs7QhZ0602ebUc1pSRGwBPgP8y5TSyHrXRxtfRLwReCaldF/r5jZFvQepnRLwUuCjKaWXAGPYNU3LkI2duBG4CrgMGKDRxWgh7z1aiQ31d8yQM+cYsLdl/XLgiXWqi7pERJRpBJw/Til9Ntv8dLN5Nnt9Zr3qpw3rVcCbI+IIja6xr6HRsrM960IC3oO0uGPAsZTSvdn6p2mEHu89WsrrgEdTSsMppSrwWeCVeO/R+VnsXrOhPksbcub8LbA/m2GkQmMg3l3rXCdtYNkYituAh1JK/6ll113AzdnyzcCdF7pu2thSSu9LKV2eUtpH417zlymldwJfBN6aFfO9o7ZSSk8BRyPiedmm1wIP4r1HS3scuCEi+rO/Yc33jvcenY/F7jV3AT+XzbJ2A3C62a1tPfgw0BYR8ZM0vk0tAh9PKX1gnaukDSwifhj4CvAd5sZV/Dsa43LuAK6g8QflbSmlhYP2JAAi4tXAv00pvTEirqbRsrMD+CbwMymlqfWsnzamiHgxjUkrKsBh4BdofHHpvUfnFBG/Dvw0jRlCvwn8ExrjJrz36CwR8Sng1cAu4Gng/cB/o829JgvOH6YxG9s48AsppYPrUW8w5EiSJEnKGburSZIkScoVQ44kSZKkXDHkSJIkScoVQ44kSZKkXDHkSJIkScoVQ44kSZKkXDHkSJIkScoVQ44kSZKkXPn/AShDLjh/2/hpAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4ff5a58d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.cos(omega * n) + np.cos((omega + 0.5*Delta) * n)\n",
"plt.plot(abs(np.fft.fft(x))[:100]);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The two frequencies cannot be resolved by the DFT. If you try to increase the data vector by zero padding, the plot will still display just one peak:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1f4ff9a55c0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xzp = np.concatenate((x, np.zeros(2000)))\n",
"plt.plot(abs(np.fft.fft(xzp))[:500]);"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}