
1
12. 基于 SystemVue 的多址接入技术仿真
12.1 SystemVue 简介
SystemVue 是一种由 Keysight Technologies 开发的高性能电子系统级(ESL)仿真
软件,广泛应用于通信系统的设计和仿真。它支持从系统级到基带和射频级的
全面仿真,能够帮助工程师在设计阶段验证各种通信系统的性能。SystemVue
提供了丰富的库和工具,支持多种通信标准和自定义协议,特别适合多址接入
技术的仿真。
12.1.1 SystemVue 的主要功能
� 系统级仿真:支持多种通信系统的建模和仿真,包括无线通信、有线通
信、雷达系统等。
� 基带和射频仿真:提供从基带到射频的完整链路仿真,支持多种调制解
调技术、信道模型和干扰模型。
� 多址接入技术仿真:支持多种多址接入技术的仿真,如 FDMA、TDMA、
CDMA、OFDMA 等。
� 自定义设计:用户可以自定义系统组件和参数,实现特定应用的仿真需
求。
� 高性能计算:利用多核处理器和分布式计算,提高仿真效率和速度。
12.1.2 SystemVue 的应用场景
� 无线通信系统设计:用于设计和验证各种无线通信系统,如 5G、Wi-Fi、
LTE 等。
� 雷达系统仿真:用于雷达系统的建模和性能分析。
� 卫星通信系统:用于卫星通信系统的链路预算和性能评估。
� 物联网通信:用于物联网通信系统的仿真和优化。

2
12.2 FDMA 多址接入技术仿真
12.2.1 FDMA 原理
频率分多址(Frequency Division Multiple Access, FDMA)是一种多址接入技术,
通过将可用频带划分为多个子频段,每个用户使用一个独立的子频段进行通信。
FDMA 的主要优点是实现简单、频谱利用率高,但缺点是频带划分固定,灵活
性较差。
12.2.2 FDMA 仿真步骤
1. 定义系统参数:包括频带宽度、子频段数量、中心频率等。
2. 创建基带信号:生成多个用户的基带信号。
3. 调制和上变频:将基带信号调制到不同的子频段。
4. 信道仿真:模拟信道传输特性,如衰落、噪声等。
5. 接收和解调:接收信号并解调回基带信号。
6. 性能评估:分析系统的误码率(BER)、信号干扰比(SIR)等性能指标。
12.2.3 FDMA 仿真实例
12.2.3.1 仿真环境设置
首先,确保已经安装并配置好 SystemVue 软件。打开 SystemVue,创建一个新
的项目。
## 项目设置
1. 打开 SystemVue 软件。
2. 选择 `File` -> `New` 创建一个新的项目。
3. 保存项目,命名为 `FDMA_Simulation`。
12.2.3.2 定义系统参数
在 SystemVue 中,可以使用参数表来定义系统的各种参数。
## 系统参数定义
1. 在项目中创建一个 `Parameter Table`。
2. 定义以下参数:

3
- `Total_Bandwidth`:总频带宽度(例如 10 MHz)。
- `Num_Subbands`:子频段数量(例如 4)。
- `Center_Frequency`:中心频率(例如 2.4 GHz)。
- `Sampling_Rate`:采样率(例如 20 MHz)。
- `User_Data_Rate`:每个用户的传输速率(例如 1 Mbps)。
12.2.3.3 创建基带信号
生成多个用户的基带信号,可以使用 SystemVue 中的 Random Data Generator 和
Modulator。
## 基带信号生成
1. 创建 4 个 `Random Data Generator`,每个生成一个用户的随机数据流。
2. 创建 4 个 `Modulator`,选择 `QPSK` 调制方式,将随机数据调制为基带信号。
3. 连接 `Random Data Generator` 和 `Modulator`。
12.2.3.4 调制和上变频
将基带信号调制到不同的子频段。
## 调制和上变频
1. 创建 4 个 `Numerically Controlled Oscillator (NCO)`,用于生成不同子频段的载波。
2. 定义每个 NCO 的频率偏移,使每个载波位于不同的子频段。
3. 创建 4 个 `Multiplier`,分别将基带信号乘以相应的载波信号,实现上变频。
4. 连接 `Modulator` 和 `Multiplier`。
12.2.3.5 信道仿真
模拟信道传输特性。
## 信道仿真
1. 创建一个 `Channel Model`,选择 `AWGN` 信道模型。
2. 定义信道的噪声功率和衰落特性。
3. 创建一个 `Adder`,将 4 个上变频后的信号相加,形成多用户信号。
4. 将多用户信号通过 `Channel Model` 传输。
12.2.3.6 接收和解调
接收信号并解调回基带信号。
## 接收和解调
1. 创建 4 个 `Down Converter`,用于将接收到的信号下变频到基带。
2. 定义每个 `Down Converter` 的频率偏移,使其与相应的子频段匹配。

4
3. 创建 4 个 `Demodulator`,选择 `QPSK` 解调方式,解调基带信号。
4. 连接 `Down Converter` 和 `Demodulator`。
12.2.3.7 性能评估
分析系统的误码率(BER)和信号干扰比(SIR)。
## 性能评估
1. 创建 4 个 `Bit Error Rate (BER) Analyzer`,用于分析每个用户的误码率。
2. 创建一个 `Signal-to-Interference Ratio (SIR) Analyzer`,用于分析信号干扰比。
3. 连接 `Demodulator` 和 `BER Analyzer`。
4. 连接 `Adder` 和 `SIR Analyzer`。
5. 运行仿真,查看 BER 和 SIR 的结果。
12.2.4 代码示例
以下是一个简单的 FDMA 仿真代码示例,使用 Python 和 NumPy 进行基带信号
生成和调制。
import numpy as np
import matplotlib.pyplot as plt
#
系统参数
total_bandwidth = 10e6 #
总频带宽度(
10 MHz
)
num_subbands = 4 #
子频段数量
center_frequency = 2.4e9 #
中心频率(
2.4 GHz
)
sampling_rate = 20e6 #
采样率(
20 MHz
)
user_data_rate = 1e6 #
每个用户的传输速率(
1 Mbps
)
#
生成随机数据
def generate_random_data(num_users, data_length):
return [np.random.randint(2, size=data_length) for _ in range(num_users)]
# QPSK
调制
def qpsk_modulate(data):
#
将二进制数据转换为
QPSK
符号
symbols = data.reshape(-1, 2)
modulated = np.array([1j**sum(s) for s in symbols])
return modulated
#
上变频
def up_convert(signal, carrier_frequency, sampling_rate, t):
carrier = np.exp(1j * 2 * np.pi * carrier_frequency * t)
return signal * carrier

5
#
信道模型(
AWGN
)
def awgn_channel(signal, snr):
noise_power = np.var(signal) / 10**(snr / 10)
noise = np.sqrt(noise_power) * (np.random.randn(len(signal)) + 1j * np.random.randn(len(sign
al)))
return signal + noise
#
下变频
def down_convert(signal, carrier_frequency, sampling_rate, t):
carrier = np.exp(-1j * 2 * np.pi * carrier_frequency * t)
return signal * carrier
# BER
分析
def ber_analysis(original_data, received_data):
errors = np.sum(np.abs(original_data - received_data) > 0)
return errors / len(original_data)
#
参数设置
data_length = 10000
snr = 10 #
信噪比(
dB
)
t = np.arange(0, data_length / sampling_rate, 1 / sampling_rate)
#
生成随机数据
random_data = generate_random_data(num_subbands, data_length)
# QPSK
调制
modulated_signals = [qpsk_modulate(data) for data in random_data]
#
上变频
carrier_frequencies = [center_frequency + (i - num_subbands / 2) * total_bandwidth / num_subb
ands for i in range(num_subbands)]
upconverted_signals = [up_convert(signal, freq, sampling_rate, t) for signal, freq in zip(modulate
d_signals, carrier_frequencies)]
#
信道传输
transmitted_signal = np.sum(upconverted_signals, axis=0)
received_signal = awgn_channel(transmitted_signal, snr)
#
下变频
downconverted_signals = [down_convert(received_signal, freq, sampling_rate, t) for freq in carri
er_frequencies]
#
解调