|
1 |
| -# This is a ported version of a MATLAB example from the signal processing |
2 |
| -# toolbox that showed some difference at one time between Matplotlib's and |
3 |
| -# MATLAB's scaling of the PSD. This differs from psd_demo3.py in that |
4 |
| -# this uses a complex signal, so we can see that complex PSD's work properly |
| 1 | +"""This is a ported version of a MATLAB example from the signal |
| 2 | +processing toolbox that showed some difference at one time between |
| 3 | +Matplotlib's and MATLAB's scaling of the PSD. |
| 4 | +
|
| 5 | +This differs from psd_demo3.py in that this uses a complex signal, |
| 6 | +so we can see that complex PSD's work properly |
| 7 | +
|
| 8 | +""" |
| 9 | + |
5 | 10 | import numpy as np
|
6 | 11 | import matplotlib.pyplot as plt
|
7 | 12 | import matplotlib.mlab as mlab
|
|
12 | 17 | f = np.array([150, 140]).reshape(-1, 1)
|
13 | 18 | xn = (A * np.exp(2j * np.pi * f * t)).sum(axis=0) + 5 * np.random.randn(*t.shape)
|
14 | 19 |
|
| 20 | +fig, (ax0, ax1) = plt.subplots(ncols=2) |
| 21 | + |
| 22 | +fig.subplots_adjust(hspace=0.45, wspace=0.3) |
15 | 23 | yticks = np.arange(-50, 30, 10)
|
| 24 | +yrange = (yticks[0], yticks[-1]) |
16 | 25 | xticks = np.arange(-500, 550, 100)
|
17 |
| -plt.subplots_adjust(hspace=0.45, wspace=0.3) |
18 |
| -ax = plt.subplot(1, 2, 1) |
19 | 26 |
|
20 |
| -plt.psd(xn, NFFT=301, Fs=fs, window=mlab.window_none, pad_to=1024, |
| 27 | +ax0.psd(xn, NFFT=301, Fs=fs, window=mlab.window_none, pad_to=1024, |
21 | 28 | scale_by_freq=True)
|
22 |
| -plt.title('Periodogram') |
23 |
| -plt.yticks(yticks) |
24 |
| -plt.xticks(xticks) |
25 |
| -plt.grid(True) |
26 |
| -plt.xlim(-500, 500) |
27 |
| - |
28 |
| -plt.subplot(1, 2, 2, sharex=ax, sharey=ax) |
29 |
| -plt.psd(xn, NFFT=150, Fs=fs, window=mlab.window_none, noverlap=75, pad_to=512, |
| 29 | +ax0.set_title('Periodogram') |
| 30 | +ax0.set_yticks(yticks) |
| 31 | +ax0.set_xticks(xticks) |
| 32 | +ax0.grid(True) |
| 33 | +ax0.set_ylim(yrange) |
| 34 | + |
| 35 | +ax1.psd(xn, NFFT=150, Fs=fs, window=mlab.window_none, pad_to=512, noverlap=75, |
30 | 36 | scale_by_freq=True)
|
31 |
| -plt.title('Welch') |
32 |
| -plt.xticks(xticks) |
33 |
| -plt.yticks(yticks) |
34 |
| -plt.ylabel('') |
35 |
| -plt.grid(True) |
36 |
| -plt.xlim(-500, 500) |
| 37 | +ax1.set_title('Welch') |
| 38 | +ax1.set_xticks(xticks) |
| 39 | +ax1.set_yticks(yticks) |
| 40 | +ax1.set_ylabel('') # overwrite the y-label added by `psd` |
| 41 | +ax1.grid(True) |
| 42 | +ax1.set_ylim(yrange) |
37 | 43 |
|
38 | 44 | plt.show()
|
0 commit comments