做ofdm峰均功率比抑制,用的限幅滤波的方法,画误码率和信噪比曲线的时候发现误码率及其稳定,跟信噪比变换没有关系,也可以说是信噪比较低的时候误码率也很低,想知道有可能是什么原因造成的
clc; close all;clear
carrier=32;
numb_ifft=100;
numb_cp=25;
symb_ofdm=100;
bit_symb=2;
symbol_rate=250000;
bit_rate=symbol_rate.*bit_symb;
sum_bit=carrier*symb_ofdm*bit_symb;
MAX_SYMBOLS= symb_ofdm;
ITERATE_NUM=2;
PAPR_Orignal = zeros(1,MAX_SYMBOLS); %%记录每个OFDM符号的PAPR,原始的
PAPR_NS = zeros(ITERATE_NUM,MAX_SYMBOLS);
signal=rand(1,sum_bit)<0.5;
figure(1)%完成待传数据
subplot(1,1,1)
plot(signal)
xlabel('time')
ylabel('amplitude')
grid on
m = 3;
n = 2^m-1; %定义码长
k = n-m; %信息位长
p=cyclpoly(n,k); %循环码生成多项式,n=7,k=4
code = encode(signal,n,k,'cyclic',p); %编码函数,对信号进行差错编码
signal_p=reshape(code,sum_bit*7/(8*symb_ofdm),symb_ofdm*2);%实现串并转换
for k=1:(sum_bit*7/(8*symb_ofdm))
for n=1:bit_symb*symb_ofdm/2
imp=signal_p(k,2*n);
rlp=signal_p(k,2*n-1);
if(imp==0)&&(rlp==0)
d(k,n)=exp(1i*5*pi/4);
end
if(rlp==0)&&(imp==1)
d(k,n)=exp(1i*3*pi/4);
end
if(rlp==1)&&(imp==0)
d(k,n)=exp(1i*7*pi/4);
end
if(rlp==1)&&(imp==1)
d(k,n)=exp(1i*pi/4);
end
end
end
sci=real(d);
scq=imag(d);
figure(2)
for m=1:bit_symb*symb_ofdm/2
scatter(sci(:,m),scq(:,m),'r')
hold on
grid on %****完成QPSK调制****
end
QPSKdata=reshape(d,1,(sum_bit*7/8));
% 降低峰均比
K = length(QPSKdata); % SIZE OF OFDM Symbol
IF = 2; % Interpolation factor (Oversampling factor)
Nf = K*IF; % SIZE OF FFT
CR=4;
ITERATE_NUM = 2; %限幅次数
Index = randi(length(QPSKdata)-1,1,K)+1; %随机生成QPSK的相位的序号,比如1表示1,2表示-1,3表示j
X =QPSKdata(Index(1,:)); %原始信号的相位(频域)
XX = [X(1:K/2) zeros(1,Nf-K) X(K/2+1:K)];
x = ifft(XX,[],2); % 时域的信号xk
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
d0=reshape(x,sum_bit*7/(4*symb_ofdm),symb_ofdm);
ifft_d0=ifft(d0,numb_ifft);
ifft_rld0=real(ifft_d0);
ifft_imd0=imag(ifft_d0);
ifft_d0_con=ifft_d0';
cp_rld0=[ifft_rld0(numb_ifft-numb_cp+1:100,:);ifft_rld0];
cp_imd0=[ifft_imd0(numb_ifft-numb_cp+1:100,:);ifft_imd0];
d1=cp_rld0+1i*cp_imd0;
d1_length=numb_ifft+numb_cp;
d1=reshape(d1,1,d1_length*symb_ofdm);
figure(3)
plot(0:d1_length*symb_ofdm-1,d1)
ylabel('amplitude')
xlabel('time')
grid on
for nIter=1:ITERATE_NUM
% 限幅
x_orig=x;%延迟匹配原始信号
x_tmp = x(Signal_Power>0.7*Peak_Power); %削波限幅
x_tmp = sqrt(0.7*Peak_Power)*x_tmp./abs(x_tmp);
x(Signal_Power>0.7*Peak_Power) = x_tmp;
nois=x_orig-x;%匹配延时减去一次限幅,噪声信号
% > 噪声程序滤波器
XX = fft(nois,[],2);
XX(K/2+(1:Nf-K)) = zeros(1,Nf-K); %滤波
noise_filter = ifft(XX,[],2);
x=x_orig-noise_filter ;%从原始信号中,消去限幅信号
% 计算NS算法后的PAPR
dout=[x(1:K/2) x(K/2+K+1:2*K)];
Signal_Power = abs(x.^2);
Peak_Power = max(Signal_Power,[],2);
Mean_Power = mean(Signal_Power,2);
%PAPR_NS(nIter,nSymbol) = 10*log10(Peak_Power./Mean_Power);
end
houd=reshape(dout,sum_bit*7/(8*symb_ofdm),symb_ofdm);
ifft_signal=ifft(houd,numb_ifft);
ifft_rlsig=real(ifft_signal);
ifft_imsig=imag(ifft_signal);
ifft_signal_con=ifft_signal';
cp_rlsignal=[ifft_rlsig(numb_ifft-numb_cp+1:100,:);ifft_rlsig];
cp_imsignal=[ifft_imsig(numb_ifft-numb_cp+1:100,:);ifft_imsig];
d2=cp_rlsignal+1i*cp_imsignal;
d2_length=numb_ifft+numb_cp;
signal_s=reshape(d2,1,d2_length*symb_ofdm);
figure(4)
plot(0:d2_length*symb_ofdm-1,signal_s)
axis([0 14000 -3e-03 3e-03]);
grid on
ylabel('amplitude')
xlabel('time') %****完成并串转换***
err = zeros(1,30);
for SNR_dB=1:30 %定义信噪比
SNR=10^(SNR_dB/10); %定义线性信噪比
Ps=1; %发射功率
Pn=Ps/SNR; %噪声方差
z=sqrt(Pn/2)*(randn(size(QPSKdata))+randn(size(QPSKdata))*1i); %生成白噪声
h=1; %AWGN信道下,信道增益h=1
cp_signal_s=h*QPSKdata+z; %基带接受信号
cp_rlsignal = real(cp_signal_s);
cp_imsignal = imag(cp_signal_s);
cp_s = cp_rlsignal;
cp_i = cp_imsignal;
for h=1:symb_ofdm*(sum_bit*7/(8*symb_ofdm))/2
if(cp_s(1,h)<0)
cp_s(1,h)=0;
else
cp_s(1,h)=1;
end
if(cp_i(1,h)<0)
cp_i(1,h)=0;
else
cp_i(1,h)=1;
end
end
for h=1:symb_ofdm*(sum_bit*7/(8*symb_ofdm))
if(cp_rlsignal(1,h)<0)
cp_rlsignal(1,h)=0;
else
cp_rlsignal(1,h)=1;
end
if(cp_imsignal(1,h)<0)
cp_imsignal(1,h)=0;
else
cp_imsignal(1,h)=1;
end
cp_signal_r(1,2*h-1)=cp_rlsignal(1,h);
cp_signal_r(1,2*h)=cp_imsignal(1,h);
end
%*****完成QPSK解调*****
sumerr=0; %统计误码率
for k=1:sum_bit
if signal(k)==cp_signal_r(k)
else
sumerr=sumerr+1;
end
end
err(SNR_dB)=sumerr/(sum_bit*MAX_SYMBOLS)
end
figure(5)
plot(1:30,err)
运行结果及报错内容