matlab dmodce,吧里有没有大神可以教我怎么改dmodce函数,用的matlab2012a版本
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
clear all;clc;close all;
N=128;%子載波數或IFFT長度
V=4;%PTS方法分組數,可選擇2組,4組,8組,若16組需相應修改程序
MAX_SYMBOLS=1e4;%循環數,也就是OFDM符號個數
M_ary=4;%星座映射進制數
Phase_Num=4;%旋轉相位的相位數
%產生旋轉相位矩陣
for i=1:Phase_Num
Phase_Set=exp(j*2*pi/Phase_Num);
end
Phase=[];%存旋轉相位所有可能組合
%分兩組時,旋轉相位所有可能組合。若旋轉相位數為4,則共有4^2個組合。當V=2時使用
for b1=1:length(Phase_Set)
for b2=1:length(Phase_Set)
Phase=[Phase;[Phase_Set(b1) Phase_Set(b2)]];
end
end
%MAX_SYMBOLS個OFDM符號頻域數據產生
length_data=N*MAX_SYMBOLS;%發送的總數據符號數,每個數據符號可以是4PSK或16QAM
Base_MOD_Set=[];%存放星座映射后的數據
source_data=randint(length_data,log2(M_ary));
%隨機產生log2(M_ary)二進制數
symbols=bi2de(source_data);%將log2(M_ary)二進制數合并為多進制數
MOD_Symbol=dmodce(symbols,1,1,'qask',M_ary);%進行星座映射
%將N*MAX_SYMBOLS個串行數據轉換為MAX_SYMBOLS個N點并行數據,作為MAX_SYMBOLS個OFDM符號的頻域數據
m=0;
for i=0:MAX_SYMBOLS-1;
MOD_tem=[];
for n=1:N;
MOD_tem=[MOD_tem,MOD_Symbol(i*N+n)];
end;
Base_MOD_Set=[Base_MOD_Set;MOD_tem];
clear MOD_tem;
end;
%進行原OFDM符號與經PTS后的OFDM符號PAPR的CCDF統計
Choose_Len=length(Phase_Set)^V;%旋轉相位所有組合數
PAPR_Orignal=zeros(1,MAX_SYMBOLS);%存放原OFDM信號所有循環的PAPR
PAPR_PTS=zeros(1,MAX_SYMBOLS);%存放原PTS_OFDM信號所有循環的PAPR
for nSymbol=1:MAX_SYMBOLS %循環開始
%對原始OFDM符號
X=Base_MOD_Set(nSymbol,:);
x=ifft(X,[],2); %OFDM調制
Signal_Power=abs(x.^2); %計算功率
Peak_Power=max(Signal_Power,[],2);%計算峰值功率
Mean_Power=mean(Signal_Power,2); %計算平均功率
PAPR_Orignal(nSymbol)=10*log10(Peak_Power./Mean_Power);%計算PAPR
%對經過PTS之后的OFDM符號
%交織分組方式
A=zeros(V,N);
for v=1:V
A(v,v:V:N)=X(v:V:N);
end
%順序分組方式
for v=1:V
A(v,(1+(v-1)*N/V):(N/V+(v-1)*N/V))=...
X((1+(v-1)*N/V):(N/V+(v-1)*N/V));
end
%隨機分組方式
Index=randperm(N);
for v=1:V
A(v,Index(v:V:N))=X(Index(v:N:V));
end
a=ifft(A,[],2); %OFDM調制
min_value=10;
%分組后的數據進行OFDM調制后與旋轉相位相乘,按全舉法搜索最優旋轉相位組合
for n=1:Choose_Len
temp_phase=Phase(n,:).';
temp_max = max(abs(sum(a.*repmat(temp_phase,1,N))));
if temp_max
min_value=temp_max;
Best_n=n;
end
end
%發送最優相位組合信號并計算其PAPR值
aa=sum(a.*repmat(Phase(Best_n,:).',1,N));
Signal_Power=abs(aa.^2);
Peak_Power=max(Signal_Power,[],2);
Mean_Power=mean(Siganl_Power,2);
PAPR_PTS(nSymbol)=10*log10(Peak_Power./Mean_Power);
end
%統計原始OFDM符號與PTS_OFDM符號的CCDF,并畫出其曲線
[cdf1,PAPR1]=ecdf(PAPR_Orignal);
[cdf2,PAPR2]=ecdf(PAPR_PTS);
semilogy(PAPR1,1-cdf1,'-b*',PAPR2,1-cdf2,'-r+')
legend('Orignal','PTS')
title('V=4')
xlabel('PAPR[dB]');
ylabel('CCDF(Pr[PAPR>PAPR0])');
grid on
%存儲各種狀態下的數據,以備比較
data=[PAPR1;1-cdf1];
save PTS_PAPR_.am data -ascii;
總結
以上是生活随笔為你收集整理的matlab dmodce,吧里有没有大神可以教我怎么改dmodce函数,用的matlab2012a版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php fgetcsv 没有环绕符,PH
- 下一篇: 如何用matlab分割颜色,Matlab