kindex.m

来自「数字音频信号的调制与解调的源码程序.可保证声音信号怒失真输出」· M 代码 · 共 49 行

M
49
字号
% freq interleaver
% 先求得freq index 'k'
%注意,matlab矩阵元素标号是从1开始的,所以共为1-2048个点
temp(1)=0;
for i_f=2:2048
temp(i_f)=mod((13*temp(i_f-1)+511),2048);
i_f=i_f+1;
end

%产生dn
i_f=1;
j_f=1;
for i_f=1:2048
    if (temp(i_f)>=256)&(temp(i_f)<=1023)
    dn(j_f)=temp(i_f);
    j_f=j_f+1;
elseif (temp(i_f)>=1025)&(temp(i_f)<=1792)
    dn(j_f)=temp(i_f);
    j_f=j_f+1;
    end
    i_f=i_f+1;
end

%产生freq index 'k'
for i_k=1:1536
    k(i_k)=dn(i_k)-255;
    if k(i_k)>769
        k(i_k)=k(i_k)-1;
    end
    i_k=i_k+1;
end
save('k.mat','k');

%现在根据已知的k,找寻一种更简单的freq interleaving的方法
%matrix_k是正变换阵,根据k中的数据,对1536*1536的单位阵施加相应列变换得到
%将待处理的数据右乘matrix_k,根据线性代数的有关理论,即得插值后的新数据
%逆变换时只需再右剩matrix_k的逆矩阵即可

%下面这一块,只要运行一次就好

%先定义空矩阵matrix_k和1536阶单位阵matrix_eye
matrix_k=[];
matrix_eye=eye(1536);
%根据插值表k,对matrix_eye施加相应列变换,构造matrix_k,即为频率插值正变换阵
for i_matrixk=1:1536
   matrix_k=[matrix_k,matrix_eye(:,k(i_matrixk))]; 
end
%求matrix_k的逆矩阵:matrix_k_inv,用来做频率插值的恢复:de_interleaving
matrix_k_inv=inv(matrix_k);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?