📄 tx_modulate.m
字号:
% 这是一个调制的函数,理解它对各种调制方法起到促进作用;
% 本程序的基带信号到调制是很好的例子;
function mod_symbols = tx_modulate(bits_in, modulation)
full_len = length(bits_in);
% BPSK modulation
% findstr(modulation, 'BPSK')表示在modulation中找到BPSK;
if ~isempty(findstr(modulation, 'BPSK'))
% Angle [pi/4 -3*pi/4] corresponds to
% Gray code vector [0 1], respectively.
% generates BPSK symbols
% 这仅是选择相位,没有考虑频率问题;
table=exp(j*[0 -pi]);
% Gray code mapping pattern for BPSK symbols
% 把上面table的值翻转了一下;
table=table([1 0]+1);
% bits_in是输入的基带信号;
inp=bits_in;
% maps transmitted bits into BPSK symbols
% inp+1的取值在2,1之间,完成映射,选择相位;
mod_symbols=table(inp+1);
% QPSK modulation
% 下面是 QPSK 调制
elseif ~isempty(findstr(modulation, 'QPSK'))
% Angle [pi/4 3*pi/4 -3*pi/4 -pi/4] corresponds to
% Gray code vector [00 10 11 01], respectively.
% generates QPSK symbols
% 有 4 种相位;
table=exp(j*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi]);
% Gray code mapping pattern for QPSK symbols
table=table([0 1 3 2]+1);
inp=reshape(bits_in,2,full_len/2);
% maps transmitted bits into QPSK symbols
mod_symbols=table([2 1]*inp+1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 16-QAM modulation
% 下面是 16-QAM 调制
elseif ~isempty(findstr(modulation, '16QAM'))
% generates 16QAM symbols
m=1;
% k是实轴,l是虚轴;
for k=-3:2:3
for l=-3:2:3
table(m) = (k+j*l)/sqrt(10); % power normalization
m=m+1;
end;
end;
% Gray code mapping pattern for 8-PSK symbols
% 有16种情况;
table=table([0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10]+1);
inp=reshape(bits_in,4,full_len/4);
% maps transmitted bits into 16QAM symbols
% 施以不同的权重;
mod_symbols=table([8 4 2 1]*inp+1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 64-QAM modulation
elseif ~isempty(findstr(modulation, '64QAM'))
% generates 64QAM symbols
m=1;
% k是实轴,l是虚轴;
for k=-7:2:7
for l=-7:2:7
table(m) = (k+j*l)/sqrt(42); % power normalization
m=m+1;
end;
end;
table=table([[ 0 1 3 2 7 6 4 5]...
8+[ 0 1 3 2 7 6 4 5]...
24+[ 0 1 3 2 7 6 4 5]...
16+[ 0 1 3 2 7 6 4 5]...
56+[ 0 1 3 2 7 6 4 5]...
48+[ 0 1 3 2 7 6 4 5]...
32+[ 0 1 3 2 7 6 4 5]...
40+[ 0 1 3 2 7 6 4 5]]+1);
inp=reshape(bits_in,6,full_len/6);
% maps transmitted bits into 64QAM symbol
mod_symbols=table([32 16 8 4 2 1]*inp+1);
else
error('Unimplemented modulation');
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -