📜  模拟信号和数字信号之间的差异(1)

📅  最后修改于: 2023-12-03 15:26:51.193000             🧑  作者: Mango

模拟信号和数字信号之间的差异

在计算机科学和电子工程中,模拟信号和数字信号是两个基本概念。模拟信号是连续的,而数字信号是离散的。这两种信号有什么区别呢?接下来我们就来一一介绍。

模拟信号

模拟信号是一个连续的信号,可以是电压、电流、电磁波等等。模拟信号通常使用基带信号或载波信号进行传输,也可以是同时在时间轴和幅度轴上随时间变化的信号。例如,人类语音、电视信号、音频等等都是模拟信号。

模拟信号的特点是它们是连续的。这意味着它们会在时间轴和幅度轴上不断变化。因此,我们可以使用连续的函数表示模拟信号。

# 模拟信号示例,使用 sine 函数表示
import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, 10, 0.1)  # 创建时间轴
y = np.sin(t)  # 创建模拟信号 y = sin(t)

plt.plot(t, y)  # 画出图像
plt.xlabel('Time')  # 设置 x 轴标签
plt.ylabel('Amplitude')  # 设置 y 轴标签
plt.title('Analog Signal')  # 设置标题
plt.show()  # 显示图像

图像如下:

模拟信号示例图

数字信号

数字信号是一个离散的信号。它可以是脉冲信号、方波、三角波等等。数字信号通常是通过模拟信号采样获得的。采样是将连续信号转换为离散信号的过程。采样后的数字信号可以编码为二进制数据传输。

数字信号的特点是它们是离散的。这意味着数字信号只在特定的时刻中被记录,并且幅度被固定在一个特定的值上。

# 数字信号示例
import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, 10, 1)  # 创建时间轴
y = np.array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0])  # 创建数字信号

plt.stem(t, y)  # 画出图像
plt.xlabel('Time')  # 设置 x 轴标签
plt.ylabel('Amplitude')  # 设置 y 轴标签
plt.title('Digital Signal')  # 设置标题
plt.show()  # 显示图像

图像如下:

数字信号示例图

模拟信号和数字信号之间的转换

在数字信号处理中,我们通常需要将模拟信号转换为数字信号,或者将数字信号转换为模拟信号。这些转换是由 ADC(模拟到数字转换器)和 DAC(数字到模拟转换器)实现的。

  • ADC:将模拟信号转换为数字信号。它采样模拟信号,并将每个样本转换为数字值。ADCs用于数字信号处理、无线通信和自动化控制系统等方面。
  • DAC:将数字信号转换为模拟信号。它将数字值转换为一个连续的模拟输出。DAC在音频处理、立体声系统、视频信号处理等方面都有应用。
# 模拟信号到数字信号转换示例
import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, 5, 0.01)  # 创建时间轴
y = np.sin(2*np.pi*t)  # 创建模拟信号 y = sin(2πt)

plt.plot(t, y)  # 画出模拟信号图像
plt.xlabel('Time')  # 设置 x 轴标签
plt.ylabel('Amplitude')  # 设置 y 轴标签
plt.title('Analog Signal')  # 设置标题

# 采样
Fs = 20  # 采样频率
Ts = 1/Fs  # 采样周期
n = np.arange(0, 5, Ts)
y_sampled = np.sin(2*np.pi*n)  # 采样

plt.stem(n, y_sampled)  # 画出数字信号图像
plt.show()  # 显示图像

图像如下:

模拟信号到数字信号转换示例图

如果我们想将数字信号转换为模拟信号,可以使用以下代码:

# 数字信号到模拟信号转换示例
import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, 5, 0.01)  # 创建时间轴
y = np.sin(2*np.pi*t)  # 创建模拟信号 y = sin(2πt)

plt.plot(t, y)  # 画出模拟信号图像
plt.xlabel('Time')  # 设置 x 轴标签
plt.ylabel('Amplitude')  # 设置 y 轴标签
plt.title('Analog Signal')  # 设置标题

# 数字信号数据
n = np.arange(0, 5, 1)
y_digital = np.array([1, 0, 1, 0, 1])

# 数字到模拟转换
y_reconstructed = np.zeros(len(t))
for i, ti in enumerate(t):
    y_reconstructed[i] = y_digital[np.where(n<=ti)[0][-1]]  # 获得最近的数字值

plt.plot(t, y_reconstructed)  # 画出重构后的数字信号图像
plt.show()  # 显示图像

图像如下:

数字信号到模拟信号转换示例图

总结
  • 模拟信号是连续的。它们会在时间轴和幅度轴上不断变化。因此,我们可以使用连续的函数表示模拟信号。
  • 数字信号是离散的。这意味着数字信号只在特定的时刻中被记录,并且幅度被固定在一个特定的值上。
  • 模拟信号可以通过采样转换为数字信号,数字信号也可以通过 DAC 转换为模拟信号。
  • 模拟信号和数字信号是数字信号处理中最基本的概念,也是实际工程中最常见的数字信号类型之一。