前言

射频功放的增益响应并非线性的,受到放大管饱和效应的影响,功放不可避免地出现非线性、甚至具有记忆效应的失真。这种非线性失真不仅产生高阶谐波,还会产生互调干扰,降低带内信噪比,影响带外信号。因此,需要一种方式减弱射频功放的非线性增益,数字预失真就是方式之一。ADI有篇文章不错,看完之后基本可以独立实现DPD算法。

RF通信的数字预失真:从等式到实现方案

本文将从 信号产生->失真模拟->失真模型检验->逆模型检验效果 四个部分验证DPD算法在双音与多音通信系统中的matlab验证。

信号产生

采样率1MHz 生成90kHz、100kHz、110kHz三音信号,采样点数16384。

%% 信号产生
fs = 1e6;
f1 = 90e3;
f2 = 100e3;
f3 = 110e3;
N = 1024 * 16;
N_FFT = N;
tmax = N / fs;
t = linspace(0, tmax, N);
sig_in = sin(2 * pi * f1 .* t) + sin(2 * pi * f2 .* t) + sin(2 * pi * f3 .* t);
sig_in = sig_in / max(sig_in);

失真模型

射频功放PA部分,使用saleh模型模拟无记忆失真,使用FIR滤波器模拟记忆效应。

%% 建立带记忆功放失真模型
b = [0.7692 0.1538 0.0769]; %《射频功放数字预失真线性化技术研究_詹鹏》
a = [1];
% 使用saleh模型模拟无记忆失真,使用FIR滤波器模拟记忆效应,检测该模型的AM/AM与AM/PM
u = linspace(0, 1, N);
PA_out_u = saleh(filter(b, a, u)); figure(1)
subplot(2, 1, 1)
plot(u, abs(PA_out_u));
hold on
plot(u, u);
hold off;
title("AM/AM")
xlabel("sig in")
ylabel("PA out")
subplot(2, 1, 2)
plot(u, angle(PA_out_u));
title("AM/PM")
xlabel("sig in")
ylabel("PA out") PA_out = saleh(filter(b, a, sig_in););
figure(2)
clf
plot(real(PA_out))
hold on
plot(real(sig_in))
hold off
plt_fft(PA_out', fs, 3, 1);
ylim([-80 0])
xlim([0 200e3])
ylabel("功率谱")
xlabel("f/Hz")
title("预失真补偿前")
  • 其中saleh模型如下:

    点击查看代码
    function y = saleh(x)
    %para = [2.1587 1.1517 4.0033 9.1040];
    para = [1.5 0.5 pi/3 1];
    a1 = para(1); b1 = para(2);
    a2 = para(3); b2 = para(4);
    ain = abs(x);
    thetain = angle(x);
    aout = a1 .* ain ./ (1 + b1 .* ain .^ 2);
    thetapm = a2 * ain .^ 2 ./ (1 + b2 .* ain .^ 2);
    thetaout = thetain + thetapm;
    y = aout .* exp(1j * thetaout);
    end
  • plt_fft是画图部分,代码如下

    点击查看代码
    function []=plt_fft(x, fs, num,t1)
    L = length(x);
    Y = fft(real(x.*hann(L)));
    P2 = abs(Y / L);
    P1 = P2(1:L / 2 + 1);
    P1(2:end - 1) = 2 * P1(2:end - 1);
    f = fs * (0:(L / 2)) / L;
    if t1==1
    P1=20*log10(abs(P1/max(P1)));
    else
    P1=20*log10(abs(P1));
    end
    figure(num)
    plot(f, P1)
    end

失真模型检验

预失真部分,使用简化的广义记忆多项式模型,不包含交叉项,这样虽然丢失了一部分记忆效应,但是计算量骤减。

%% 建立预失真
x = sig_in;
y = PA_out;
x = x.';
y = y.';
K = 7;
M = 3; X = MP_model(x, K, M);
Y = MP_model(y, K, M); % 拟合测试,判断阶数与记忆深度是否匹配
U = MP_model(u.', K, M);
X_H = X';
w_test = pinv(X_H * X) * X_H * y;
y_dis = U * w_test;
figure(6)
subplot(2, 1, 1)
plot(u, u);
hold on
plot(u, abs(PA_out_u));
hold on
plot(u, abs(y_dis));
hold off;
legend(["line" "PA_out_u" "GMP_u"])
title("AM/AM")
xlabel("sig in")
ylabel("PA out")
subplot(2, 1, 2)
plot(u, angle(y_dis));
title("AM/PM")
xlabel("sig in")
ylabel("PA out")
hold off;
  • 其中MP_model是构建GMP部分,代码如下

    点击查看代码
    function [Y] = MP_model(x_i, K, M)
    
    for m=0:M
    x=mat_delay(x_i, m);
    for k=0:K
    if k==0
    H=x;
    else
    H=[H,x.*(abs(x).^k)];
    end
    end
    if m==0
    Y=H;
    else
    Y=[Y,H];
    end
    end
  • 其中mat_delay是记忆部分,代码如下

    点击查看代码
    function x_d = mat_delay(x, dd)
    
    	if dd == 0
    x_d = x;
    else
    x_d = circshift(x, dd);
    x_d(1:dd, 1) = 0;
    end end

逆模型检验效果

%% 使用逆模型构建预失真
Y_H = Y';
w = pinv(Y_H * Y) * Y_H * x;
X_pre = X * w;
PA_out2 = saleh(filter(b,a,X_pre)); figure(4)
plot(real(PA_out2))
hold on
plot(real(PA_out))
hold off
plt_fft(PA_out2, fs, 5, 1);
ylim([-80 0])
xlim([0 200e3])
ylabel("功率谱")
xlabel("f/Hz")
title("预失真补偿后")

效果

github

数字预失真(DPD)小试的更多相关文章

  1. GaN助力运营商和基站OEM实现5G sub-6GHz和mmWave大规模MIMO

    到2021年,估计全球会有更多的人拥有移动电话(55亿),将超过用上自来水的人数(53亿).与此同时,带宽紧张的视频应用将进一步增加对移动网络的需求,其会占移动流量的78%.使用大规模多输入多输出(M ...

  2. FMC子卡设计资料原理图:FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡

    FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡 一.产品概述 ADRV9002 是一款高性能.高线性度.高动态范围收发器,旨在针对性能与功耗系统进行优化.该设备是可配置的,非常适合要 ...

  3. 基于AD9361的双收双发射频FMC子卡

    FMC177-基于AD9361的双收双发射频FMC子卡 一.板卡介绍 FMC177射频模块分别包含两个接收通道与发射通道,其频率可覆盖达到70MHz~6GHz,AD9361芯片提供具有成本效益的实验平 ...

  4. L230 RF可靠性测试-RF指标

    最近调试Zigbee 和2.4G产品时需要做一些认证,查找到常用的RF指标. ----------http://www.52rd.com/S_TXT/2016_5/TXT83303.htm------ ...

  5. JavaScript知识点

    Day 01 1.Javascript 概述 1.什么是Javascript (JS) Javascript 是一种运行于 JS解释器/引擎 中的解释型脚本语言 JS解释器/引擎 :JS运行环境 1. ...

  6. JavaScript原生对象总纲

    一. javascript之Array类 创建js数组两种方式: var arr = [];  或var arr = new Array(); ()里可以指定长度,也可以不指定,指不指定都无所谓,因为 ...

  7. 论文翻译:2020_Nonlinear Residual Echo Suppression using a Recurrent Neural Network

    论文地址:https://indico2.conference4me.psnc.pl/event/35/contributions/3367/attachments/779/817/Thu-1-10- ...

  8. java中多个数字运算后值不对(失真)处理方法

    最近遇到一个bug ,在java里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.8999999999,丢失精度了,原来这是Java浮点运算的一个bug. 解决 ...

  9. js中多个数字运算后值不对(失真)处理方法

    最近遇到一个bug ,在js里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.89,领导不乐意了说怎么少了0.01,我一听,噶卵达,来达鬼,不可能啊,我Goog ...

  10. python预课02 time模块,文本进度条示例,数字类型操作,字符串操作

    time模块 概述:time库是Python中处理时间的标准库,包含以下三类函数 时间获取: time(), ctime(), gmtime() 时间格式化: strftime(), strptime ...

随机推荐

  1. 补齐OLAP引擎短板!ByteHouse 是如何实现流批一体的?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   计算机领域一直流传一句话--"没有银弹",这句话出自计算机科学家布鲁克斯<没有银弹& ...

  2. 火山引擎DataLeap数据调度实例的 DAG 优化方案(三):技术实现

    在原始数据中,是以一个数组的形式返回节点信息及依赖关系.所以,需要对数据进行处理形成图所需要的数据,同时,利用多个 map 对数据进行存储,方便后续对数据进行检索,减少时间复杂度. 实例节点的样式需要 ...

  3. 看火山引擎DataLeap如何做好电商治理(一):挑战与痛点

    现在人们的日常生活中,网购已经成为人们生活中不可或缺的购物形式.根据中国电子商会发布的<中国社交电商行业发展白皮书(2022)>的数据显示,2022年社交电商市场交易规模达到28542.8 ...

  4. 语音顶会 ICASSP 2022 成果分享:基于时频感知域模型的单通道语音增强算法

    近日,阿里云视频云音频技术团队与新加坡国立大学李海洲教授团队合作论文 <基于时频感知域模型的单通道语音增强算法 >(Time-Frequency Attention for Monaura ...

  5. JSP | IDEA 配置 JSP 模板

    新建 jsp 文件时的模板 在第 5 步输入下面模板代码: <%-- Created by IntelliJ IDEA. User: ${USER} Date: ${DATE} Time: ${ ...

  6. Java文件上传与下载压缩

    文件上传与下载压缩 文件上传: 这是一个通用的本地文件的上传代码,可以将文件类型存储到相应的本地目录下 注:本次演示为存储路径为项目所在的resources目录下,可通过url去访问本地文件数据适用于 ...

  7. AIO异步通信。BIO同步阻塞式IO, NIO同步非阻塞通信。

    IO 什么是IO? 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的.单独的程序一般是让系统为它们完 ...

  8. Vue tinymce富文本编辑器整合

    最近再弄一个后台管理系统,挑选了不少的编辑器,最终选择了tinymce,UI精美,功能模块多,可按需加载配置 vue cli 3 + tinymce5.0版本整合参考:https://liubing. ...

  9. appium(二)安装(Android)

    一.安装Appium-desktop 1.官网下载安装包: http://appium.io/

  10. NCC Mocha v0.10 发布, .NET 开发的基于 OpenTelemetry 的 APM 系统

    目录 项目简介 项目进度 v0.10 发布内容 项目背景 平台功能 技术架构 v0.10 快速体验 启动项目 Trace 数据的发送 配置 Jaeger 数据源 Trace 数据的查询 项目简介 Mo ...