领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

射频放大器的线性化技术预失真介绍

nixiaole 2024-12-31 13:41:39 知识剖析 22 ℃

预失真(Predistortion )是一种可以补偿放大器产生的失真影响的技术。众所周知,放大器是一种可以放大输入信号并输出??较大信号的设备。无论输入信号电平为低电平还是高电平,理想放大器都应以相同的程度放大信号。但是,实际上,大多数放大器根据输入电平放大的程度略有不同。取决于信号水平的这种不同的放大水平将导致信号失真,并且该失真将导致各种不想要的结果。最大的问题之一是失真会导致信号带宽之外的大量功率泄漏。

有什么办法可以减小失真的影响?一种可能的想法是,以与信号在进入放大器之前放大器会失真的完全相反的方式使信号预先失真。此技术称为“预失真”,意为“放大器之前的失真”。

假设您有一个放大器,并且放大器的传递函数(工作函数)看起来像下图中心的图。乍一看,您会发现传递函数不是线性的,这意味着放大程度取决于输入信号的电平。

现在,让我们看一下上方的图形。电平较低的信号(绿色曲线)进入放大器(左上方)。通过放大器后,您将获得蓝色显示的输出信号。如果比较输入信号和输出信号,您会注意到信号的形状几乎相同。这意味着输入信号不会因放大而失真。 (我特意使用增益为1的传递函数,以便轻松比较这两个信号)。

现在看一下下方的图形。您会看到少量信号(绿色曲线)进入放大器。在这种情况下,您会看到输入信号(绿色)和输出信号(蓝色)的形状之间存在一些差异,尤其是信号的上限。这意味着信号会被放大器失真。

如果您想进一步处理此过程,请尝试使用以下Matlab / Octave代码。 您可以随心所欲地使用inputmin和inputmax值来更改输入信号电平,并查看输出信号如何变化。

gain = 1.0;x = 0:pi/100.0:pi;y_amp = gain * tanh(x); inputmin = 0.0;inputmax = 1.0;inputsize = 50;input = inputmin + (inputmax-inputmin) * rand(1,inputsize);output = gain * tanh(input); subplot(1,3,1);plot(input,'g-');title('input');xlim([0 length(input)]);ylim([0 1]);subplot(1,3,2);plot(x,y_amp,'r-');title('amplifier');xlim([0 max(x)]);ylim([0 1]);subplot(1,3,3);plot(input,'g-');hold on;plot(output,'b-');hold off; title('input & output');xlim([0 length(input)]);ylim([0 1]);


现在的问题是“是否有任何方法可以最小化或消除失真的影响?”。


一个想法是在放大器的前面添加另一个块,如下所示。 假设预失真块的传递函数如下所示。 让我们看看信号经过失真块后的变化。 您会注意到输出信号(蓝色)和输入信号(绿色)之间的巨大差异,这意味着它是“失真的”。 但是这种失真是“想要的/预期的”失真。

然后,这个失真的信号(不是原始信号)通过放大器。 现在看看从放大器出来的信号的样子。 您会看到输出信号的形状几乎与输入信号相同。

这表明由预失真块产生的故意失真消除了放大器失真的影响。


如果您想进一步处理此过程,请尝试使用以下Matlab / Octave代码。 您可以随心所欲地使用inputmin和inputmax值来更改输入信号电平,并查看输出信号如何变化。

gain = 1.0;x = 0:pi/100.0:pi;y_amp = gain * tanh(x);x_pre = 0:1/100.0:0.99;y_pre = gain * atanh(x_pre); inputmin = 0.0;inputmax = 1.0;inputsize = 50;input = inputmin + (inputmax-inputmin) * rand(1,inputsize);predistortedInput = atanh(input);output = gain * tanh(predistortedInput); subplot(1,5,1);plot(input,'g-');title('input');xlim([0 length(input)]);ylim([0 2]);subplot(1,5,2);plot(x_pre,y_pre,'r-');title('predistortion');xlim([0 max(x_pre)]);ylim([0 2]);subplot(1,5,3);plot(input,'g-');hold on;plot(predistortedInput,'b-');hold off; title('predistorted Input');xlim([0 length(input)]);ylim([0 2]);subplot(1,5,4);plot(x,y_amp,'r-');title('amplifier');xlim([0 max(x)]);ylim([0 2]);subplot(1,5,5);plot(input,'g-');hold on;plot(output,'b-');hold off; title('input & output');xlim([0 length(input)]);ylim([0 2]);


上面我所解释的主要是基于时域特性的,但实际上,在处理放大器时,您会在频域中对其进行更多的表征。如果比较未线性化(无预失真)和线性化(有预失真)的频率响应,则如下图所示。如您所见,由于在非线性区域中没有预失真而导致的最关键问题是高ACLR / ACPR,如下图所示的灰色轨迹所示。通过适当的预失真,您可以去除那些高ACLR / ACPR使其像下面所示的黑色轨迹一样。

下面是另一个示例,该示例从AD9375(Analog Device)的数据手册中显示(数字)预失真的效果。红色曲线表示没有预失真的情况,蓝色曲线表示有预失真的情况。


现在,最重要的问题是“我如何知道特定放大器的预失真程度?”。从技术上来讲,我该如何计算预失真块的传递函数?

理论上的答案很简单。如果您知道放大器的传递函数,则只需采取传递函数的反函数即可获得预失真块的传递函数。

如您所知,实际上没有什么比您说的容易。有关预失真(尤其是预失真的实现)的更多详细信息,请参阅其他材料。您可以在百度上搜索很多文章/帖子。我认为这足以解释预失真的概念。

定义预失真度的方法基本上有两种,开环方法和闭环方法。 (这也是一种控制系统,因此可以是开环或闭环)。

在如下所示的开环方法中,我们使用一种预定义的查找表来指定预失真度。此方法易于实现,但问题是什么是最好的查找表以及如何创建该表。

在如下所示的闭环方法中,放大器的输出反馈到预失真块,并且该块基于该反馈自适应地计算出适当的预失真参数。优点是该方法可以动态调整值,但是自适应算法的实现将很困难的。


Tags:

最近发表
标签列表