文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第30单元 生成合成正弦波
现在我们来做一些数据科学家通常不会做的事情,打动那些不使用numpy的朋友:生成一个合成正弦波,我们可能已经在廉价的、不完美的,以及嘈杂的仪器中收到过小量的这种周期信号。这样的信号具体是从何处获得的以及仪器的性质并不重要。产生这类信号的仪器也许是一个插在电源插座上的电压表,或者是一个在周日晚放在草坪上而直到周五才收回的户外数字温度计,甚至可能是一个股票市场价格报价器。(顺便说一句,合成周期信号不仅可用于给朋友留下印象,还可用于测试新的数字信号处理算法。)
生成信号的代码如下,其中高亮显示的部分就是使用numpy的代码。这部分代码见证了矢量化的魔法:创建一个连续整数数组,将它们转换为浮点数,调整为正确的周期,取正弦,放大,置换,添加高斯噪声(参见第45单元),并模拟仪器测量得到的信号截断效果。
numpy_sinewave.py # 导入所有优质的模块 import numpy as np import matplotlib.pyplot as plt import matplotlib # 定义了信号、噪声和“仪器”属性的常量 SIG_AMPLITUDE = 10; SIG_OFFSET = 2; SIG_PERIOD = 100 NOISE_AMPLITUDE = 3 N_SAMPLES = 5 * SIG_PERIOD INSTRUMENT_RANGE = 9 ➤ # 创建一个正弦波,并加入随机噪声 ➤ times = np.arange(N_SAMPLES).astype(float) ➤ signal = SIG_AMPLITUDE * np.sin(2 * np.pi * times / SIG_PERIOD) + SIG_OFFSET ➤ noise = NOISE_AMPLITUDE * np.random.normal(size=N_SAMPLES) ➤ signal += noise ➤ ➤ # 将仪器测量范围之外的峰值截断 ➤ signal[signal > INSTRUMENT_RANGE] = INSTRUMENT_RANGE ➤ signal[signal < -INSTRUMENT_RANGE] = -INSTRUMENT_RANGE # 绘制结果 matplotlib.style.use("ggplot") plt.plot(times, signal) plt.title("Synthetic sine wave signal") plt.xlabel("Time") plt.ylabel("Signal + noise") plt.ylim(ymin = -SIG_AMPLITUDE, ymax = SIG_AMPLITUDE) # 保存图片 plt.savefig("../images/signal.pdf")
其他未高亮显示的代码使用Matplotlib实现噪声信号的可视化。
Matplotlib作为numpy的姐妹包,是第8章“绘图”的重点内容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论