注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲PAM、PCM(格雷码)的实现matlab  

2015-02-04 20:07:04|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
% Removing all variables, functions, and MEX-files from memory, leaving the
% workspace empty.
clear all


% Deleting all figures whose handles are not hidden.
close all


% Deleting all figures including those with hidden handles.
close all hidden


% Clearing all input and output from the Command Window display giving us a clean screen.
clc


% Generating the input signal 'm(t)' 

Fs = 8e3;
Te = 0.5; 
N = Te*Fs; %
n = 0:N - 1; t = n/Fs;  
freq1 = 261.625; % C musical note
m = sin(2*pi*freq1*t); % Message signal
sound(m, Fs);

% Defining the count for efficiency.
count = length(m);


% Calculating maximum value of the input signal 'm(t)'.
Mp = max (m) % Mp only conunts for positive amplitude of the signal 


% Setting number of bitsPerSample in a symbol.
bitsPerSample = 8;


% Defining the number of levels of uniform quantization.
nQuantizedLevels = 2^bitsPerSample;


% Calculating the step size of the quantization.
nQantizedInterval = (2*Mp)/nQuantizedLevels % 2 represents ± Mp in amplitude


% Setting the number of samples to be used.
No_Samples = length(m);


% Define the time vector for the calculations.
timeAbscissa = [0:length(m) - 1]/Fs;
idxTime = [1:Fs/64];


% Calculating the bit rate.
bit_rate = Fs*bitsPerSample;


% Quantizing the input signal 'm(t)'.
for k = 1:No_Samples,
    samp_in(k) = m(k);
    quant_in(k) = samp_in(k)/nQantizedInterval;
end


% Indicating the sign of the input signal 'm(t)' and calculating the
% quantized signal 'quant_out'.
signS = sign (m);
quant_level = zeros(size(quant_in));
for i = 1:count
    S(i) = abs (quant_in(i)) + 0.5; % Eq.(9.4-4) 6ed Communication Theory, Chinese
quant_level(i) = (signS(i)*floor(S(i))); 
end

% make 
quant_level(quant_level == 2^(bitsPerSample - 1)) = 2^(bitsPerSample - 1) - 1;

%% Gray encoding
x = quant_level + 2^(bitsPerSample - 1); % x must be a positive value
xGrayCoded_decimal = bin2gray(x, 'PAM', 2^bitsPerSample); % 
xGrayCoded_binary = dec2bin(xGrayCoded_decimal);
disp('transmitted binary stream');

% demostrate PCM binary codes
a = xGrayCoded_binary.';
figure; stairs(str2num(a(:))); xlabel('time, bit'); ylabel('PCM signal'); xlim([0, 100]);
% note: the bit synchronization and frame synchronization are not considered!

disp('received binary stream');
yGrayCoded_decimal = bin2dec(xGrayCoded_binary);
%% Gray decoding
y_decimal = gray2bin(yGrayCoded_decimal, 'PAM', 2^bitsPerSample); % checkpoint: norm(y_decimal.' - x)

quant_level_new = transpose(y_decimal - 2^(bitsPerSample - 1)); % checkpoint: norm(quant_level_new - quant_level)

% ideal PCM output
quant_out =  quant_level_new*nQantizedInterval;
error = m(1:count) - quant_out(1:count);

% Plotting the input signal 'm(t)'.
%figure;
subplot(4,1,1);
plot(timeAbscissa(idxTime), m(idxTime));
title('Message Signal');
xlabel('time, s');
ylabel('m(t), v');
grid on;


% Plotting the quantized signal 'quant_in(t)'.
%figure;
subplot(4,1,2);
stem(timeAbscissa(idxTime), quant_in(idxTime),'r');
title('Quantized Speech Signal');
xlabel('time, s');
ylabel('Levels');
grid on;


% Plotting the PCM signal 's_out(t)'.
%figure;
subplot(4,1,3);
plot(timeAbscissa(idxTime), quant_out(idxTime));
title('PCM Speech Signal');
xlabel('time, s');
ylabel('PC Signal, v');
grid on;


% Plotting the error signal 'error(t)'.
subplot(4,1,4);
plot(timeAbscissa(idxTime), error(idxTime));
title('Error Signal');
xlabel('time, s');
ylabel('Error(t), v');
grid on;




数字通信有两个方面的同步问题:

      一方面是基础的,即如何正确接收每一位,称为位同步。用数字锁相方法,即在接收信号的跳变上升沿产生一个校正脉冲,再和本地端时钟上升沿比较,把差别信息输入计数器,产生一个数量信息去控制分频器,从而产生一个正确的时钟信号。这样每位码元才能够正确接收。
 
另一方面是从内容上来说的,是内容的同步,信息的同步,帧同步。在数字数据中,信息是由一系列二进制代码组合表示的,实际中,通常是由若干个码元组成一个码元块,称为一个"字",由若干个字组成一个数据块,称为"帧",数据帧可以作为数据传输的单位。要正确识别帧的起点对应的码元,再按照数据帧规定的长度接收后续码元,才能正确接收数据帧,此即"帧同步"。
 
    位同步是帧同步的基础,是帧同步的一部分技术。我们说的数据通信的"同步"问题实际上就是"帧同步"。另外,我们常说的同步传输和异步传输,是帧同步的两种不同手段,
 
      通信的开始过程,接受方实际上是在找"帧"的起始,这是通信的目的,位同步是为这个目的服务的。
  评论这张
 
阅读(617)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016