📄 duiou.m
字号:
function out_code = duiou(f,d,code_dec);
%对偶频带法产生宽间隔跳频序列
% clear;
% clc;
%生成频隙集合
% f = 0:16;
%间隔宽度
% d = 3;
%频隙数目
q = length(f);
temp = floor(q/2);
pow = nextpow2(temp);
if(2.^pow>temp)
pow = pow-1;
end
%确定频带F1和F2
% F1 = 0:(floor(q/2)-1);
% F2 = (q-floor(q/2)):f(end);
F1 = 0:(2.^pow-1);
F2 =(q-2.^pow):(q-1);
%建立对偶频隙,第一行为F1中的频隙,第二行为与之对应的F2中的频隙
corresponding_table = [F1;F2];
%根据参数选取选择合适的码字
% load code_dec31;
% code_dec = code_dec31;%进行符号转换,便于选择不同码字,不必修改下面程序。
%下面的算法中隐含code_dec和F1一一对应.即0:length(code_dec) == F1
%生成宽间隔序列
for i = 1:size(code_dec,1)
%当前跳频的频带
%标记窄点
narrow_tag = zeros(1,size(code_dec,2));
for index = 2:size(code_dec,2)
if(abs(code_dec(i,index)-code_dec(i,index-1))<(d+1))
narrow_tag(index-1) = 1;
end
end
if(abs(code_dec(i,index)-code_dec(i,1))<(d+1))
narrow_tag(end) = 1;
end
%判断窄点个数是否满足要求
if(mod(sum(narrow_tag),2) == 0)%不满足窄点个数要求
wide_index = find(narrow_tag == 0);
narrow_tag(wide_index(1)) = 1;
end
now_row = 1;%行标志用于选取频带:1选择F1,2选择F2
now_col = 1;%用于选择code_dec所对应的列
S_wide(i,1) = code_dec(i,1);
for j = 2:(2*size(code_dec,2))
%判断当前位置的点是否是窄点
if(narrow_tag(now_col) == 1)
%如果是窄点,进行频带跳变,并且列下标变化
if now_row == 1
now_row = 2;
else
now_row =1;
end
now_col = now_col+1;
if(now_col > size(code_dec,2))
now_col = 1;
end
else
%如果不是窄点,只是列下标变化
now_col = now_col+1;
if(now_col > size(code_dec,2))
now_col = 1;
end
end
%由code_dec(i,now_col)选取corresponding_table中的列索引
col = code_dec(i,now_col)+1;
if(col>length(F1))
col = 1;
end
S_wide(i,j) = corresponding_table(now_row,col);
end
end
out_code =S_wide;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -