Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e6efa8e

Browse filesBrowse files
authored
Merge pull request #6843 from afvincent/fix_psd_demo_complex
DOC: Fix `psd_demo_complex` similarly to `psd_demo3`
2 parents d308eec + f0d4080 commit e6efa8e
Copy full SHA for e6efa8e

File tree

Expand file treeCollapse file tree

1 file changed

+31
-23
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+31
-23
lines changed
+31-23Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,46 @@
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+
510
import numpy as np
611
import matplotlib.pyplot as plt
712
import matplotlib.mlab as mlab
813

14+
prng = np.random.RandomState(123456) # to ensure reproducibility
15+
916
fs = 1000
1017
t = np.linspace(0, 0.3, 301)
1118
A = np.array([2, 8]).reshape(-1, 1)
1219
f = np.array([150, 140]).reshape(-1, 1)
13-
xn = (A * np.exp(2j * np.pi * f * t)).sum(axis=0) + 5 * np.random.randn(*t.shape)
20+
xn = (A * np.exp(2j * np.pi * f * t)).sum(axis=0) + 5 * prng.randn(*t.shape)
21+
22+
fig, (ax0, ax1) = plt.subplots(ncols=2)
1423

24+
fig.subplots_adjust(hspace=0.45, wspace=0.3)
1525
yticks = np.arange(-50, 30, 10)
16-
xticks = np.arange(-500, 550, 100)
17-
plt.subplots_adjust(hspace=0.45, wspace=0.3)
18-
ax = plt.subplot(1, 2, 1)
26+
yrange = (yticks[0], yticks[-1])
27+
xticks = np.arange(-500, 550, 200)
1928

20-
plt.psd(xn, NFFT=301, Fs=fs, window=mlab.window_none, pad_to=1024,
29+
ax0.psd(xn, NFFT=301, Fs=fs, window=mlab.window_none, pad_to=1024,
2130
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,
31+
ax0.set_title('Periodogram')
32+
ax0.set_yticks(yticks)
33+
ax0.set_xticks(xticks)
34+
ax0.grid(True)
35+
ax0.set_ylim(yrange)
36+
37+
ax1.psd(xn, NFFT=150, Fs=fs, window=mlab.window_none, pad_to=512, noverlap=75,
3038
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)
39+
ax1.set_title('Welch')
40+
ax1.set_xticks(xticks)
41+
ax1.set_yticks(yticks)
42+
ax1.set_ylabel('') # overwrite the y-label added by `psd`
43+
ax1.grid(True)
44+
ax1.set_ylim(yrange)
3745

3846
plt.show()

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.