⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prs.m

📁 数字音频信号的调制与解调的源码程序.可保证声音信号怒失真输出
💻 M
字号:
%PRS发生器,产生一个标准的PRS(with guard interval)
%注意:k',i,n等参数,都有1536个,产生的Zk也是1536个,
%下标为1-1536,中间的769号元素本来应该是0,在OFDM的时
%侯舍弃掉,不过我还是用以往的方法,求表时立即舍弃

%求k',i,n的值 matlab没有k',用k1代替
for k=1:1536
    if k>=1 & k<=32
        k1(k)=1;
        i1(k)=0;
        n(k)=1;
    elseif k>=33 & k<=64
        k1(k)=33;
        i1(k)=1;
        n(k)=2;
    elseif k>=65 & k<=96
        k1(k)=65;
        i1(k)=2;
        n(k)=0;
    elseif k>=97 & k<=128
        k1(k)=97;
        i1(k)=3;
        n(k)=1;
    elseif k>=129 & k<=160
        k1(k)=129;
        i1(k)=0;
        n(k)=3;
    elseif k>=161 & k<=192
        k1(k)=161;
        i1(k)=1;
        n(k)=2;
    elseif k>=193 & k<=224
        k1(k)=193;
        i1(k)=2;
        n(k)=2;
    elseif k>=225 & k<=256
        k1(k)=225;
        i1(k)=3;
        n(k)=3;
    elseif k>=257 & k<=288
        k1(k)=257;
        i1(k)=0;
        n(k)=2;
    elseif k>=289 & k<=320
        k1(k)=289;
        i1(k)=1;
        n(k)=1;
    elseif k>=321 & k<=352
        k1(k)=321;
        i1(k)=2;
        n(k)=2;
    elseif k>=353 & k<=384
        k1(k)=353;
        i1(k)=3;
        n(k)=3;
    elseif k>=385 & k<=416
        k1(k)=385;
        i1(k)=0;
        n(k)=1;
    elseif k>=417 & k<=448
        k1(k)=417;
        i1(k)=1;
        n(k)=2;
    elseif k>=449 & k<=480
        k1(k)=449;
        i1(k)=2;
        n(k)=3;
    elseif k>=481 & k<=512
        k1(k)=481;
        i1(k)=3;
        n(k)=3;
    elseif k>=513 & k<=544
        k1(k)=513;
        i1(k)=0;
        n(k)=2;
    elseif k>=545 & k<=576
        k1(k)=545;
        i1(k)=1;
        n(k)=2;
    elseif k>=577 & k<=608
        k1(k)=577;
        i1(k)=2;
        n(k)=2;
    elseif k>=609 & k<=640
        k1(k)=609;
        i1(k)=3;
        n(k)=1;
    elseif k>=641 & k<=672
        k1(k)=641;
        i1(k)=0;
        n(k)=1;
    elseif k>=673 & k<=704
        k1(k)=673;
        i1(k)=1;
        n(k)=3;
    elseif k>=705 & k<=736
        k1(k)=705;
        i1(k)=2;
        n(k)=1;
    elseif k>=737 & k<=768
        k1(k)=737;
        i1(k)=3;
        n(k)=2;
    elseif k>=769 & k<=800
        k1(k)=769;
        i1(k)=0;
        n(k)=3;    
    elseif k>=801 & k<=832
        k1(k)=801;
        i1(k)=3;
        n(k)=1;
    elseif k>=833 & k<=864
        k1(k)=833;
        i1(k)=2;
        n(k)=1;
    elseif k>=865 & k<=896
        k1(k)=865;
        i1(k)=1;
        n(k)=1;
    elseif k>=897 & k<=928
        k1(k)=897;
        i1(k)=0;
        n(k)=2;
    elseif k>=929 & k<=960
        k1(k)=929;
        i1(k)=3;
        n(k)=2;
    elseif k>=961 & k<=992
        k1(k)=961;
        i1(k)=2;
        n(k)=1;
    elseif k>=993 & k<=1024
        k1(k)=993;
        i1(k)=1;
        n(k)=0;
    elseif k>=1025 & k<=1056
        k1(k)=1025;
        i1(k)=0;
        n(k)=2;
    elseif k>=1057 & k<=1088
        k1(k)=1057;
        i1(k)=3;
        n(k)=2;
    elseif k>=1089 & k<=1120
        k1(k)=1089;
        i1(k)=2;
        n(k)=3;
    elseif k>=1121 & k<=1152
        k1(k)=1121;
        i1(k)=1;
        n(k)=3;
    elseif k>=1153 & k<=1184
        k1(k)=1153;
        i1(k)=0;
        n(k)=0;
    elseif k>=1185 & k<=1216
        k1(k)=1185;
        i1(k)=3;
        n(k)=2;
    elseif k>=1217 & k<=1248
        k1(k)=1217;
        i1(k)=2;
        n(k)=1;
    elseif k>=1249 & k<=1280
        k1(k)=1249;
        i1(k)=1;
        n(k)=3;
    elseif k>=1281 & k<=1312
        k1(k)=1281;
        i1(k)=0;
        n(k)=3;
    elseif k>=1313 & k<=1344
        k1(k)=1313;
        i1(k)=3;
        n(k)=3;
    elseif k>=1345 & k<=1376
        k1(k)=1345;
        i1(k)=2;
        n(k)=3;
    elseif k>=1377 & k<=1408
        k1(k)=1377;
        i1(k)=1;
        n(k)=0;
    elseif k>=1409 & k<=1440
        k1(k)=1409;
        i1(k)=0;
        n(k)=3;
    elseif k>=1441 & k<=1472
        k1(k)=1441;
        i1(k)=3;
        n(k)=0;
    elseif k>=1473 & k<=1504
        k1(k)=1473;
        i1(k)=2;
        n(k)=1;
    else%if k>=1505 & k<=1536
        k1(k)=1505;
        i1(k)=1;
        n(k)=1;     
    end
end

%建立hi,j的矩阵,注意到matlab行列标不能为0,因此i,j自动各加1,变为第1,2,3,4,行、列
h=[0 2 0 0 0 0 1 1 2 0 0 0 2 2 1 1 0 2 0 0 0 0 1 1 2 0 0 0 2 2 1 1; 
   0 3 2 3 0 1 3 0 2 1 2 3 2 3 3 0 0 3 2 3 0 1 3 0 2 1 2 3 2 3 3 0;
   0 0 0 2 0 2 1 3 2 2 0 2 2 0 1 3 0 0 0 2 0 2 1 3 2 2 0 2 2 0 1 3;
   0 1 2 1 0 3 3 2 2 3 2 1 2 1 3 2 0 1 2 1 0 3 3 2 2 3 2 1 2 1 3 2]

%定义p(k),用来表示(hi,k-k1 +n)
for k=1:1536
    p(k)=h(i1(k)+1,k-k1(k)+1)+n(k);
    k=k+1;
end

%PRS的1536个信号点Zk
for k=1:1536
    Zk(k)=cos(p(k)*pi/2)+sin(p(k)*pi/2)*i
end

%OFDM调制器输入端,1536个信号点,前768个和后768个互换位置
%再补上512个0,凑足2048个点的Zkf,以备ifft
for i_zk=1:2048
    if i_zk<=768
    Zkf(i_zk)=Zk(i_zk+768);
elseif i_zk>=1281
    Zkf(i_zk)=Zk(i_zk-1280);
else Zkf(i_zk)=0;
    end
end

%IFFT
Zkt=ifft(Zkf);

%adding guard interval 得到最终的信号symbol prs_t
for i_Zprs=1:2552
   if i_Zprs<=504
       PRS(i_Zprs)=Zkt(i_Zprs+1544);
   else PRS(i_Zprs)=Zkt(i_Zprs-504);
   end 
       i_Zprs=i_Zprs+1;
end
save('PRS.mat','PRS');


⌨️ 快捷键说明

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