没有合适的资源?快使用搜索试试~ 我知道了~
Matlab语言写的PCM_ASK_FSK_DPSK通信系统

温馨提示


试读
20页
PCM编码,FSK,ASK,DPSK的调制与解调。有助于大家理解通信系统。代码用MATLAB编写。
资源推荐
资源详情
资源评论



















通信原理实验课上写的代码,PCM 部分参考了网络部分的资源,做了些改变。基本上包含
了 PCM 编码,FSK,ASK,DPSK 的调制与解调。有助于大家理解通信系统。代码用
MATLAB 编写,希望大家能够多提意见。
Email: jackafx@126.com
欢迎大家多提意见
实验一:
1)
t = 0:0.001:2; % give ten time units
FS = 4;
ts = 0:1/FS:2;
Signal = sin(2*pi*t) + 0.5*cos(4*pi*t); % give a singn signal
Sign_m = sin(2*pi*ts) + 0.5*cos(4*pi*ts);
figure
subplot(3,1,1)
plot(t,Signal);
title('sin(2*pi*t) + 0.5*cos(4*pi*t)');
subplot(3,1,2)
stem(ts,Sign_m);
title('4HZ 采样波形');
subplot(3,1,3);
plot(ts,Sign_m);
title('抽样序列回复出的原始信号');
grid;
运行后图形如下:

2)
%===========================Pule Code
Modulation===========================
%jackvs 2009-5-8
%====================================================================
% >>>>>>>>>>>>>>>>>>>>>>Initial Part<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
%====================================================================
clear;
A = 4; % chage the amplitude, you will get different figures
t = 0:0.001:1; % give ten time units
x = 0 : 0.001 : 1;
Signal_m = A * sin(2*pi*x); % give a singn signal
subplot(2,1,1);
plot(t,Signal_m);
title('Input SIN Singal');
grid;
%====================================================================
% >>>>>>>>>>>>>>>>>>>>>>PCM Encoding<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
%====================================================================

Is = round(2048 * (Signal_m/10)); % Convert the data
Len = length(Is); % Get the lenght of the Code vertor
Code = zeros(Len,8);
%---------------------------------The Polarity Code-----------------------------------
for i = 1:Len
if(Is(i) > 0)
Code(i,1) = 1;
end
end
%----------------------------------段落码----------------------------------
Signal = abs(Is);
for i = 1:Len
sign_temp = Signal(i);
%- 一个 for 循环可以解决问题了
for j = 0 : 7
sign_temp = sign_temp / 2;
if sign_temp < 8
break;
end
end
bin_temp = dec2bin(j,3);
temp = num2str(bin_temp, 3);
Code(i,2) = bin2dec(temp(1));
Code(i,3) = bin2dec(temp(2));
Code(i,4) = bin2dec(temp(3));
end
% ---------------------------------段内码---------------------------------
Start_Level = [0,16,32,64,128,256,512,1024]; %段落起点电平
Quan_Interval = [1,1,2,4,8,16,32,64]; %段落量化间隔
ParagraphN = zeros(1,Len);
for i = 1:Len
ParagraphN(i) = Code(i,2)*4 + Code(i,3)*2 + Code(i,4) + 1; %确定在第几段,但这样是
不行滴,中间会有问题
end
for i = 1:Len
ZeltaLevel = Signal(i) - Start_Level(ParagraphN(i)); %减去其实电平之后的电压
Cur_LHJG = Quan_Interval(ParagraphN(i));
dec_temp = ZeltaLevel/Cur_LHJG;
bin_temp = dec2bin(dec_temp,4);
temp = num2str(bin_temp,4);
Code(i,5) = bin2dec(temp(1));
Code(i,6) = bin2dec(temp(2));

Code(i,7) = bin2dec(temp(3));
Code(i,8) = bin2dec(temp(4));
end
%====================================================================
===
% >>>>>>>>>>>>>>>>>>>>>>>>>>>>coding part<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
%====================================================================
===
Quan_Unit = zeros(1,Len);
Quan_Value = zeros(1,Len);
Mark = zeros(1,Len);
Signal_trans = zeros(1,Len);
for i = 1:Len
ParagraphN(i) = Code(i,2)*4 + Code(i,3)*2 + Code(i,4) + 1;
Quan_Unit(i) = Code(i,5)*8 + Code(i,6)*4 + Code(i,7)*2 + Code(i,8);
Mark(i) = Start_Level(ParagraphN(i));
Quan_Value(i) = Quan_Interval(ParagraphN(i));
sign = 1;
if(Code(i,1) == 0)
sign = -1;
end
Signal_trans(i) = sign * (Mark(i) + Quan_Value(i) * Quan_Unit(i));
end
for i = 1:Len
Signal_trans(i) = 10 * (Signal_trans(i)/2048);
end
subplot(2,1,2);
plot(t,Signal_trans);
title('PCM Coding Signal');
grid;
%===================================================================
下图分别是 A 为:2,4,6,8,10 时候的译码恢复的原始图形
剩余19页未读,继续阅读
资源评论

- Openking2014-05-13资源不错,很有帮助,谢谢楼主

glx2007
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
