求高手帮助 用 matlab 做 OFDM的限幅法降低PAPR值 的源码 得出CCDF曲线

求高手帮助 用 matlab 做 OFDM的限幅法降低PAPR值 的源码 得出CCDF曲线,第1张

我也在做这个 很是头疼 我找的一个程序 你看能不能帮弯悉歼助你吧 希望可以交流

clear all

close all

c1=128

n1=10000

Fs=100

MM=1:.1:13 % CCDF的门限值埋冲

ccdf1=zeros(1,121)

ccdf2=zeros(1,121)

for i=1:n1

x(:,1)=randsrc(c1,1,[+1 -1 +3 -3])

x(:,2)=randsrc(c1,1,[+1 -1 +3 -3])

y1=squeeze(x)

a=amodce(y1,Fs,'qam') % QAM modulated information

y2=a.'

z1=[y2(1:c1/2),zeros(1,3*c1),y2(c1/2+1:c1)] % 4 oversample

w1=ifft(z1)

w1=w1*c1

x2=(abs(w1)).^2

m1=mean(x2)

v1=max(x2)

papr(i)=10*log10(v1/m1)

y3=abs(w1)

CR=1.4

A=CR*sqrt(2)*std(w1) % CR=Amax/sqrt(Pin) Pin:the input power of the ofdm signal before clipping

w2=w1

for h=1:4*c1

if y3(h)>A

w2(h)=A*w1(h)/y3(h)

end

end

x3=(abs(w2)).^2

m2=mean(x3)

v2=max(x3)

papr0(i)=10*log10(v2/m2)

for j=1:121

if papr(i)>MM(j)

ccdf1(j)=ccdf1(j)+1

end

if papr0(i)>MM(j)

ccdf2(j)=ccdf2(j)+1

end

end

end

[c,d]=butter(6,0.5)

w3=filter(c,d,w2)

MM=1:.1:13

ccdf0=ccdf1./n1

ccdf3=ccdf2./n1

semilogy(MM,ccdf0,'b',MM,ccdf3,'r'陆亩)

xlabel('PAPR门限值/dB')ylabel('CCDF')

legend('clipping前','clipping后',2)

title('clipping的CCDF曲线比较')

grid on

%SLM 方法的CCDF

clear all

close all

clc

c1=128

n1=1000

MM=8

NN=4:.1:10%CCDF的门限值

ccdf0=zeros(1,61)

ccdf1=ccdf0

for k=1:c1

p=randsrc(1,c1,[+1,-1,+1j,-1j])

p1(k,:)=p

%x=2*pi*(k-1)/返谨128

%p(k)=cos(x)+i*sin(x)

end

for j=1:n1

a=(-1+2*round(rand(c1,1))).'+1i*(-1+2*round(rand(c1,1))).'%QPSK映射

w1=ifft(a)%ofdm调制

w1=w1*c1

x1=(abs(w1)).^2

m1=mean(x1)

v1=max(x1)

papr0(j)=10*log10(v1/m1)%峰均吵世羡比定义

for k=1:MM %slm的循环次升拍数

%p=randsrc(1,c1,[+1,-1,+j,-j])

%p1=p.^k

y3=a.*p1(k,:)%信号序列和相位序列相乘

w2=ifft(y3)

w2=w2*c1

x2=(abs(w2)).^2

m2=mean(x2)

v2=max(x2)

papr3(j,k)=10*log10(v2/m2)

papr1(k)=10*log10(v2/m2)

end

papr2(j)=min(papr1)%最小序列

for l=1:60

if papr0(j)>NN(l)

ccdf0(l)=ccdf0(l)+1

end

if papr2(j)>NN(l)

ccdf1(l)=ccdf1(l)+1

end

end

end

ccdf2=ccdf0./n1

ccdf3=ccdf1./n1

% NN=4:.1:10

semilogy(NN,ccdf2,'r',NN,ccdf3,'b')

title('SLM方法PAPR的CCDF曲线')

xlabel('PAPR(dB)'),ylabel('互补累积分布函数CCDF')

legend('未使用SLM','使用SLM后',2)

用hold on就可以了

【按理说第五个得到的应该是1,为什么改不了】看不懂你的这句肢稿话——第五个是指哪个?“改不了”是什么意思?

很可能是因为符号运算内核导致的。我在几个不同的版本里面扰饥李做了测试,对于MuPad内核的版本缓迟(2008b之后),都不能求解;而对于Maple内核的版本(2008a之前),6.5版中int函数求不出显式解,后续计算失败,而在2007b中,可以得到

>>pretty(solve(diff(g,v)))

[0]

[ ]

[ 1/21/2 ]

[ 2(m k t)]

[ --------------- ]

[m]

[ ]

[ 1/21/2]

[ 2(m k t) ]

[- ---------------]

[ m ]

>>n=2eval(simple(eval(b)))

ans =

1.0000

>>n=3pretty(simple(eval(b)))

1/2 1/2

2(m k t pi)

2 ------------------

m pi

>>n=4pretty(eval(simple(eval(b^0.5))))

1/2 /k t\1/2

3|---|

\ m /

其中n=2的那一行应该就是你说的“第五个”吧


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12459302.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存