Logo
Section 1 / 8

如何生成一个基本的正弦波

了解如何构造一个简单的正弦波。

导入

如何生成一个基本的正弦波

了解如何构造一个简单的正弦波。

掌握数字信号处理(DSP)工具箱的第一步是从一个基本的正弦信号开始。

正弦波

作为时间 tt 的函数,一个实数正弦波表示为:

x(t)=Acos⁡(2πft+ϕ)x(t) = A \cos(2\pi f t+\phi)

该信号由三个参数决定:

  • 幅度 AA
  • 频率 ff(单位:每秒周期数),或角频率 ω=2πf\omega = 2\pi f(单位:弧度/秒),对应的时间周期为 T=1fT = \frac{1}{f} 或 2πω\frac{2\pi}{\omega}
  • 相位 ϕ\phi

通常使用余弦波是出于惯例,因为正弦波本质上也是余弦波的一种特殊相位形式。

sin⁡2πft=cos⁡(2πft−90∘)\sin 2\pi f t = \cos \left(2\pi f t - 90^\circ\right)

下面展示了一个基础正弦波,其参数为 A=1A=1、f=1f=1、ϕ=0\phi=0:

...
一个余弦信号

示例

让我们学习如何生成基本信号。

1import numpy as np 2import matplotlib.pyplot as pl 3 4figWidth = 20 5figHeight = 10 6 7# 生成一个余弦信号 8 9fs = 1000 # 采样率 10Ts = 1/fs # 采样间隔 11 12f = 10 13T = 1/f 14A = 1 15phi = 0 16 17nCycles = 2 # 修改此值可改变周期数量 18 19t = np.arange(0, nCycles*T, Ts) 20 21s = A*np.cos(2*np.pi*f*t + phi) 22 23 24# 绘制信号 25 26fig, ax = pl.subplots(1, figsize=(figWidth, figHeight)) 27 28ax.plot(t, s, linewidth=2, color='r') 29 30ax.set_xlim(0, nCycles*T) 31ax.set_xticks(np.linspace(0, nCycles*T, 5)) 32ax.set_ylim(-A, A) 33ax.set_yticks(np.linspace(-A, A, 5)) 34ax.tick_params(labelsize=18) 35 36# 隐藏右侧和上侧坐标轴线 37ax.spines['right'].set_visible(False) 38ax.spines['top'].set_visible(False) 39 40ax.set_title("一个连续时间正弦波", fontsize=18) 41ax.set_xlabel("t", fontsize=18) 42ax.set_ylabel("$x(t)$", fontsize=18) 43ax.grid() 44 45# 保存图像 46pl.savefig('output/cosine.png')

运行上述代码后,可以看到一个余弦波,其幅度、周期和相位由代码中高亮的部分定义。尝试修改几个参数,观察图形的变化。

幅度和频率(或周期)对波形的影响直观且明显。然而,相位——它与信号的时间偏移相关——是这里最难以理解的概念。

信号简介

单位冲激信号