计算机网络(第十一题)

142 阅读5分钟

复合信号 目前为止,讨论的都是简单正弦波,单个正弦波在日常生活中有很多应用。但单一频率的正弦波在数据通信中没有用处,因为它不会携带任何信息,我们需要发送复合信号来进行数据通信。复合信号 composite signal 由许多简单正弦波组成。

20世纪早期,[法]数学家 Jean-Baptiste Fourier 证明了任何复合信号都是由具有不同频率、相位和振幅的正弦波信号组合而成的,即傅里叶分析 Fourier analysis 。

复合信号可以是周期性的也可以是非周期性的。如果复合后的信号是周期性的,分解得到的是一系列具有离散频率(频率取整数1、2、3等)的简单正弦波信号的组合。如果复合后的信号是非周期性的,分解得到的是具有连续频率(取实数的频率)的无穷个简单正弦波信号的组合。

【例3.8】图 3.9显示了频率为 f ff 的周期复合信号。这种信号不是数据通信中的典型信号。我们可以把它看成三个告警系统,每一个有不同的频率。这个信号的分析可以让我们理解如何分解信号。 用人工把这个周期复合信号分解成一系列简单正弦波是困难的,但有软硬件工具帮助我们做到,我们只对结果感兴趣。图3.10显示了上面信号的时域和频域中的分解结果。

频率为 f 的正弦波,其振幅几乎和复合信号的峰值振幅一样,其频率和复合信号的频率一样,称之为基础频率 fundamental frequency 或者第一谐波 harmonic ;频率为 3 f的正弦波,其振幅是第一个的三分之一,其频率为基础频率的 3倍,称为第三谐波;频率为 9 f的正弦波,其振幅是第一个的九分之一,其频率为基础频率的 9倍,称为第九谐波。

注意,分解后信号的频率是离散的,频率为 f , 3 f , 9 f 。因为 f 是整数,所以3f, 9f 也是整数,没有诸如 1.2 f 或 2.6 f的频率。周期复合信号的频域总是由离散尖峰组成。

【例3.9】图3.11表示了一个非周期复合信号。它可以在一个或两个词发音时由麦克风或电话机产生。这种情况下,复合信号不可能是周期的,因为我们不可能以完全相同的音调重复相同的词或语句。

我们将其分解为无数个简单正弦波的组合。在这个非周期复合信号的时域表示内,有无数个简单正弦频率。人类语音中的频率数量是无限的,但是范围是有限制的,普通人会产生0Hz∼4kHz 之间的频率。

注意:这个非周期复合信号的频率分解后,频域表示中得到的是一条连续曲线。在实数区间 [ 0.0 , 4000.0 ]内有无数个实数值频率。为了找到频率为 f的振幅,可在 f处画一条垂直线与曲线相交,垂直线的高度就是相应频率的振幅。

复合信号是由多个简单正弦波信号组合而成的信号。法国数学家傅里叶在20世纪早期提出了傅里叶分析的理论,证明了任何复合信号都可以分解为具有不同频率、相位和振幅的正弦波信号的组合。

复合信号可以是周期性的或非周期性的。如果复合信号是周期性的,那么它可以被分解为一系列具有离散频率(整数倍频率)的简单正弦波信号的组合。而如果复合信号是非周期性的,那么它可以被分解为具有连续频率(实数频率)的无穷个简单正弦波信号的组合。

在频域中观察复合信号时,频率为f的正弦波被称为基础频率或第一谐波,其振幅几乎与复合信号的峰值振幅相同。频率为3f的正弦波被称为第三谐波,其振幅是基础频率的三分之一,频率为9f的正弦波被称为第九谐波,其振幅是基础频率的九分之一。这表明分解后的信号频率是离散的,只包含f、3f、9f等整数倍频率。

然而,非周期复合信号的频域表示是连续的,其中包含无数个实数值频率。正如例3.9中描述的,人类语音中的频率数量是无限的,但范围是有限的,通常在0Hz到4kHz之间。对于非周期复合信号,在频域中的表示是连续曲线,可以通过在特定频率处绘制垂直线与曲线相交来确定该频率的振幅。

请你举一个简单的代码示例。

以下是一个使用Python的示例代码,用于生成一个复合信号,并进行傅里叶变换以将其转换为频域表示:

import numpy as np
import matplotlib.pyplot as plt

# 生成时间序列
fs = 1000  # 采样率
t = np.arange(0, 1, 1/fs)  # 时间从0到1秒
f1 = 10  # 第一个正弦波的频率
f2 = 20  # 第二个正弦波的频率

# 生成复合信号
x = np.sin(2*np.pi*f1*t) + 0.5*np.sin(2*np.pi*f2*t)

# 进行傅里叶变换
freq = np.fft.fftfreq(len(x), 1/fs)  # 计算频率
X = np.fft.fft(x)  # 计算傅里叶变换

# 绘制时域信号
plt.subplot(2, 1, 1)
plt.plot(t, x)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Time Domain')

# 绘制频域信号
plt.subplot(2, 1, 2)
plt.plot(freq, np.abs(X))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.title('Frequency Domain')

plt.tight_layout()
plt.show()

这段代码首先使用numpy库生成了一个包含两个正弦波信号的复合信号。然后,通过np.fft.fftfreq函数计算频率,再使用np.fft.fft函数进行傅里叶变换,将复合信号转换为频域表示。最后,使用matplotlib.pyplot库将时域信号和频域信号绘制出来,分别显示在两个子图中。

执行代码后,你将看到时域信号的图形显示了复合信号在时间上的变化,而频域信号的图形显示了复合信号在频率上的成分。