📄 demodulation_soft.m
字号:
function output_frame = demodulation_soft(input_modu, index)
% demodulation for IEEE802.11a
% Input: input_modu, complex values representing constellation points
% index
% Output: output_frame, output bit stream (data unit is one bit)
% In this version, increase the quatilization levels into 8.
% note: Matlab index starts from 1
QAM_input_I = real(input_modu);
QAM_input_Q = imag(input_modu);
output_frame = zeros(1,length(input_modu)*index);
switch index
case 1,
BPSK_Demodu_I = zeros(1,17);
BPSK_Demodu_I(3:17) = [1:15];
row_temp = find(QAM_input_I <= -1);
QAM_input_I(row_temp) = -1;
row_temp = find(QAM_input_I >= 1);
QAM_input_I(row_temp) = 1;
BPSK_index = ceil(QAM_input_I*8) + 9;
output_frame = BPSK_Demodu_I(BPSK_index);
case 2,
QPSK_Demodu_IQ = zeros(17,1);
QPSK_Demodu_IQ(3:17) = [1:15]';
row_temp = find(QAM_input_I<-1);
QAM_input_I(row_temp) = -1;
row_temp = find(QAM_input_I>1);
QAM_input_I(row_temp) = 1;
row_temp = find(QAM_input_Q<-1);
QAM_input_Q(row_temp) = -1;
row_temp = find(QAM_input_Q>1);
QAM_input_Q(row_temp) = 1;
QPSK_I_index = ceil(QAM_input_I*8) + 9;
QPSK_Q_index = ceil(QAM_input_Q*8) + 9;
output_frame = [QPSK_Demodu_IQ(QPSK_I_index),QPSK_Demodu_IQ(QPSK_Q_index)]';
case 4,
QAM_16_Demodu_IQ = zeros(49,2);
QAM_16_Demodu_IQ(19:32,1) = [1:14]';
QAM_16_Demodu_IQ(33:49,1) = 15;
QAM_16_Demodu_IQ(3:16,2) = [1:14]';
QAM_16_Demodu_IQ(17:34,2) = 15;
QAM_16_Demodu_IQ(35:48,2) = [14:-1:1]';
row_temp = find(QAM_input_I<-3);
QAM_input_I(row_temp) = -3;
row_temp = find(QAM_input_I>3);
QAM_input_I(row_temp) = 3;
row_temp = find(QAM_input_Q<-3);
QAM_input_Q(row_temp) = -3;
row_temp = find(QAM_input_Q>3);
QAM_input_Q(row_temp) = 3;
QAM_I_index = ceil(QAM_input_I*8) + 25;
QAM_Q_index = ceil(QAM_input_Q*8) + 25;
output_frame = [QAM_16_Demodu_IQ(QAM_I_index,:),QAM_16_Demodu_IQ(QAM_Q_index,:)]';
case 6,
%bit0
QAM_64_Demodu_IQ = zeros(113,3);
QAM_64_Demodu_IQ(51:64,1) = [1:14]';
QAM_64_Demodu_IQ(65:113,1) = 15;
%bit1
QAM_64_Demodu_IQ(19:32,2) = [1:14]';
QAM_64_Demodu_IQ(33:82,2) = 15;
QAM_64_Demodu_IQ(83:96,2) = [14:-1:1]';
%bit2
QAM_64_Demodu_IQ(3:16,3) = [1:14]';
QAM_64_Demodu_IQ(17:34,3) = 15;
QAM_64_Demodu_IQ(35:48,3) = [14:-1:1]';
QAM_64_Demodu_IQ(67:80,3) = [1:14]';
QAM_64_Demodu_IQ(81:98,3) = 15;
QAM_64_Demodu_IQ(99:112,3) = [14:-1:1]';
row_temp = find(QAM_input_I<-7);
QAM_input_I(row_temp) = -7;
row_temp = find(QAM_input_I>7);
QAM_input_I(row_temp) = 7;
row_temp = find(QAM_input_Q<-7);
QAM_input_Q(row_temp) = -7;
row_temp = find(QAM_input_Q>7);
QAM_input_Q(row_temp) = 7;
QAM_I_index = ceil(QAM_input_I*8) + 57;
QAM_Q_index = ceil(QAM_input_Q*8) + 57;
output_frame = [QAM_64_Demodu_IQ(QAM_I_index,:),QAM_64_Demodu_IQ(QAM_Q_index,:)]';
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -