琉璃紫玥 2022-05-15 00:41
浏览 32
已结题

在matlab做ofdm系统峰均功率比抑制,系统误码率基本不随信噪比变化是什么原因啊

做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)
运行结果及报错内容

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月23日
    • 创建了问题 5月15日

    悬赏问题

    • ¥15 有偿求苍穹外卖环境配置
    • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
    • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
    • ¥15 clousx6整点报时指令怎么写
    • ¥30 远程帮我安装软件及库文件
    • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
    • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
    • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
    • ¥15 Android studio 无法定位adb是什么问题?
    • ¥15 C#连接不上服务器,