无线通信与编码实验_MATLAB利用限幅和滤波操作实现OFDM系统降峰均比(PAPR)_含实现代码

在这里插入图片描述

MATLAB实现OFDM系统降峰均比

(峰值-平均功率比 Peak to Average Power Ratio, PAPR)

在OFDM系统中,经过IFFT运算之后所有的子载波相加,时域的发射信号会有很高的峰值。与单载波系统相比,OFDM系统具有很高的PAPR。高PAPR既降低了发射机功率放大器的效率,也降低了数/模转换器和模/数转换器的信号量化噪声比(SQNR),是OFDM系统中最不利的因素之一。

PAPR太高会导致一些问题:

增大峰值功率:OFDM系统的高PAPR会导致时域信号存在很高的峰值功率,这会导致在发射过程中需要更大的功率放大器,增加了系统的成本和能耗。

减小功率放大器的工作范围:由于峰值功率很高,OFDM系统的功率放大器的工作范围被限制在高功率区域,这可能导致功率放大器的非线性失真增加,从而引起误码率的增加。

多径信道中的失真:高PAPR的信号更容易受到多径信道的影响,因为多径信道会导致不同的子载波在接收端相位和幅度不同,从而导致码间干扰(ICI)和峰坑失真(PMD)等问题。

信号峰值过高导致了动态范围不足:当信号峰值过高时,ADC(模数转换器)或DAC(数字模拟转换器)的动态范围可能不足以表示整个信号,从而导致失真或降低解调性能。

(待补充)

峰值-平均包络功率比(PMEPR)是复基带信号包络的最大功率与平均功率之比

峰值包络功率(PEP)是复基带的最大功率,在平均功率归一化的条件下,PMEPR等于PEP

峰值-平均功率比(PAPR)是复通频带信号的最大功率与最小功率之比

峰值-平均功率比(PAPR)是一种衡量复通信号功率分布不均匀性的指标,其定义式为:
在这里插入图片描述

其中, s ( t ) s(t) s(t) 是一个周期为 T T T 的连续时间复信号, ∣ s ( t ) ∣ max ⁡ |s(t)|_{\max} s(t)max 是其幅度的最大值。PAPR 越大,表示信号功率分布越不均匀,需要更大的动态范围才能传输信号,这会增加传输的复杂性和成本。


OFDM系统中需要采用一些技术来控制PAPR,以改善系统性能,例如:部分传输序列(Partial Transmit Sequence, PTS)、选择性 mapping、幅度调制和调制指数优化等。

限幅方法是最简单的PAPR减小(无法完全解决)方法,它把发射信号的最大幅度限制在一个预先指定的水平,但是它具有一些缺点:

  • 限幅会引起带内信号失真:限幅会将信号的动态范围缩小,可能导致信号失真和码间干扰,从而使BER性能下降
  • 限幅会引起带外辐射,从而导致对邻道的干扰
  • 对限幅的信号滤波可以降低带外辐射,但这会使峰值再次增大,使得滤波后的信号可能超过限幅规定的限幅电平
% PDF_of_clipped_and_filtered_OFDM_signal.m
% 高版本matlab应该都可以正常运行
clear,clc
CR = 1.2; %限幅比:限幅点平与OFDM信号RMS之比
b=2;      % 每一QPSK符号的比特数
N=128;    % FFT大小
Ncp=32;   % CP长度
fs=1e6;   % 采样频率
L=8;      % 过采样因子(以生成L倍的过采样离散时间信号)
Tsym=1/(fs/N); % 采样频率
Ts=1/(fs*L);   % 采样周期
fc=2e6; wc=2*pi*fc; % 载波频率
t=[0:Ts:2*Tsym-Ts]/Tsym;  
t0=t((N/2-Ncp)*L);
f=[0:fs/(N*2):L*fs-fs/(N*2)]-L*fs/2;
Fs=8;       % 滤波器采样频率
Norder=104; % 采样阶数
dens=20;    % 密度因子
FF=[0 1.4 1.5 2.5 2.6 Fs/2]; % 阻带/通带/阻带频率边缘向量
WW=[10 1 10]; % 加权向量
h = firpm(Norder,FF/(Fs/2),[0 0 1 1 0 0],WW,{dens}); % BPF系数

X = mapper(b,N);  X(1) = 0; % QPSK调制
x=IFFT_oversampling(X,N,L); % IFFT和过采样
x_b=add_CP(x,Ncp*L); % 添加CP
x_b_os=[zeros(1,(N/2-Ncp)*L), x_b, zeros(1,N*L/2)]; % 过采样
%x_p = upconv_fin(2*fc,x_b_os,t); 
x_p = sqrt(2)*real(x_b_os.*exp(j*2*wc*t)); % 从基带到通频带
%norm(x_p-x_p1)
x_p_c = clipping(x_p,CR);
%X_p_c_f = filtering(h,x_p_c);
X_p_c_f= fft(filter(h,1,x_p_c)); %norm(X_p_c_f-X_p_c_f1)
%X_p_c_f = BPF_using_FFT(x_p_c,[1.5 2.5],8);
x_p_c_f = ifft(X_p_c_f);
%x_b_c_f = dwconv_fin(2*fc,x_p_c_f,t); 
x_b_c_f = sqrt(2)*x_p_c_f.*exp(-j*2*wc*t); % 从通频带到基带

figure(1); clf
nn=(N/2-Ncp)*L+[1:N*L]; nn1=N/2*L+[-Ncp*L+1:0]; nn2=N/2*L+[0:N*L];
subplot(221)
plot(t(nn1)-t0, abs(x_b_os(nn1)),'k:'); hold on;
plot(t(nn2)-t0, abs(x_b_os(nn2)),'k-');
axis([t([nn1(1) nn2(end)])-t0  0  max(abs(x_b_os))]);
title(['含CP的基带信号']);
xlabel('t (符号间隔归一化)'); ylabel('abs(x''[m])');
subplot(223)
XdB_p_os = 20*log10(abs(fft(x_b_os)));
plot(f,fftshift(XdB_p_os)-max(XdB_p_os),'k');
xlabel('频率[Hz]'); ylabel('PSD[dB]'); axis([f([1 end]) -100 0]);
subplot(222)
[pdf_x_p,bin]=hist(x_p(nn),50); bar(bin,pdf_x_p/sum(pdf_x_p),'k');
xlabel('x'); ylabel('pdf'); title(['未限幅的通频带信号']);
subplot(224)
XdB_p = 20*log10(abs(fft(x_p)));
plot(f,fftshift(XdB_p)-max(XdB_p),'k');
xlabel('频率[Hz]'); ylabel('PSD[dB]'); axis([f([1 end]) -100 0]);
% 带内波动和带外辐射,通过功率谱密度PSD观察

figure(2); clf 
subplot(221)% 限幅后的信号幅度低于限幅电平
[pdf_x_p_c,bin] = hist(x_p_c(nn),50);
bar(bin,pdf_x_p_c/sum(pdf_x_p_c),'k');
title(['限幅的通频带信号, CR=' num2str(CR)]);
xlabel('x'); ylabel('pdf');
subplot(223)
XdB_p_c = 20*log10(abs(fft(x_p_c)));
plot(f,fftshift(XdB_p_c)-max(XdB_p_c),'k');
xlabel('频率[Hz]'); ylabel('PSD[dB]'); axis([f([1 end]) -100 0]);

subplot(222)% 滤波后信号峰值超过限幅电平
[pdf_x_p_c_f,bin] = hist(x_p_c_f(nn),50); 
bar(bin,pdf_x_p_c_f/sum(pdf_x_p_c_f),'k');
title(['限幅和滤波后的通频带信号, CR=' num2str(CR)]);
xlabel('x'); ylabel('pdf');
subplot(224)
XdB_p_c_f = 20*log10(abs(X_p_c_f));
plot(f,fftshift(XdB_p_c_f)-max(XdB_p_c_f),'k');
xlabel('频率[Hz]'); ylabel('PSD[dB]');
axis([f([1 end]) -100 0]);
% 限幅后的带外频谱增大了,但滤波后的带外频谱减小了

figure(3); clf 
subplot(221)
stem(h,'k'); xlabel('抽头数'); ylabel('滤波器系数 h[n]');%等波纹通频带FIR滤波器脉冲响应
axis([1, length(h), min(h), max(h)]);
subplot(222)
HdB = 20*log10(abs(fft(h,length(X_p_c_f))));
plot(f,fftshift(HdB),'k');
xlabel('频率[Hz]'); ylabel('频率响应 H[dB]');%频率响应
axis([f([1 end]) -100 0]);
subplot(223)
[pdf_x_p_c_f,bin] = hist(abs(x_b_c_f(nn)),50);
bar(bin,pdf_x_p_c_f/sum(pdf_x_p_c_f),'k');
title(['限幅和滤波后的基带信号, CR=' num2str(CR)]);
xlabel('|x|'); ylabel('pdf');
subplot(224)
XdB_b_c_f = 20*log10(abs(fft(x_b_c_f)));
plot(f,fftshift(XdB_b_c_f)-max(XdB_b_c_f),'k');
xlabel('频率[Hz]'); ylabel('PSD[dB]'); axis([f([1 end]) -100 0]);

仿真结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:由于官方删除了modem.pskmod、modem.qammod等函数(在高版本matlab中已无法运行这些函数),我对mapper函数做了修改,从而出现了比较大的缺陷,原mapper()函数的功能是 “如果给定N,那么生成N个2^b-PSK/QAM随即调制符号;否则,为[0,2 ^ b - 1]生成2 ^ b-PSK/QAM符号” ,原mapper函数见文章末尾,而这里直接暴力的进行QPSK调制,没有考虑多种情况。

function [modulated_symbols,Mod] = mapper(b,N)%mapper.m
%如果给定N,那么生成N个2^-PSK/QAM随机调制符号
A=1;
M=2^b;%调制阶数
Mod='QPSK';
modulated_symbols = pskmod(randi([0 M-1],N,1),M,pi/M)*A;
end
%-------------------------------------------------------
function y=add_CP(x,Ncp)%add_CP.m
% 添加循环前缀
y = [x(:,end-Ncp+1:end) x];
end
%-------------------------------------------------------
function [x_clipped,sigma]=clipping(x,CL,sigma)%clipping.m
% 
if nargin<3
  x_mean=mean(x); x_dev=x-x_mean; sigma=sqrt(x_dev*x_dev'/length(x));
end
CL = CL*sigma;
x_clipped = x;  
ind = find(abs(x)>CL); % Indices to clip
x_clipped(ind) = x(ind)./abs(x(ind))*CL;
end
%--------------------------------------------------------
function [xt, time] = IFFT_oversampling(X,N,L)% oversampling.m
% 过采样
if nargin<3,  L=1;  end

NL=N*L; T=1/NL; time = [0:T:1-T];  X = X(:).';
xt = L*ifft([X(1:N/2)  zeros(1,NL-N)  X(N/2+1:end)], NL);
end
%---------------------------------------------------------

原mapper函数如下:

function [modulated_symbols,Mod] = mapper(b,N)% mapper.m
% If N is given, it generates a block of N random 2^b-PSK/QAM modulated symbols.
% Otherwise, it generates a block of 2^b-PSK/QAM modulated symbols for [0:2^b-1].

%MIMO-OFDM Wireless Communications with MATLAB㈢   Yong Soo Cho, Jaekwon Kim, Won Young Yang and Chung G. Kang
%2010 John Wiley & Sons (Asia) Pte Ltd

M=2^b; % Modulation order or Alphabet (Symbol) size
if b==1, Mod='BPSK'; A=1; mod_object=modem.pskmod('M',M);
 elseif b==2, Mod='QPSK';  A=1;
      mod_object=modem.pskmod('M',M,'PhaseOffset',pi/4);
 else Mod=[num2str(2^b) 'QAM']; Es=1; A=sqrt(3/2/(M-1)*Es); 
      mod_object=modem.qammod('M',M,'SymbolOrder','gray');   
end
if nargin==2 % generates a block of N random 2^b-PSK/QAM modulated symbols 
  modulated_symbols = A*modulate(mod_object,randint(1,N,M));
 else
  modulated_symbols = A*modulate(mod_object,[0:M-1]);
end
end

come from《MIMO-OFDM无线通信技术及MATLAB实现》

  • 3
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmallC1oud

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值