白噪声下OFDM调制解调基带系统仿真
一、实验要求
1、信噪比 2~14dB,步进2dB 2、误码率性能<10-4
3、仿真分析OFDM信号的功率谱特性
二、实验程序流程图和程序
本实验中只进行了OFDM基带的系统设计仿真,分别采用了16QAM和QPSK两种方式进行映射和逆映射,OFDM基带系统程序流程图如图1所示:
二进制数据流16QAM/QPSK映射串并转换IFFT并串转换计算误比特率绘制OFDM信号功率谱高斯噪声二进制数据流16QAM/QPSK逆映射并串转换FFT串并转换
图1 OFDM基带系统程序流程图
实验程序:
1、QPSK映射程序
function [out_message]=QPSK(Sig)
[a1,b1]=find(Sig(:,1)==0&Sig(:,2)==0); out_message(a1)=-1-j; [a2,b2]=find(Sig(:,1)==0&Sig(:,2)==1);out_message(a2)=-1+j; [a3,b3]=find(Sig(:,1)==1&Sig(:,2)==0);out_message(a3)=1-j; [a4,b4]=find(Sig(:,1)==1&Sig(:,2)==1);out_message(a4)=1+j; end
2、QPSK逆映射程序
function [out_symbol,out_bit]=DeQPSK(Sig_noise)
m1=find(angle(Sig_noise)<=pi/2&angle(Sig_noise)>0);
out_symbol(1,m1)=1+j; out_bit(m1,1)=1; out_bit(m1,2)=1;
m2=find(angle(Sig_noise)>pi/2&angle(Sig_noise)<=pi);
out_symbol(1,m2)=-1+j; out_bit(m2,1)=0; out_bit(m2,2)=1;
m3=find(angle(Sig_noise)>-pi&angle(Sig_noise)<=-pi/2);
out_symbol(1,m3)=-1-j; out_bit(m3,1)=0; out_bit(m3,2)=0;
m4=find(angle(Sig_noise)>-pi/2&angle(Sig_noise)<=0);
out_symbol(1,m4)=1-j; out_bit(m4,1)=1; out_bit(m4,2)=0; end
3、复高斯白噪声程序
function [sig_noise,snr_dB] = fu_awgn (Sig,SNR,Num_signal) L_SNR = 10.^(SNR/10); % 转换为线性信噪比 Eb = sum(abs(Sig).^2)/Num_signal; % 每比特的能量 N0 = Eb/L_SNR; % 噪声功率谱密度
noise_R1 = randn(1,length(Sig)); % 实际产生均值为0,方差为1的随机高斯序列,功率谱密度是1
noise_R2 = noise_R1-mean(noise_R1); % 让均值再更接近0
noise_R3 = noise_R2./std(noise_R2); % 标准差归一化 让均值等于0 noise_R = noise_R3*sqrt(N0/2); % 使得功率谱密度是N0/2 noise_I1 = randn(1,length(Sig)); % 实际产生均值为0,方差为1的随机高斯序列,功率谱密度是1
noise_I2 = noise_I1-mean(noise_I1); % 让均值再更接近0
noise_I3 = noise_I2./std(noise_I2); % 标准差归一化 让均值等于0 noise_I = noise_I3*sqrt(N0/2); % 使得功率谱密度是N0/2 x = noise_R + j*noise_I; % 生成复噪声
sig_noise = Sig+x; % 此时加入的就是Eb/N0 snr=sum(abs(Sig).^2)/sum(abs(x).^2);
snr_dB=10*log10(snr); % 实际加入的信噪比SNR end
4、主程序(求误比特率曲线) %% OFDM基带系统 clear all;close all;clc %% 参数设置
N = 256; % fft点数
Num_carriers = 256; % 载波数 length_symbol =10000; % 符号长度 M = 2;
bit_num = Num_carriers*length_symbol*M; % 数据个数 Pe_check = [];
for SNR = 2:2:14 % 输入信噪比 %% 产生基带数据信号 Sig= randi([0 1],1,bit_num); %% QPSK调制
Sig =reshape(Sig,2,bit_num/2)'; %QPSK映射 [out_message]=QPSK(Sig); %% 串并转换
Sig__modulation = reshape(out_message,Num_carriers,length_symbol); %% 插值
interp_Sig_modulation =
[Sig__modulation(1:Num_carriers/2,:);zeros(N-Num_carriers,length_symbol);Sig__modulation(Num_carriers/2+1:Num_carriers,:)]; %% ifft
ifft_message = ifft(interp_Sig_modulation,N); % 求PSD
fft_ps_ifft_message = fftshift(fft(ifft_message,1024)); PSD_message =
10*log10(abs(fft_ps_ifft_message).^2/max(abs(fft_ps_ifft_message).^2)); f1 = (0:length(PSD_message)-1)/length(PSD_message); figure(1)
plot(f1,PSD_message);hold on ;plot(0:1/N:1, 0, 'r*');axis([0 1 -40 0]);xlabel('归一化频率');ylabel('归一化功率');title('OFDM信号功率谱') %% 加入复高斯白噪声
Re_message = reshape(ifft_message,1,N*length_symbol);
[sig_noise,snr_dB] = fu_awgn (Re_message,SNR,length(Re_message)); %% 并串转换
ps_sig_noise = reshape(sig_noise,N,length_symbol); %% fft
fft_Re_message = fft(ps_sig_noise,N); %% 抽值
samp_fft_Re_message =
[fft_Re_message(1:Num_carriers/2,:);fft_Re_message(Num_carriers/2+1:Num_carriers,:)];
%% QPSK解调 samp_fft_Re_message =
reshape(samp_fft_Re_message,1,Num_carriers*length_symbol);
[out_symbol,out_bit]=DeQPSK(samp_fft_Re_message); % QPSK逆映射 [resum,ratio1]=symerr(Sig,out_bit); Pe = ratio1;
Pe_check = [Pe_check,Pe]; end
SNR = 2:2:14; figure
semilogy(SNR,Pe_check,'-kd');xlabel('信噪比/dB');ylabel('误比特率');axis([2 14 1e-6 1]);
5、主程序(绘制功率谱和频谱) %% OFDM基带系统 clear all;close all;clc %% 参数设置
N = 64; % fft点数 Num_carriers = 32; % 载波数 length_symbol =100; % 符号长度 M = 2;
bit_num = Num_carriers*length_symbol*M; % 数据个数 %% 产生基带数据信号 Sig= randi([0 1],1,bit_num); %% QPSK调制
Sig =reshape(Sig,2,bit_num/2)'; %QPSK映射 [Sig_modulation]=QPSK(Sig); %% 串并转换
Sig_modulation = reshape(Sig_modulation,Num_carriers,length_symbol); %% 插值
interp_Sig_modulation_psd =
[Sig_modulation(1:Num_carriers/2,:);zeros(N-Num_carriers,length_symbol);Sig_modulation(Num_carriers/2+1:Num_carriers,:)]; %求功率谱插值
Sig_modulation = [Sig_modulation';zeros(length_symbol,Num_carriers)]; %每隔一个信道插值一个符号长度的0;此时得到的频谱不正交
interp_Sig_modulation = reshape(Sig_modulation,length_symbol,2*Num_carriers)'; %% ifft
ifft_message = ifft(interp_Sig_modulation_psd,N); % 求PSD
fft_ps_ifft_message = fftshift(fft(ifft_message,1024)); PSD_message =
10*log10(abs(fft_ps_ifft_message).^2/max(abs(fft_ps_ifft_message).^2)); f1 = (0:length(PSD_message)-1)/length(PSD_message); figure(1)
plot(f1,PSD_message) hold on
plot(0:1/N:1, 0, 'r*')
axis([0 1 -40 0]);xlabel('归一化频率');ylabel('归一化功率谱');title('OFDM符号功率谱')
%求频谱
fft_ps_ifft_message1 = fftshift(interp_Sig_modulation(:,1),2048); %进行了插值 fft_ps_ifft_message2 = fftshift(Sig_modulation(:,1),2048); %未进行插值 f1 = (0:length(fft_ps_ifft_message1)-1)/length(fft_ps_ifft_message1); f2 = (0:length(fft_ps_ifft_message2)-1)/length(fft_ps_ifft_message2); figure(2) subplot(211)
plot(f1,abs(fft_ps_ifft_message1)/max(abs(fft_ps_ifft_message1)));
axis([0 1 0 1.2]);xlabel('归一化频率');ylabel('归一化频谱');title('一倍插值后的OFDM符号频谱') subplot(212)
plot(f2,abs(fft_ps_ifft_message2)/max(abs(fft_ps_ifft_message2)));
axis([0 1 0 1.2]);xlabel('归一化频率');ylabel('归一化频谱');title('未插值的OFDM符号频谱')
三、实验结果
1、OFDM基带系统误比特曲线