1 Star 0 Fork 1

jinxuan9712/通信原理

forked from The_flash/通信原理 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
mypcm.m 1.79 KB
一键复制 编辑 原始数据 按行查看 历史
The_flash 提交于 2020-11-21 15:09 . DPSK传输仿真
function code=mypcm(S)
z=sign(S); %判断S的正负
MaxS=max(abs(S)); %求S的最大值
S=abs(S/MaxS); %归一化
Q=2048*S; %量化
code(length(S),8)=0; %代码存储矩阵(全零)
% 段落码判断程序
for i=1:length(S)
if (Q(i)>=128)&&(Q(i)<=2048)
code(i,2)=1; %在第五段与第八段之间,段位码第一位都为"1"
end
if (Q(i)>=32)&&(Q(i)<128)||(Q(i)>=512)&&(Q(i)<=2048)
code(i,3)=1; %在第三四七八段内,段位码第二位为"1"
end
if (Q(i)>=16)&&(Q(i)<32)||(Q(i)>=64)&&(Q(i)<128)||(Q(i)>=256)&&(Q(i)<512)||(Q(i)>=1024)&&(Q(i)<=2048)
code(i,4)=1; %在二四六八段内,段位码第三位为"1"
end
end
N(length(S))=0; %段内码判断程序
for i=1:length(S)
N(i)=bin2dec(num2str(code(i,2:4)))+1; %找到code位于第几段
end
a=[0,16,32,64,128,256,512,1024]; %量化间隔
b=[1,1,2,4,8,16,32,64]; %除以16,得到每段的最小量化间隔
for i=1:length(S)
q=ceil((Q(i)-a(N(i)))/b(N(i))); %求出在段内的位置
if q==0
code(i,(5:8))=[0,0,0,0]; %如果输入为零则输出"0"
else k=num2str(dec2bin(q-1,4)); %编码段内码为二进制
code(i,5)=str2num(k(1));
code(i,6)=str2num(k(2));
code(i,7)=str2num(k(3));
code(i,8)=str2num(k(4));
end
if z(i)>0
code(i,1)=1;
elseif z(i)<0
code(i,1)=0;
end %符号位的判断
end
code = reshape(code', 1, []);
end
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Matlab
1
https://gitee.com/jinxuan9712/communication-principle.git
git@gitee.com:jinxuan9712/communication-principle.git
jinxuan9712
communication-principle
通信原理
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385