number_ofdm_signal=50; %Number of ofdm symbol for one loop 250
SNR_dB=[0 5 10 15 20 25 30]; % SNR per bit, i.e. Eb/N0, in dB
% SNR_dB=30;
ls_err_ber_64QAM=zeros(1,length(SNR_dB));
lmmse_err_ber=zeros(1,length(SNR_dB));
lr_lmmse_err_ber=zeros(1,length(SNR_dB));
DFT_err_ber=zeros(1,length(SNR_dB));
lmmse_mse=zeros(1,length(SNR_dB));
ls_mse=zeros(1,length(SNR_dB));
DFT_mse=zeros(1,length(SNR_dB));
% 2. MODULATION MODE
BPSK = 1; %modulation type is bpsk
QPSK = 2; %modulation type is qpsk
QAM16 = 3; %modulation type is 16qam
QAM64=4;
mod_type = QAM64;
% mod_type = QAM16;
% mod_type = QPSK;
% mod_type = BPSK;
% 4. PILOT MODE
BLOCK=1;
COMB=2;
pilot_type=BLOCK;
pilot_insert_flag=0;
%pilot_type=COMB;
nloop=3; %Number of simulation loops
% ---------------------------------------------
% B: % +++++ TRANSMITTER +++++
% ---------------------------------------------
for i=1:length(SNR_dB) %每个SNR点上仿真若干次
ls_error_bit=0;
lmmse_error_bit=0;
DFT_error_bit=0;
total_bit_num=0;
for iii=1:nloop
% 1. chose the modulation type
[serildata,para,fftlen]=bitcreate(mod_type,number_ofdm_signal);
% dSource=modulation(serildata,64);
[dSource,pilot_symbol_bit,symbol_bit] = baseMapping(serildata,mod_type); %按照不同的方式进行调制
dSource1=reshape(dSource,12800,2);%mod_type=16qam
% dSource1=reshape(dSource,3200,2);%mod_type=qpsk
a=dSource1(:,1);
b=dSource1(:,2);
figure(1);
plot(dSource1,'*r');%绘制16QAM星座图
axis([-8 8 -8 8]);
title('64QAM调制后星座图');
ylabel('Q');
xlabel('I');
% title('QPSK调制后星座图');
% title('16QAM调制后星座图');
grid on
% 2. convert serial data to parall data 串并转换
paradata1=reshape(a,fftlen,number_ofdm_signal);
paradata2=reshape(b,fftlen,number_ofdm_signal);
% 3. insert pilot 插入导频
% c=hadamard(1024);%16QAM
% c=hadamard(128);%QPSK
c=randsrc(1536,2,[0,1;0.5,0.5]);%64QAM
pilot_symbol_bit1=c(:,1);
pilot_symbol_bit2=c(:,2);%插入的已知导频
[insert_pilot_out1,pilot_num,pilot_sequence1,pilot_space]=insert_pilot(pilot_symbol_bit1,paradata1,pilot_type,mod_type);
[insert_pilot_out2,pilot_num,pilot_sequence2,pilot_space]=insert_pilot(pilot_symbol_bit2,paradata2,pilot_type,mod_type);
% 4. IFFT transform
ifft_out11=ifft(insert_pilot_out1);
ifft_out22=ifft(insert_pilot_out2);
% Nomalize the powerp;
ifft_out1=ifft_out11.*sqrt(fftlen);
ifft_out2=ifft_out22.*sqrt(fftlen);
% 5. Guard intervals were inserted to eliminate ISI caused by multipath fading 插入保护间隔以消除符号间干扰
guard_internal= (fftlen*1/8); %Length of guard internal
ofdm_guard_interval_out1=guard_interval_insert(ifft_out1,fftlen,guard_internal);
ofdm_guard_interval_out2=guard_interval_insert(ifft_out2,fftlen,guard_internal);
% 6. convert paradata into seridata 并串转换
ofdm_guard_interval_out_serial1=reshape(ofdm_guard_interval_out1,1,(fftlen+guard_internal)*(number_ofdm_signal+pilot_num));
ofdm_guard_interval_out_serial2=reshape(ofdm_guard_interval_out2,1,(fftlen+guard_internal)*(number_ofdm_signal+pilot_num));
% ---------------------------------------------
% C: % +++++ CHANNEL +++++
% ---------------------------------------------
% 1. multipath Rayleigh fading and doppler spread channel
%假设功率延迟谱服从负指数分布~exp(-t/trms),trms=(1/4)*cp时长;
%t在0~cp时长上均匀分布
%若cp时长为16e-6s,可以取5径延迟如下
multipath_number=6;
delay=[0 0.2e-6 0.5e-6 1.6e-6 2.3e-6 5e-6];
%delay=[0 2e-6 4e-6 8e-6 12e-6];
% delay=[0 0.77e-6 1.92e-6 6.14e-6 8.83e-6 19.2e-6];
%trms=4e-6; %trms为多径平均延迟
trms=8e-6; %trms为多径平均延迟
var_pow=10*log10(exp(-delay/trms)); %var_pow是各条多径的功率系数
% doppler_frequency=20;
doppler_frequency=5;%最大doppler频率为5Hz
t_interval=1e-6;%采样间隔为1us
counter=300000;%各径信道的采样点间隔,应该大于信道采样点数。由以上条件现在信道采样点数
count_begin=(iii-1)*(20*counter);%每次仿真信道采样的开始位置
trms_1=trms/t_interval;
t_max=32e-6/t_interval;
%信道采样点数,每个调制符号采一个点
passchan_ofdm_symbol1=multipath_chann(ofdm_guard_interval_out_serial1,multipath_number,var_pow,delay,doppler_frequency,t_interval,counter,count_begin);
passchan_ofdm_symbol2=multipath_chann(ofdm_guard_interval_out_serial2,multipath_number,var_pow,delay,doppler_frequency,t_interval,counter,count_begin);
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %Contaminating the transmitted data with AWGN
% % spow=sum(ich3.^qch3)./number_ofdm_signal./para;
% % attn=0.5*spow*sr/br*10.^(-EbN0/10);
% % attn=sqrt(attn) + eps;
% % [ich4,qch4]=comb(ich3,qch3,attn);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2. add AWGN to multipath-signal
snr=10^(SNR_dB(i)/10);
% code_power1=norm(ofdm_guard_interval_out_serial1)^2/(length(ofdm_guard_interval_out_serial1)); %信号的符号功率 =var(passchan_ofdm_symbol)
% code_power2=norm(ofdm_guard_interval_out_serial2)^2/(length(ofdm_guard_interval_out_serial2));
code_power1=norm(passchan_ofdm_symbol1)^2/(length(passchan_ofdm_symbol1)); %信号的符号功率 =var(passchan_ofdm_symbol)
code_power2=norm(passchan_ofdm_symbol2)^2/(length(passchan_ofdm_symbol2));
sgma1=sqrt(code_power1/(2*snr));%sgma如何计算,与当前SNR和信号平均能量有关系
sgma2=sqrt(code_power2/(2*snr));
[receive_ofdm_symbol1,awgn1]=addnoise(passchan_ofdm_symbol1,sgma1); % use randn
[receive_ofdm_symbol2,awgn2]=addnoise(passchan_ofdm_symbol2,sgma2);
% [receive_ofdm_symbol1,awgn1]=addnoise(ofdm_guard_interval_out_serial1,sgma1); % use randn
% [receive_ofdm_symbol2,awgn2]=addnoise(ofdm_guard_interval_out_serial2,sgma2);
% ---------------------------------------------
% D: % +++++ RECEIVER +++++
% ---------------------------------------------
% 1. The guard interval was removed from received signals ich4 and qch4
%remove函数里包含了串并转换
guard_interval_remove_out1=guard_interval_remove(receive_ofdm_symbol1,(fftlen+guard_internal),guard_internal,(number_ofdm_signal+pilot_num));
guard_interval_remove_out2=guard_interval_remove(receive_ofdm_symbol2,(fftlen+guard_internal),guard_internal,(number_ofdm_signal+pilot_num));
% 2. FFT transform
fft_out11=fft(guard_interval_remove_out1);
fft_out22=fft(guard_interval_remove_out2);
% nomalize the power
fft_out1=fft_out11./sqrt(fftlen);
fft_out2=fft_out22./sqrt(fftlen);
% 3. channel estimation and signal detection
% LS and zero-force
ls_zf_detect_sig1=ls_estimation(fft_out1,pilot_space,pilot_sequence1,pilot_num);%导频间隔pilot_space=5,pilot_sequence1为导频序列,导频个数pilot_num=10
ls_zf_detect_sig2=ls_estimation(fft_out2,pilot_space,pilot_sequence2,pilot_num);
% LMMSE and zero-force
lmmse_zf_detect_sig1=lmmse_estimation(fft_out1,pilot_space,pilot_sequence1,pilot_num,trms_1,t_max,snr);
lmmse_zf_detect_sig2=lmmse_estimation(fft_out2,pilot_space,pilot_sequence2,pilot_num,trms_1,t_max,snr);
%low_rank_lmmse and zero-force
[low_rank_lmmse_sig,dlamdaa,dlamda_sor]=lr_lmmse_estimation(fft_out1,pilot_space,pilot_sequence1,pilot_num,trms_1,t_max,snr,guard_internal);
% transform domain: DFT
[DFT_sig1,LL,A2]=DFT_estimation(fft_out1,pilot_space,pilot_sequenc
多径瑞丽信道调制BPSK、QPSK、16QAM、64QAM
5星 · 超过95%的资源 需积分: 44 40 浏览量
2022-04-28
22:28:25
上传
评论 6
收藏 15KB 7Z 举报
‘学生’
- 粉丝: 5
- 资源: 6
最新资源
- 基于STM32F103C8T6单片机蓄电池在线监测系统主板硬件(原理图+PCB)工程文件.zip
- mysql大纲资料.txt
- c++大纲资料.txt
- 效率工具bat脚本实现日志提取
- MyBatis 中动态 SQL 的示例
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论5