求高手解释一个matlab程序!!
clear all; clc; close all;
K = 128;
N = 8;
QPSK_Set = [1 -1 j -j];
Phase_Set = [1 -1];
MAX_SYMBOLS = 1e4;%信号越大,PAPR越高
PAPR_Orignal = zeros(1,MAX_SYMBOLS);%一行,10000列
PAPR_SLM = zeros(3,MAX_SYMBOLS);%三行,10000列
X = zeros(N,K);
Index = zeros(N,K);
for nSymbol=1:MAX_SYMBOLS
Index(1,:) = randint(1,K,length(QPSK_Set))+1;%一行,128列。数的取值为1~4 Index矩阵的第一行。 randint(1,K,length(QPSK_Set))为一行,K列。取值为0,1,2,3,因为length(QPSK_Set)的值为4。
Index(2:N,:) = randint(N-1,K,length(Phase_Set))+1;%Index矩阵的第二行到第N行
X(1,:) = QPSK_Set(Index(1,:));
X(2:N,:) = repmat(X(1,:),N-1,1).*Phase_Rot; % Phase roated Frequency domain signal 相位旋转频域信号 repmat(A,m,n)将矩阵A复制m*n块。
x = ifft(X,[],2);
% Time domain signal 时域信号
Signal_Power = abs(x.^2);
Peak_Power = max(Signal_Power,[],2);
Mean_Power = mean(Signal_Power,2);
PAPR_temp = 10*log10(Peak_Power./Mean_Power);
PAPR_Orignal(nSymbol) = PAPR_temp(1);
PAPR_SLM(1,nSymbol) = min(PAPR_temp(1:2));%1~2
PAPR_SLM(2,nSymbol) = min(PAPR_temp(1:4));%1~4
PAPR_SLM(3,nSymbol) = min(PAPR_temp(1:8));%1~8
end
只有一个问题:
for循环里面,MAX_SYMBOLS的变化究竟怎么影响的PAPR_temp = 10*log10(Peak_Power./Mean_Power)的变化?我试了一下,不同的MAX_SYMBOLS取值,导致
PAPR_temp = 10*log10(Peak_Power./Mean_Power)的值不同,进而使得
PAPR_SLM(1,nSymbol)的值不同,但我不知道是怎么影响的,求解释!
答案:从你发现有问题的地方一步步的往上推,肯定是 Signal_Power发生变化了,所以x肯定变了,。。。。最后发现是Index的值变了……
randint函数的功能是Generate matrix of uniformly distributed random integers,因此每次循环的结果都不一样的。
上一个:在matlab里怎么画x*y^2/(x^2 y^4)
下一个:用matlab求积分出现dilog这个函数。?