📄 msk_noise_c2.m
字号:
%MSK调制,差分解调方法二
clear all
close all
%--------------------------------------------------------------------------
%参数设置
data_len = 10000; %码元个数
sample_number = 8; %采样个数
Rb = 24000; %码元速率
fc = 96000; %载波频率
%**************************************************************************
%--------------------------------------------------------------------------
%随机产生传输信号
data=rand_binary(data_len);
%**************************************************************************
%--------------------------------------------------------------------------
%MSK基带调制
[signal_out,I_out,Q_out] = mod_msk(data,data_len,sample_number,Rb);
%**************************************************************************
%--------------------------------------------------------------------------
%中频搬移
multi = fc/Rb;
I_temp=interp(I_out,multi);
Q_temp=interp(Q_out,multi);
Fs=fc*sample_number;
t=1/Fs:1/Fs:length(I_temp)*1/Fs;
signal_i=I_temp.*cos(2*pi*fc*t);
signal_q=Q_temp.*sin(2*pi*fc*t);
signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);
%**************************************************************************
%--------------------------------------------------------------------------
%加噪声
for SNR = 0:8
signal_mod1 = awgn(signal_mod,SNR);
%--------------------------------------------------------------------------
%去载波
N=300; % 滤波器的阶数为(N+1)
F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;
A=[1,1,0,0];
lpf=firls(N,F,A);
[amp_lpf,w]=freqz(lpf);
I_dem=signal_mod1.*cos(2*pi*fc*t)*2;
I_dem=conv(I_dem,lpf);
I_dem=I_dem(N/2+1:N/2+length(I_temp));
Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;
Q_dem=conv(Q_dem,lpf);
Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));
I_dem_out=zeros(1,length(I_dem)/multi); % 抽取
Q_dem_out=zeros(1,length(Q_dem)/multi);
for i=1:length(I_dem_out)
I_dem_out(i)=I_dem(multi*(i-1)+1);
Q_dem_out(i)=Q_dem(multi*(i-1)+1);
end;
%**************************************************************************
%--------------------------------------------------------------------------
%差分解调
demod_data = zeros(1,data_len);
demod_data(1) = Q_dem_out(sample_number);
for i = 2:2:data_len
demod_data(i) = -I_dem_out(i*sample_number)*Q_dem_out((i-1)*sample_number);
end
for i = 3:2:data_len
demod_data(i) = Q_dem_out(i*sample_number)*I_dem_out((i-1)*sample_number);
end
%**************************************************************************
%--------------------------------------------------------------------------
%判决
demod_data = demod_data>0;
demod_data = 2*demod_data-1;
%**************************************************************************
%--------------------------------------------------------------------------
%计算误码率
[num,ber(SNR+1)]=symerr(demod_data,data);
%**************************************************************************
end
%**************************************************************************
%--------------------------------------------------------------------------
%误码率曲线
semilogy([0:8],ber,'r*');
%**************************************************************************
%--------------------------------------------------------------------------
%误码率理论值
snr = 0:0.1:8;
for i = 1:length(snr)
snr1(1,i) = 10^(snr(1,i)/10);
ps(1,i) = 1/2 * erfc(sqrt(snr1(1,i)));
pe(1,i) = 2 * ps(1,i);
end
hold on
semilogy([0:.1:8],pe);
%**************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -