%%%%%%%%%%%%%%%%% 主程序参数改动平台 %%%%%%%%%%%
% 参数设置
% B 信号总带宽
% Bandwidth 系统信道带宽
% f0 第一个子信道中心频率(除零频率)
% fc 载波频率
% fn 携带信息的子信道个数
% bit 各个子波携带的bit数
% loop_cnt 一帧内码元数
% loop 帧数
% max_amp 子波最大幅度
% df 频域采样间隔,频率分辨率
% khd_n 抗混叠滤波器阶数
%% -------------------------------------------------------
clc;
clear;
close all;
randn('state',sum(100*clock));
rand('state',sum(100*clock));
% % ---------------------- 参数设置 ----------------------
% Rayleigh信道最大时延扩展固定
% OFDM取循环前缀为最大时延的4倍,符号周期为循环前缀的6倍
% NFDM参考OFDM,取固定符号周期,与OFDM符号周期相同
% 如果符号周期过大,加入导频序列时,信号在一个符号周期内,幅度变化过大,所以无法估计
% 如果符号周期过小,不能对抗多径干扰
tau=[0.0e-6,0.05e-6,0.11e-6,0.17e-6,0.29e-6,0.31e-6]; % 相对时间
tau_max=0.31e-6; % 最大时延
T=sum(tau)/length(tau); % 多径时延的平均值
delta_tau=T; % rms时延扩展
Bc=1/(2*pi*delta_tau); % 相关带宽 bandwidth>Bc and f0<<Bc
Tc=1/10; % 相关时间1/fd
Bandwidth=8e6; % 系统信道信号带宽
%Guard_low=1; % 低频率的保护带宽子载波数
%Guard_high=1; % 高频率的保护带宽子载波数
%Zero_f=1; % 零频子载波数
Tg=0.8e-6;
f0=0.15e6;
Tb=1/f0;
Ts=Tb+Tg; %ofdm符号时间
fn=48;
%fn_down=3;
%fn_up=22;
for i=1:fn
fc(i)=i*f0;
end
max_amp=4.5;
fs=6*max(fc); % sample frequence
dt=1/fs;
l_intval=floor(Tg/dt); % 保护间隔的点数
gilen=floor(1.0e-6/dt);
bit=[5*ones(1,fn/2),5*ones(1,fn/2)];
min_step = max_amp*2./(2.^bit-1);
% % -------------------- 参数计算 ------------------------
sample0=fs/f0;
sample=fs./fc;
B=f0*fn; %15312.5e3;
% % ------------------------- 参数 ---------------------------
cnt=10; % 每次仿真循环次数,即帧数
loop_cnt=20; % 每帧码元数
pilot_inter=5;
khd_n = 4;
e=0;
ee = 0;
ee1 = 0;
ee2 = 0;
% % -------------------- 信道参数设置 ------------------------
% % ---------------------- 6条路径 ---------------------------
% rayleigh信道的包络情况,根据《通信系统仿真-建模,方法和技术》p510
%给出室内办公室测试环境
%相对时间us:〔0.0 0.05 0.11 0.17 0.29 0.31〕
%平均相对功率dB:〔0.0 -3.0 -10.0 -18.0 -26.0 -32.0〕
tstp = dt;
itau = [0,floor(0.05e-6/tstp),floor(0.11e-6/tstp),floor(0.17e-6/tstp),floor(0.29e-6/tstp),floor(0.31e-6/tstp)];
dlvl = [0.0,3.0,10.0,18.0,26.0,32.0];
n0=[6,7,6,7,6,7];
th1=[0.0,0.0,0.0,0.0,0.0,0.0];
itnd0=(loop_cnt*floor(Tb/dt))*3;
itnd1=[1000,2000,3000,4000,5000,6000];
now1=6;
fd=10;
flat=1;
% % ---------------------- 滤波器参数 ------------------------
%w1=B_down/(fs/2);
wn=Bandwidth/(fs/2);
%wn = [w1,w2]; % 滤波器截止频率
n_f=90; % 阶数N 波形预处理
h=fir1(n_f,wn,'low');
% % ----------------------- 产生载波 -------------------------
[s1,s2,G1,G2,normG1,normG2]=Generate(fn,sample0,sample,dt);
% % ---------------------- 产生导频信息波 --------------------
%spilot=4*[2,4,7,4,2,zeros(1,gilen)];
spilot=4*[20,zeros(1,gilen)];
l_pilot=length(spilot);
% % --------------------- 傅立叶变换长度 ---------------------
fftlen=2*loop_cnt*(l_pilot+floor(Ts/dt));
df=fs/fftlen;
f=0:df:fs-df;
% % ------------------- 抗混叠滤波器 -------------------------
[khd,KHD] = DesignKHD(khd_n,B,fs,fftlen);
% % ---------------------- 发送波形 --------------------------
for loop=1:cnt
[ss,data1,data2,amp1,amp2]=Modulate_amp(s1,s2,sample0,bit,max_amp,fn,loop_cnt,dt);
[ss_cp]=insert_cp(ss,loop_cnt,sample0,l_intval,dt);
[frame,pilot_num,tcp_l]=insert_pilot(ss_cp,spilot,loop_cnt,pilot_inter,sample0,l_intval,l_pilot,dt);
% % ---------------- 发送信号的平均功率 -----------------------
spower=norm(frame)^2/length(frame);
spower_dBm(loop)=10*log10(spower)+30;
% % ------------------- 发送波形的频谱 -------------------------
% Frame=fft(frame,fftlen);
%figure,plot(f,abs(Frame)),grid on;
%figure,plot(f,20*log10(abs(Frame))),grid on;
% % ------------------ 发送信号的PSD --------------------------
[pxxs,ff] = pwelch(frame,[],[],fftlen,fs,'twosided'); %%% PSD
[aver_psd,s_power]=signal_power(pxxs,B,fs);
aver_psd_dBm(loop)=10*log10(aver_psd)+30; %%% dBm
% Maxpsd=max(10*log10(pxxs)+30);
% figure,plot(ff,10*log10(pxxs)+30,'b'),grid on
% % -------------- 发送信号的峰值均值比 -----------------------
PAR(loop) = 10*log10(sqrt((max(frame.^2))/(sum(frame.^2)/length(frame))));
% % -------------- 频率选择性衰落信道 -------------------------
[ifade,qfade]=sefade(frame,zeros(1,length(frame)),itau,dlvl,th1,n0,itnd1,now1,length(frame),tstp,fd,flat);
itnd1 = itnd1+ itnd0;%计数器更新
% % ------------------ 接收信号的PSD --------------------------
[pxxi,ff] = pwelch(ifade,[],[],fftlen,fs,'twosided'); %%% PSD
% [aver_psdi,s_poweri]=signal_power(pxxi,B,fs);
% aver_psdi_dBm(loop)=10*log10(aver_psdi)+30; %%% dBm
% s_poweri=2*s_poweri;
%
% figure,plot(ff,10*log10(pxxi)+30,'b'),grid on
% % ------------------- 高斯白噪声 --------------------------
awgnPsd=-60; % dBm
[ifade_n,awgnPower,awgn,nn]=add_awgn(ifade,awgnPsd,fs,h,n_f);
% % ------------------- 计算信噪比 --------------------------
spow=norm(ifade)^2/length(ifade);
npow=var(nn);
snr=spow/npow;
SNR(loop)=10*log10(snr);
% % ------------------ 过抗混叠滤波器 -------------------------
ifade_khd=conv(ifade_n,khd);
yn=ifade_khd;
% % -------------- 信道估计及去除保护间隔 --------------------
[cutce_frame,r_spilot]=cut_pilot(yn,loop_cnt,pilot_num,pilot_inter,tcp_l,l_pilot,dt);
[ls_frame, Channel]=ls_estimation(cutce_frame,spilot,r_spilot,loop_cnt,pilot_num,pilot_inter,tcp_l,l_pilot,ss_cp);
[cutcp_frame]=cut_cp(ls_frame,loop_cnt,sample0,tcp_l,dt);
% % ------------------------- 解调 ------------------------------
[xx1,xx2]=Demodulate_amp(cutcp_frame,s1,s2,sample0,loop_cnt,fn,max_amp,min_step,G1,G2);
% % --------------------- 比较求误码 ---------------------------
for k = 1:loop_cnt
e1=data1(k,:)-xx1(:,k)';
[number1,ratio]=biterr(data1(k,:),xx1(:,k)');
ee1 = ee1+number1;
e2=data2(k,:)-xx2(:,k)';
[number2,ratio]=biterr(data2(k,:),xx2(:,k)');
ee2 = ee2+number2;
% e=e+length(find(e1))+length(find(e2));
ee = ee1+ee2;
end
end
averPsd_dBm=sum(aver_psd_dBm)/length(aver_psd_dBm); %% 单位dBm
averspower_dBm=sum(spower_dBm)/length(spower_dBm); % 发送信号的平均power
T_baud=loop_cnt*Ts+pilot_num*l_pilot*dt; %% 仿真一帧的时间
T_itnd0=itnd0*dt; %% 更新时间
awgn_power=var(nn); %% 加入信道的噪声的功率
aver_PAR=sum(PAR)/length(PAR); %% 平均PAR
aver_SNR=sum(SNR)/length(SNR);
SNR_min=min(SNR);
SNR_max=max(SNR);
Psd_dBm_min=min(aver_psd_dBm);
spower_dBm_min=min(spower_dBm);
bitrate=loop_cnt*2*sum(bit)/((length(frame))*dt); %% 传输速率
bit_all=cnt*loop_cnt*2*sum(bit); %% 传输的总的比特数
ber=ee/bit_all; %% 误比特率
bitrate
bit_all
ber
fprintf(1,'\nsubordinate channel number is %d\n',fn);
fprintf(1,'\nsampling frequency is %4.2fMHz\n',fs
评论1