1.算法仿真效果
本系统进行了Vivado2019.2平台的开发:
将FPGA的仿真结果导入matlab中,并通过matlab2022a进行papr对比:
2.算法涉及理论知识概要
峰值平均功率比(PAPR—Peak to Average Power Ratio),简称峰均比(PAPR)。MIMO-OFDM系统能够提供更大的覆盖范围、更好的传输质量、更高的数据速率和频谱效率。然而,由于OFDM 符号是由多个独立经过调制的子载波信号叠加而成的,当各个子载波相位相同或者相近时,叠加信号便会受到相同初始相位信号的调制,从而产生较大的瞬时功率峰值,由此进一步带来较高的峰值平均功率比(PAPR—Peak to Average Power Ratio),简称峰均比(PAPR)。由于一般的功率放大器的动态范围都是有限的,所以峰均比较大的MIMO-OFDM信号极易进入功率放大器的非线性区域,导致信号产生非线性失真,造成明显的频谱扩展干扰以及带内信号畸变,导致整个系统性能严重下降。高峰均比已成为MIMO-OFDM 的一个主要技术阻碍。
2.1 OFDM中PAPR问题概述
首先,OFDM信号是一种特殊的多载波调制技术,它将高速数据流通过串并转换器变为多路并行的数据流,然后用不同的载波去承载这些并行的码流。这个过程中,每个载波的幅度和相位都可以独立地控制,从而实现对信号的优化。
然而,由于OFDM信号的多个载波是正交的,这使得各个载波的幅度在时间上可能呈现剧烈的变化,从而导致信号的峰均功率比(PAPR)较高。高PAPR不仅会降低信号的信噪比(SNR),还会对系统的性能产生负面影响。
2.2 基于限幅法的PAPR抑制技术
在正交频分复用(OFDM)技术中,由于信号是由多个独立经过调制的子载波信号叠加而成的,当各个子载波相位相同或者相近时,叠加信号便会受到相同初始相位信号的调制,从而产生较大的瞬时功率峰值,由此进一步带来较高的峰值平均功率比(PAPR—Peak to Average Power Ratio),简称峰均比(PAPR)。
PAPR问题主要表现为,当OFDM信号的峰值出现时,功率放大器的动态范围是有限的,因此峰均比较大的信号极易进入功率放大器的非线性区域,导致信号产生非线性失真,造成明显的频谱扩展干扰以及带内信号畸变,导致整个系统性能严重下降。为了解决PAPR问题,基于限幅法的PAPR抑制技术被提出。该技术主要包括以下两种方法:
限幅法:该方法通过降低信号的峰值幅度来降低PAPR,但会牺牲一定的频谱效率。
压扩法:该方法通过改变各个载波的幅度分布来降低PAPR,但需要大量的计算资源。
以上基于限幅法的PAPR抑制技术是针对OFDM信号处理的特性和要求提出的,可以有效降低OFDM信号的PAPR,提高系统的性能。然而,还需要考虑其应用时的具体要求和限制。
3.Verilog核心程序
````timescale 1ns / 1ps
module OFDM_tops(
i_clk,
i_rst,
i_before_fft1,
i_last_fft1,
i_enable1,
i_real_dat1,
i_imag_dat1,
o_start_ifft,
o_ends_ifft,
o_enable_ifft,
o_real_ifft,
o_imag_ifft,
o_start_papr,
o_ends_papr,
o_enable_papr,
o_real_papr,
o_imag_papr
);
input i_clk;
input i_rst;
input i_before_fft1;
input i_last_fft1;
input i_enable1;
input signed[15:0]i_real_dat1;
input signed[15:0]i_imag_dat1;
output o_start_ifft;
output o_ends_ifft;
output o_enable_ifft;
output signed[31:0]o_real_ifft;
output signed[31:0]o_imag_ifft;
output o_start_papr;
output o_ends_papr;
output o_enable_papr;
output signed[31:0]o_real_papr;
output signed[31:0]o_imag_papr;
Tants Tantsu1(
.i_clk (i_clk),
.i_rst (i_rst),
.i_before_fft1 (i_before_fft1),
.i_last_fft1 (i_last_fft1),
.i_enable1 (i_enable1),
.i_real_dat (i_real_dat1),
.i_imag_dat (i_imag_dat1),
.o_real_ifft (o_real_ifft),
.o_imag_ifft (o_imag_ifft),
.o_start (o_start_ifft),
.o_ends (o_ends_ifft),
.o_enable (o_enable_ifft)
);
ofdm_papr ofdm_papr_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_real_dat1 (o_real_ifft),
.i_imag_dat1 (o_imag_ifft),
.o_real_ifft (o_real_papr),
.o_imag_ifft (o_imag_papr)
);
reg o_start_papr;
reg o_ends_papr;
reg o_enable_papr;
always @(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
o_start_papr <= 1'd0;
o_ends_papr <= 1'd0;
o_enable_papr <= 1'd0;
end
else begin
o_start_papr <= o_start_ifft;
o_ends_papr <= o_ends_ifft;
o_enable_papr <= o_enable_ifft;
end
end
endmodule
```