📄 msk_april_21st.asv
字号:
%5_32 基带 数据段仿真程序
clc
clear all
fprintf('begin,%s\n',datestr(now))
%设置相关参数
%%%%%%%%%%%%%%%%%%%%%%%
Fc=70e+6;
Fb=5e+6; %码片速率
Fs=40e+6;
N=1e4; %单次产生数据块个数
Loop = 1e0;
NUM_pulse_snr = 10;
SW_ADD_NOISE = 1; %加噪开关 1:开 0: 关
SW_MULTI = 0; %多径开关 1:加入多径
%%%%%%%%%%%%%%%%%%%%%%%%
%产生PN码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pn_matrix = pn_code;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对PN码进行扩频和采样 基带仿真!!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
NUM_pn = size(pn_matrix,1); %pn码个数
LEN_pn_mod = size(pn_matrix,2) * Fs / Fb; %pn码经调制后的数据长度
len_wave_per_symbol = LEN_pn_mod + LEN_pn_mod * 6.6 / 6.4; %加入保护间隔后数据长度
pn_spread = zeros(NUM_pn,LEN_pn_mod); %存储pn调制后的基带数据
for ii = 1 : NUM_pn
pn_spread(ii,:) = msk_mod_baseband(pn_matrix(ii,:),Fb,Fs);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
jjj = 1;
ber_snr_table = zeros(4,20);
for Eb_No = 0:10
ber_snr_table(1,jjj) = Eb_No;
snr = Eb_No + 10 * log10(5/32)- 10 * log10(Fs/Fb);
snr = ;
ber_snr_table(2,jjj) = Eb_No + 10 * log10(5/32);
num_err_total = 0; %总的误码数
for kk = 1:Loop
%产生信源
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% source=randsrc(N,5,[1,0;0.5,0.5]);%N为信源码元数目
source_origin = randint(1,N*5);
source = reshape(source_origin,5,N);
source_msk_mod = zeros(1,len_wave_per_symbol*N);
source_dec = 16 * source(1,:) + 8 * source(2,:) + 4 * source(3,:) + 2 * source(4,:) + source(5,:);
for k = 1:N
source_msk_mod(1,((k-1)*(len_wave_per_symbol)+1):((k-1)*(len_wave_per_symbol)+LEN_pn_mod)) = pn_spread(source_dec(1,k)+1,:);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加入多径
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if SW_MULTI == 1;
s_multi = chan_multipath(source_msk_mod,Fs,[0 2e-6 3e-6],[0 -3 -6]);
else
s_multi = source_msk_mod;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加噪声
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if SW_ADD_NOISE == 1
linear_snr = 10^(snr/10); %加复噪声
I_signal_power = var(real(s_multi)) + (mean(real(s_multi))).^2;
I_noise_sima = I_signal_power/linear_snr;
I_noise_sima = I_noise_sima * (6.4+6.6) / 6.4;%平均功率只计算传送有用信号的时间
I_noise = randn(1,length(s_multi)) * sqrt(I_noise_sima);
Q_signal_power = var(imag(s_multi)) + (mean(imag(s_multi))).^2;
Q_noise_sima = Q_signal_power/linear_snr;
Q_noise_sima = Q_noise_sima * (6.4+6.6) / 6.4;
Q_noise = randn(1,length(s_multi)) * sqrt(Q_noise_sima);
s_chan = s_multi + I_noise + 1j * Q_noise;
else
s_chan = s_multi;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SNR estimation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xi = zeros(1,NUM_pulse_snr*LEN_pn_mod);
for ii= 1 : NUM_pulse_snr
xi((ii-1)*LEN_pn_mod+1 : ii*LEN_pn_mod) = s_chan((ii-1)*len_wave_per_symbol+1 : (ii-1)*len_wave_per_symbol+LEN_pn_mod);
end
xi_mod2 = real(xi).^2 + imag(xi).^2;
mu = mean(xi_mod2);
sigma2 = var(xi_mod2);
z = sigma2/mu.^2;
snr_estimated = -10 * log10(sqrt(1/(1-z))-1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%数据解调
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
out_bit=zeros(1,N*5);
for iii=1 : N
temp0 = s_chan((iii-1)*len_wave_per_symbol+1 : (iii-1)*len_wave_per_symbol+LEN_pn_mod);
corr = temp0 * pn_spread';
corr_whole=abs(corr);
[aaa,number]=max(corr_whole);
if(1 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 0 0];
elseif(2 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 0 1];
elseif(3 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 1 0];
elseif(4 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 1 1];
elseif(5 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 0 0];
elseif(6 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 0 1];
elseif(7 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 1 0];
elseif(8 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 1 1];
elseif(9 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 0 0];
elseif(10 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 0 1];
elseif(11 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 1 0];
elseif(12 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 1 1];
elseif(13 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 0 0];
elseif(14 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 0 1];
elseif(15 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 1 0];
elseif(16 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 1 1];
elseif(17 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 0 0];
elseif(18 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 0 1];
elseif(19 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 1 0];
elseif(20 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 1 1];
elseif(21 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 0 0];
elseif(22 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 0 1];
elseif(23 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 1 0];
elseif(24 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 1 1];
elseif(25 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 0 0];
elseif(26 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 0 1];
elseif(27 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 1 0];
elseif(28 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 1 1];
elseif(29 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 0 0];
elseif(30 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 0 1];
elseif(31 == number)
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 1 0];
else
out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 1 1];
end
end;
num = sum(abs(source_origin - out_bit));
num_err_total = num + num_err_total;
end
ber = num_err_total /(5*N*Loop);
ber_snr_table(3,jjj) = ber;
ber_snr_table(4,jjj) = num_err_total;
jjj=jjj+1;
fprintf('Eb_No = %d dB, %s\n', Eb_No, datestr(now))
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%画出误码率~信噪比曲线
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure
% hold
semilogy(ber_snr_table(1,:),ber_snr_table(3,:),'o-')
title(['5 expanded to 32 基带数据段仿真 脉冲发送 采样率',num2str(Fs/1e6),'MHZ E_b/N_o'])
xlabel('E_b/N_o')
ylabel('BER')
figure
semilogy(ber_snr_table(2,:),ber_snr_table(3,:),'o-')
title(['5 expanded to 32 基带数据段仿真 脉冲发送 采样率',num2str(Fs/1e6),'MHZ SNR'])
xlabel('SNR')
ylabel('BER')
fprintf('end,%s\n',datestr(now))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -