news 2026/3/25 10:53:28

通信系统仿真:无线通信系统仿真_(2).通信系统基本原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
通信系统仿真:无线通信系统仿真_(2).通信系统基本原理

通信系统基本原理

引言

通信系统的基本原理是理解无线通信系统仿真的基础。在本节中,我们将探讨通信系统的各个组成部分及其工作原理。通过了解这些基本原理,读者将能够更好地理解后续章节中的仿真技术和方法。本节将覆盖以下内容:

  1. 通信系统的模型
  2. 信道特性
  3. 调制与解调
  4. 编码与解码
  5. 信噪比与误码率
  6. 多址接入技术
  7. 多天线技术

1. 通信系统的模型

通信系统可以分为多个基本组成部分,包括信源、发送器、信道、接收器和信宿。每个部分都有其特定的功能,共同完成信息的传输和接收。

1.1 信源

信源是信息的产生地,可以是任何生成信号的设备或系统。例如,声音信号、图像信号或数据信号。

例子:语音信号的生成

假设我们有一个简单的语音信号生成器,使用Python的numpy库来生成一个正弦波信号,表示基本的语音信号。

importnumpyasnpimportmatplotlib.pyplotasplt# 信源参数fs=44100# 采样频率 (Hz)f0=440# 基频 (Hz)duration=1# 持续时间 (秒)# 生成时间轴t=np.linspace(0,duration,int(fs*duration),endpoint=False)# 生成正弦波信号voice_signal=np.sin(2*np.pi*f0*t)# 绘制信号plt.plot(t,voice_signal)plt.title('生成的语音信号')plt.xlabel('时间 (秒)')plt.ylabel('幅度')plt.show()

1.2 发送器

发送器负责将信源产生的信号转换成适合在信道中传输的形式。这个过程通常包括调制和编码。

例子:数字信号的调制

假设我们有一个简单的数字信号,使用BPSK(二进制相移键控)调制方法将其转换为适合传输的信号。

importnumpyasnpimportmatplotlib.pyplotasplt# 数字信号bits=np.random.randint(2,size=100)# 生成100个随机比特# 调制参数fs=1000# 采样频率 (Hz)f0=100# 载波频率 (Hz)t=np.linspace(0,1,fs,endpoint=False)# 生成时间轴# BPSK调制bpsk_signal=np.zeros_like(t)fori,bitinenumerate(bits):ifbit==0:bpsk_signal[i*fs//100:(i+1)*fs//100]=np.cos(2*np.pi*f0*t[i*fs//100:(i+1)*fs//100])else:bpsk_signal[i*fs//100:(i+1)*fs//100]=-np.cos(2*np.pi*f0*t[i*fs//100:(i+1)*fs//100])# 绘制调制后的信号plt.plot(t,bpsk_signal)plt.title('BPSK调制后的信号')plt.xlabel('时间 (秒)')plt.ylabel('幅度')plt.show()

1.3 信道

信道是信号传输的媒介,可以是无线信道、有线信道或光纤信道。信道特性对信号传输质量有重要影响。

例子:无线信道的衰落

无线信道中的信号可能会受到多径效应的影响,导致信号衰落。假设我们模拟一个简单的瑞利衰落信道。

importnumpyasnpimportmatplotlib.pyplotasplt# 信道参数num_samples=1000# 信号样本数mean=0# 均值std_dev=1# 标准差# 生成瑞利衰落信道channel_response=np.sqrt(np.random.normal(mean,std_dev,num_samples)**2+np.random.normal(mean,std_dev,num_samples)**2)# 绘制信道响应plt.plot(channel_response)plt.title('瑞利衰落信道响应')plt.xlabel('样本数')plt.ylabel('衰落系数')plt.show()

1.4 接收器

接收器负责从信道中提取信号,并将其还原为原始信息。这通常包括解调和解码。

例子:BPSK信号的解调

假设我们有一个经过瑞利衰落信道传输的BPSK信号,我们将在接收端对其进行解调。

importnumpyasnpimportmatplotlib.pyplotasplt# 生成BPSK信号bits=np.random.randint(2,size=100)# 生成100个随机比特fs=1000# 采样频率 (Hz)f0=100# 载波频率 (Hz)t=np.linspace(0,1,fs,endpoint=False)# 生成时间轴bpsk_signal=np.zeros_like(t)fori,bitinenumerate(bits):ifbit==0:bpsk_signal[i*fs//100:(i+1)*fs//100]=np.cos(2*np.pi*f0*t[i*fs//100:(i+1)*fs//100])else:bpsk_signal[i*fs//100:(i+1)*fs//100]=-np.cos(2*np.pi*f0*t[i*fs//100:(i+1)*fs//100])# 信道衰落mean=0std_dev=1channel_response=np.sqrt(np.random.normal(mean,std_dev,fs)**2+np.random.normal(mean,std_dev,fs)**2)received_signal=bpsk_signal*channel_response# 解调demodulated_bits=np.zeros_like(bits)foriinrange(100):sample=received_signal[i*fs//100:(i+1)*fs//100]ifnp.mean(sample)>0:demodulated_bits[i]=0else:demodulated_bits[i]=1# 绘制解调后的比特plt.plot(demodulated_bits,'o')plt.title('解调后的比特')plt.xlabel('比特数')plt.ylabel('解调结果')plt.show()

1.5 信噪比与误码率

信噪比(SNR)是信号强度与噪声强度的比值,误码率(BER)是传输过程中错误比特的比例。这两个参数是评估通信系统性能的重要指标。

例子:计算BPSK信号的误码率

假设我们在传输过程中引入高斯白噪声,计算解调后的误码率。

importnumpyasnpimportmatplotlib.pyplotasplt# 生成BPSK信号bits=np.random.randint(2,size=100)# 生成100个随机比特fs=1000# 采样频率 (Hz)f0=100# 载波频率 (Hz)t=np.linspace(0,1,fs,endpoint=False)# 生成时间轴bpsk_signal=np.zeros_like(t)fori,bitinenumerate(bits):ifbit==0:bpsk_signal[i*fs//100:(i+1)*fs//100]=np.cos(2*np.pi*f0*t[i*fs//100:(i+1)*fs//100])else:bpsk_signal[i*fs//100:(i+1)*fs//100]=-np.cos(2*np.pi*f0*t[i*fs//100:(i+1)*fs//100])# 信道衰落mean=0std_dev=1channel_response=np.sqrt(np.random.normal(mean,std_dev,fs)**2+np.random.normal(mean,std_dev,fs)**2)received_signal=bpsk_signal*channel_response# 引入高斯白噪声snr_db=10# 信噪比 (dB)snr=10**(snr_db/10)noise_power=1/snr noise=np.sqrt(noise_power/2)*(np.random.randn(fs)+1j*np.random.randn(fs))received_signal_with_noise=received_signal+noise# 解调demodulated_bits=np.zeros_like(bits)foriinrange(100):sample=received_signal_with_noise[i*fs//100:(i+1)*fs//100]ifnp.mean(sample.real)>0:demodulated_bits[i]=0else:demodulated_bits[i]=1# 计算误码率errors=np.sum(bits!=demodulated_bits)ber=errors/len(bits)print(f"误码率:{ber}")# 绘制解调后的比特plt.plot(demodulated_bits,'o')plt.title('解调后的比特')plt.xlabel('比特数')plt.ylabel('解调结果')plt.show()

1.6 多址接入技术

多址接入技术允许多个用户共享同一信道,常见的多址接入技术包括FDMA、TDMA和CDMA。

例子:CDMA多址接入

假设我们有多个用户通过CDMA技术共享同一信道,每个用户使用不同的伪随机码进行扩频。

importnumpyasnpimportmatplotlib.pyplotasplt# 用户参数num_users=4# 用户数num_bits=100# 每个用户的比特数fs=1000# 采样频率 (Hz)f0=100# 载波频率 (Hz)t=np.linspace(0,1,fs,endpoint=False)# 生成时间轴# 生成伪随机码codes=np.array([np.random.randint(2,size=100)*2-1for_inrange(num_users)])# 生成每个用户的BPSK信号bpsk_signals=[]foriinrange(num_users):bits=np.random.randint(2,size=num_bits)# 生成随机比特bpsk_signal=np.zeros_like(t)forj,bitinenumerate(bits):ifbit==0:bpsk_signal[j*fs//100:(j+1)*fs//100]=np.cos(2*np.pi*f0*t[j*fs//100:(j+1)*fs//100])else:bpsk_signal[j*fs//100:(j+1)*fs//100]=-np.cos(2*np.pi*f0*t[j*fs//100:(j+1)*fs//100])bpsk_signals.append(bpsk_signal*codes[i])# 合成多用户信号combined_signal=np.sum(bpsk_signals,axis=0)# 信道衰落mean=0std_dev=1channel_response=np.sqrt(np.random.normal(mean,std_dev,fs)**2+np.random.normal(mean,std_dev,fs)**2)received_signal=combined_signal*channel_response# 引入高斯白噪声snr_db=10# 信噪比 (dB)snr=10**(snr_db/10)noise_power=1/snr noise=np.sqrt(noise_power/2)*(np.random.randn(fs)+1j*np.random.randn(fs))received_signal_with_noise=received_signal+noise# 解调demodulated_bits=[]foriinrange(num_users):correlated_signal=received_signal_with_noise*codes[i]demodulated_bit=np.zeros_like(bits)forjinrange(num_bits):sample=correlated_signal[j*fs//100:(j+1)*fs//100]ifnp.mean(sample.real)>0:demodulated_bit[j]=0else:demodulated_bit[j]=1demodulated_bits.append(demodulated_bit)# 计算误码率ber=[]foriinrange(num_users):errors=np.sum(bits!=demodulated_bits[i])ber.append(errors/num_bits)print(f"每个用户的误码率:{ber}")# 绘制解调后的比特foriinrange(num_users):plt.plot(demodulated_bits[i],'o',label=f'用户{i+1}')plt.title('解调后的比特')plt.xlabel('比特数')plt.ylabel('解调结果')plt.legend()plt.show()

1.7 多天线技术

多天线技术(如MIMO)通过使用多个天线来提高通信系统的性能。MIMO系统可以通过空间复用来增加数据传输速率,通过分集来提高信号可靠性。

例子:2x2 MIMO系统

假设我们有一个2x2 MIMO系统,发送端有两个天线,接收端也有两个天线。

importnumpyasnpimportmatplotlib.pyplotasplt# 系统参数num_antennas=2# 天线数num_bits=100# 比特数fs=1000# 采样频率 (Hz)f0=100# 载波频率 (Hz)t=np.linspace(0,1,fs,endpoint=False)# 生成时间轴# 生成BPSK信号bpsk_signals=[]for_inrange(num_antennas):bits=np.random.randint(2,size=num_bits)# 生成随机比特bpsk_signal=np.zeros_like(t)forj,bitinenumerate(bits):ifbit==0:bpsk_signal[j*fs//100:(j+1)*fs//100]=np.cos(2*np.pi*f0*t[j*fs//100:(j+1)*fs//100])else:bpsk_signal[j*fs//100:(j+1)*fs//100]=-np.cos(2*np.pi*f0*t[j*fs//100:(j+1)*fs//100])bpsk_signals.append(bpsk_signal)# 生成信道矩阵H=np.random.randn(num_antennas,num_antennas)+1j*np.random.randn(num_antennas,num_antennas)# 生成接收信号received_signals=np.zeros((num_antennas,fs),dtype=complex)foriinrange(num_antennas):forjinrange(num_antennas):received_signals[i]+=H[i,j]*bpsk_signals[j]# 引入高斯白噪声snr_db=10# 信噪比 (dB)snr=10**(snr_db/10)noise_power=1/snr noise=np.sqrt(noise_power/2)*(np.random.randn(num_antennas,fs)+1j*np.random.randn(num_antennas,fs))received_signals_with_noise=received_signals+noise# 解调demodulated_bits=[]foriinrange(num_antennas):demodulated_bit=np.zeros_like(bits)forjinrange(num_bits):sample=received_signals_with_noise[i,j*fs//100:(j+1)*fs//100]ifnp.mean(sample.real)>0:demodulated_bit[j]=0else:demodulated_bit[j]=1demodulated_bits.append(demodulated_bit)# 计算误码率ber=[]foriinrange(num_antennas):errors=np.sum(bits!=demodulated_bits[i])ber.append(errors/num_bits)print(f"每个天线的误码率:{ber}")# 绘制解调后的比特foriinrange(num_antennas):plt.plot(demodulated_bits[i],'o',label=f'天线{i+1}')plt.title('解调后的比特')plt.xlabel('比特数')plt.ylabel('解调结果')plt.legend()plt.show()

结束语

通过以上内容,我们对通信系统的各个组成部分及其工作原理有了初步的了解。信源生成信号,发送器进行调制和编码,信道传输信号,接收器进行解调和解码,信噪比和误码率是评估系统性能的重要参数,多址接入技术允许多个用户共享同一信道,多天线技术通过空间复用和分集提高系统性能。这些基本原理是后续章节中进行无线通信系统仿真和分析的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/20 21:26:34

7、无线网络与复杂网络配置指南

无线网络与复杂网络配置指南 1. 无线网络用户规则配置 在无线网络环境中,不同用户的需求和权限可能存在差异。以Windows用户Peter和OpenBSD用户Christina为例,我们可以为他们分别设置不同的规则。 Peter仅需上网浏览和访问特定机器上的高端口服务,可在 /etc/authpf/user…

作者头像 李华
网站建设 2026/3/18 8:01:26

Perl Socket 编程

Perl Socket 编程 引言 Perl(Practical Extraction and Report Language)是一种强大的编程语言,广泛应用于文本处理、系统管理、网络编程等领域。在众多应用中,Perl Socket 编程以其简洁、高效的特点备受青睐。本文将详细介绍Perl Socket编程的基础知识、常用方法以及在实…

作者头像 李华
网站建设 2026/3/17 21:25:55

SSC Tools配置项中文详解

一、基础工程与版本配置 在 SSC Tool 主页面(SSC-Device界面),首先显示工程的基础配置信息,决定协议栈版本与核心文件关联,是后续配置的前提: 配置项说明与作用关键约束与示例SSC Version显示当前 SSC Too…

作者头像 李华
网站建设 2026/3/15 12:13:41

深入理解 FactoryBean:定制化 Bean 的秘密武器

前言在 Spring 的日常开发中,我们通常使用 Component、Service 或者 Configuration Bean 的方式来定义 Bean。对于大多数简单的对象(比如 Controller、Service),这些方式非常直观且高效。但是,假设我们需要创建一个初…

作者头像 李华