数字信号的传输 前面的讨论断言,数字信号(周期性或非周期性)是由零到无穷大范围内的频率组合成的复合模拟信号。对于下面的讨论,我们假定是非周期数字信号的情况,类似于在数据通信中常见的信号。基本问题是「我们如何从 A 点发送数字信号到 B 点」?我们使用两种不同的方法传输数字信号:基带传输和宽带传输(使用调制)。
- 基带传输 基带传输就是通过通道发送数字信号,该信号不转换成模拟信号。图3.18表示了基带 baseband 传输。
基带传输需要一个带宽下限频率为 0 的低通通道 low-pass channel ,即带宽从 0 开始的通道。如果我们的带宽只组成一条通道的专用介质(即专用通道),就是这种情况。例如,连接两台计算机的电缆的整个带宽就是一条单通道。另一个例子,我们可以连接多台计算机到一条总线上,但不允许同一时刻超过两个站进行通信。我们有低通通道,就可以用它来进行基带传输。图3.19显示了两条低通通道:一条是窄带宽的,另一条是宽带宽的。要记住无穷大带宽的低通通道只是理想情况,我们不可能在现实中有这样的通道,但是我们可以接近。
请你举一个简单的代码示例。
下面是一个简单的Python代码示例,用于模拟基带传输的数字信号通过低通通道的传输:
import numpy as np
import matplotlib.pyplot as plt
import scipy
# 生成发送端的数字信号
def generate_signal(duration, sampling_rate):
t = np.linspace(0, duration, int(duration * sampling_rate), endpoint=False)
signal = np.sin(2 * np.pi * t) # 此处生成一个简单的正弦信号作为示例
return t, signal
# 低通滤波器
def lowpass_filter(signal, cutoff_freq, sampling_rate):
normalized_cutoff = cutoff_freq / (0.5 * sampling_rate)
b, a = scipy.signal.butter(4, normalized_cutoff, btype='low')
filtered_signal = scipy.signal.lfilter(b, a, signal)
return filtered_signal
# 传输信号
def transmit(signal, channel):
transmitted_signal = channel(signal) # 假设信号在传输过程中不发生变化
return transmitted_signal
# 接收信号
def receive(signal, channel):
received_signal = channel(signal) # 假设信号在传输过程中不发生变化
return received_signal
# 绘制原始信号和传输后的信号
def plot_signal(t, signal, transmitted_signal):
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(t, signal)
plt.title('Original Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.subplot(2, 1, 2)
plt.plot(t, transmitted_signal)
plt.title('Transmitted Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.tight_layout()
plt.show()
# 主函数
def main():
duration = 1.0 # 信号持续时间
sampling_rate = 1000 # 采样率
cutoff_freq = 100 # 低通滤波器的截止频率
# 生成发送端的数字信号
t, signal = generate_signal(duration, sampling_rate)
# 定义低通通道
lowpass_channel = lambda x: lowpass_filter(x, cutoff_freq, sampling_rate)
# 传输信号
transmitted_signal = transmit(signal, lowpass_channel)
# 接收信号
received_signal = receive(transmitted_signal, lowpass_channel)
# 绘制原始信号和传输后的信号
plot_signal(t, signal, transmitted_signal)
if __name__ == "__main__":
main()
在上述代码中,我们首先生成了一个简单的正弦信号作为发送端的数字信号。然后,我们定义了一个低通通道,使用巴特沃斯低通滤波器对信号进行滤波。在传输过程中,我们假设信号不发生变化,并通过调用
transmit
函数进行传输。接收端依然使用相同的通道进行接收,并通过调用
receive
函数获取接收到的信号。最后,我们调用
plot_signal
函数绘制原始信号和传输后的信号。
需要注意的是,上述代码只是基于理想情况简化了基带传输过程,实际的基带传输中可能还涉及到调制、编码等处理。此处的代码示例仅用于演示基带传输的基本原理,实际应用中需要根据具体场景进行适当的修改和扩展。