📅  最后修改于: 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(数字到模拟转换器)实现的。
# 模拟信号到数字信号转换示例
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() # 显示图像
图像如下: