百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

moboyou 2025-05-25 16:26 21 浏览

预失真(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)的数据手册中显示(数字)预失真的效果。红色曲线表示没有预失真的情况,蓝色曲线表示有预失真的情况。


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

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

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

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

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

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


相关推荐

Node.js 获取文件信息及路径(node.js怎么获取当前文件路径)

获取文件信息每个文件都有一组细节,我们可以使用Node.js进行检查。特别是使用fs模块提供的stat()方法。constfs=require('fs');fs.stat(&#...

深入剖析JavaScript中深浅拷贝(js实现深浅拷贝)

大家好,我是Echa。最近有一位00后的小妹妹粉丝私信小编说自己很喜欢编程,目前在某公司实习前端开发工作,说到现在为止还没有搞懂JavaScript中深拷贝和浅拷贝这个问题,同时也在网上看了很多关于深...

为什么高手写 JS 总是又快又好?这10个技巧你要知道

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!JavaScript是前端开发的重要语言...

IT技术栈:Javascript神器,URL.createObjectURL()

URL.createObjectURL()是JavaScript中的一个方法,用于创建一个特殊的URL,该URL可以用于将不支持直接加载的数据(如二进制数据或Blob对象)嵌入到we...

如何在 Linux 中创建和管理组?(linux如何建立组)

在Linux中,组是用户账户的集合,用于统一管理权限。每个用户至少属于一个主组(PrimaryGroup),还可以加入多个附加组(SupplementaryGroup)。组的权限设置决定了用户对文...

付费文库内容无法复制,不用任何工具,学会这4种方法轻松复制

关注职场办公,分享实用干货,洞察科技资讯,这里是「职场科技范」。我们在搜索资料的时候,看到非常有用的文库,但往往都是付费的,只能看不能复制。今天就来教大家,学会下面这4种方法,轻松复制文库内容。一、内...

node.js v24.0.0 正式发布!10大重磅更新助力开发者,性能大幅提升

近日,Node.js官方团队正式发布了Node.jsv24.0.0版本,这是一个具有里程碑意义的重大更新。作为"Current"版本,它将在未来六个月内引领Node.js...

我理解的网站产品经理之四:网站产品前端姿势

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。2016年了,嗨,大家新年好。作为一个网页的产品经理,网页的前端知识可谓是不能不知,本文主讲网站产品的前端姿势。通常,...

五一我要看七天小说!免费开源的轻量化书库talebook搭建流程。

这次来分享一个简单阅读项目:TaleBook,项目曾用名calibre-webserver。TaleBook是一个基于Calibre的简单的个人图书管理系统,支持在线阅读。不过鉴于各种规章制度,仅...

“5 分钟 CMake 使用指南,解决我的 C++ 打包问题!”

在软件开发的世界里,构建系统扮演着至关重要的角色,它不仅决定了项目的构建效率,还直接影响到团队协作的流畅度。对于许多C++开发者而言,CMake因其强大的功能和广泛的兼容性成为了构建自动化流程的...

大佬级鬼才终于把JavaScript整理成了修仙小说,让学习变简单

这是一本讲解JavaScript编程语言的技术书籍,只不过,本书采用了一种全新的写作手法。如果你厌倦了厚厚的、如同字典般的编程书籍,不妨尝试一下新的口味,话不多说,直接上干货!目录截图:内容展示:以上...

JavaScript基础知识点总结(javascript基础入门教程)

//逗比小憨憨/*第一章*HTML引用js方法:*1,外部引用:HTML外部引用js:<scriptsrc="js/day1.js"></script>*2,...

在Node.js中处理Zip文件(node运行js文件)

作者:疯狂的技术宅转发链接:https://mp.weixin.qq.com/s/edJd9-t1AyTGRcha_1k6RA前言Zip文件是常用的压缩文件格式。在本文中,我将演示如何用adm-...

Python 标准库中鲜为人知的宝藏 | Node.js 22.8.0 发布

Python标准库中鲜为人知的宝藏Python标准库功能强大,但有些模块却鲜为人知。本文将介绍一些有趣且实用的模块,助你提升代码效率和功能。数据结构:超越列表和字典除了常用的列表和字典,coll...

小程序,wxml页面里如何写JS代码?WXS如何模块化?

这篇接着上篇小程序,跳转页面的两种方式及其页面传参数继续讲,小程序wxml页面里如何写JS代码?wxs如何模块化?第一个问题:wxml页面要想类似HTML页面中写js代码,必须在页面中使用wxs标...