计算机网络(第十七题)

66 阅读3分钟

数字信号的传输 前面的讨论断言,数字信号(周期性或非周期性)是由零到无穷大范围内的频率组合成的复合模拟信号。对于下面的讨论,我们假定是非周期数字信号的情况,类似于在数据通信中常见的信号。基本问题是「我们如何从 A 点发送数字信号到 B 点」?我们使用两种不同的方法传输数字信号:基带传输和宽带传输(使用调制)。

  1. 基带传输 基带传输就是通过通道发送数字信号,该信号不转换成模拟信号。图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 函数绘制原始信号和传输后的信号。

需要注意的是,上述代码只是基于理想情况简化了基带传输过程,实际的基带传输中可能还涉及到调制、编码等处理。此处的代码示例仅用于演示基带传输的基本原理,实际应用中需要根据具体场景进行适当的修改和扩展。