📄 msk_mod_baseband.m
字号:
function output = msk_mod_baseband(data_src,fb,fs)
% fc : frequence of the carrier
% fb : frequence of the data
% fs : frequence of symple
% SW_TEST = 0;
% if (SW_TEST) % test enable
%
% data_src = [1 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 0 0 0 0]; % the last bit (20th) is 0
% fc = 10e+6; fb = 5e+6; fs = 45e+6;
% end
len_data = length(data_src);
ts = 1/fs; % ts = time sample interplot
% tb = 1/fb;
N = len_data * fs / fb; % the totle number of output signal point
SW_DIFF = 0; % whether to be differential coded
if SW_DIFF == 1; % differential code
c_diff = zeros(1,len_data+1); c_diff(1) = 1; %
for iii = 1 : len_data; c_diff(1,iii+1) = mod(c_diff(1,iii)+data_src(1,iii) , 2); end;
else c_diff = data_src; % not to be differential
end;
% c = c_diff.* 2 - 1; % 0-->(-1); 1-->(+1);
c=c_diff;
% serrial to parrellen
I_temp = zeros(1,len_data); Q_temp = zeros(1,len_data);
if mod(len_data,2) == 0; % the data length is even
I_temp(1,1:2:len_data-1) = c(1,1:2:len_data-1); I_temp(1,2:2:len_data-2) = I_temp(1,3:2:len_data-1); I_temp(1,len_data) = c(1,len_data);
Q_temp(1,1:2:len_data-1) = c(1,2:2:len_data); Q_temp(1,2:2:len_data) = Q_temp(1,1:2:len_data-1);
else %the data length is odd
I_temp(1,1:2:len_data) = c(1,1:2:len_data); I_temp(1,2:2:len_data-1) = I_temp(1,3:2:len_data);
Q_temp(1,1:2:len_data) = c(1,2:2:len_data+1); Q_temp(1,2:2:len_data) = Q_temp(1,1:2:len_data-1);
end;
% Q_temp = -Q_temp; % adjust to be same as "simulink"
% oversample baseband
sam_per_bit = fs/fb; % some little bug to be fixed
% src_data = oversample_same(data_src,sam_per_bit);
I_in = oversample_same(I_temp,sam_per_bit);
Q_in = oversample_same(Q_temp,sam_per_bit);
% modulation
nnn = 1:1:N; ttt = (nnn-1).*ts;
% fb/4 carrier
osc1_i = cos(pi.*ttt.*fb./2); osc1_q = sin(pi.*ttt.*fb./2);
I_fb = I_in .* osc1_i; Q_fb = Q_in .* osc1_q;
output = I_fb + 1j * Q_fb;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -