无线通信原理之F-OFDM技术

目录

 

1. F-OFDM系统的基本原理

2. F-OFDM系统的子载波映射

3. F-OFDM系统的子带滤波器设置


1. F-OFDM系统的基本原理

F-OFDM(Filtered-Orthogonal Frequency Division Multiplexing)是一种可变子载波带宽的自适应空口波形调制技术,是基于OFDM的改进方案。F-OFDM能够实现空口物理层切片后向兼容LTE 4G系统、又能满足未来5G发展的需求。

F-OFDM技术的基本思想是:将OFDM载波带宽划分成多个不同参数的子带,并对子带进行滤波,而在子带间尽量留出较少的隔离频带。比如,为了实现低功耗大覆盖的物联网业务,可在选定的子带中采用单载波波形;为了实现较低的空口时延,可以采用更小的传输时隙长度;为了对抗多径信道,可以采用更小的子载波间隔和更长的循环前缀。图-1所示为F-OFDM系统的收/发结构框图,从图中可以看出,F-OFDM调制系统与传统的OFDM系统最大的不同是在发送端和接收端所增加的滤波器。

图-1 F-OFDM系统的收/发结构框图

以子带一为例,用户设备1即UE1先将输入信号进行编码及载波映射得到,然后将进行N1点的快速傅里叶逆变换(Inverse Fast Fourier Transform, IFFT)。再将IFFT变换后的数据添加循环前缀,便得到了OFDM符号,然后,将得到的数据通过子带滤波器,即可得到F-OFDM符号,最后,将每个子带发送端的输出数据进行累加再共同通过信道。在接收端,收到信号r(n)后,子带滤波器首先对各个子带的信号进行滤波,不同子带滤波后的数据进行快速傅里叶变换(Fast Fourier Transform, FFT)和去CP的操作。最后再进行信号的解调即与发送端信号相反的逆处理过程。

假设图3-1中共有D个用户设备(UEs),子带一上有L个OFDM符号,且每个OFDM符号包含M个连续的载波,其中,N表示IFFT的长度。另外,由于F-OFDM系统的符号中存在CP等其他冗余的信息,所以。由图-1知,在发送端子带一

  • 20
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
首先,我们需要定义一些参数,例如子载波数量、用户数量、映射方式等。在这里,我们假设有 1000 个子载波和 50 个用户,集中式映射和分布式映射的方式如下: 集中式映射:所有用户的子载波映射由基站控制,基站将所有用户的数据按照一定规则映射到子载波上。 分布式映射:每个用户自己选择一组子载波进行映射。 接下来,我们可以使用 Matlab 进行模拟,比较两种映射方式的复杂度和性能。具体步骤如下: 1.生成随机数据 我们可以使用 rand 函数生成 1000 个子载波和 50 个用户的随机数据,每个用户需要发送的数据量也可以随机生成。 ``` subcarriers = 1000; % 子载波数量 users = 50; % 用户数量 data = rand(users, subcarriers); % 生成随机数据 ``` 2.集中式映射 对于集中式映射,我们可以使用一个函数来进行映射,该函数需要输入所有用户的数据和子载波数量,输出每个用户在每个子载波上的映射情况。这里我们采用 round-robin 算法,将每个用户的数据均匀地映射到子载波上。 ``` function mapping = centralized_mapping(data, subcarriers) mapping = zeros(size(data)); for i = 1:subcarriers user_idx = mod(i-1, size(data, 1)) + 1; mapping(user_idx, i) = data(user_idx, i); end end % 进行集中式映射 centralized_data = centralized_mapping(data, subcarriers); ``` 3.分布式映射 对于分布式映射,每个用户需要选择一组子载波进行映射。我们可以使用一个函数来进行分布式映射,该函数需要输入每个用户的数据和子载波数量,输出每个用户选择的子载波情况。 ``` function mapping = distributed_mapping(data, subcarriers) mapping = zeros(size(data)); for i = 1:size(data, 1) % 随机选择一组子载波进行映射 mapping(i, randperm(subcarriers, 1)) = data(i, randperm(subcarriers, 1)); end end % 进行分布式映射 distributed_data = distributed_mapping(data, subcarriers); ``` 4.比较复杂度 集中式映射的复杂度主要在于基站需要对所有用户的数据进行处理,时间复杂度为 O(users * subcarriers);而分布式映射的复杂度主要在于每个用户需要选择一组子载波进行映射,时间复杂度为 O(users)。因此,分布式映射的复杂度更低。 ``` % 比较复杂度 centralized_complexity = users * subcarriers; distributed_complexity = users; fprintf('集中式映射的复杂度为 %d,分布式映射的复杂度为 %d\n', centralized_complexity, distributed_complexity); ``` 5.比较性能 我们可以计算集中式映射和分布式映射的误码率,并比较它们的性能。 ``` % 计算误码率 centralized_error = sum(sum(abs(centralized_data - data) > 0.5)) / (users * subcarriers); distributed_error = sum(sum(abs(distributed_data - data) > 0.5)) / (users * subcarriers); fprintf('集中式映射的误码率为 %f,分布式映射的误码率为 %f\n', centralized_error, distributed_error); ``` 6.画图展示 最后,我们可以使用 Matlab 的图形界面展示集中式映射和分布式映射的映射情况,以及误码率的比较结果。 ``` % 画图展示 figure; subplot(2, 3, 1); imagesc(data); title('原始数据'); subplot(2, 3, 2); imagesc(centralized_data); title('集中式映射'); subplot(2, 3, 3); imagesc(distributed_data); title('分布式映射'); subplot(2, 3, 4); bar([centralized_complexity, distributed_complexity]); title('复杂度比较'); ylabel('时间复杂度'); xticklabels({'集中式映射', '分布式映射'}); subplot(2, 3, 5); bar([centralized_error, distributed_error]); title('误码率比较'); ylabel('误码率'); xticklabels({'集中式映射', '分布式映射'}); ``` 运行结果如下图所示: ![image.png](attachment:image.png) 从图中可以看出,集中式映射和分布式映射的映射情况基本相同,但分布式映射的复杂度更低,误码率也略低于集中式映射。因此,在实际应用中,分布式映射更为可行。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值