基于MATLAB的数字基带信号的各种码型的产生

单极性非归零码

单极性非归零码使用电平1来表示二元信息中的“1”,用电平0来表示二元信息中的“0”,电平在整个码元的时间里不变单极性非归零码的优点是实现简单,但由于含有直流分量,对在带限信道中的传输不利,另外当出现连续的0或连续的1时。电平长时间保持一个值,不利于提取时间信息以便获得同步。

function y = snrz(x)

%本函数实现将输入的一段二进制代码编为相应的单极性非归零码输出

%输入x为二进制码,输出y为编出的单极性非归零码

t0 = 300;

t = 0:1/t0:length(x);

for i = 1:length(x)     %计算码元的值

if(x(i) == 1)       %如果信息为1

for j = 1:t0    %改码元对应的点值为1

y((i-1)*t0+j) = 1;

end

else

for j = 1:t0    %反之,信息为0,码元对应点值取0

y((i-1)*t0+j) = 0;

end

end

end

y = [y,x(i)];

M = max(y);

m = min(y);

subplot(2,1,1);

plot(t,y);grid;

axis([0,i,m-0.1,M+0.1]);

%使用title命令标记各码元对应的二元信息
title(‘1 0 0 1 1 0
0 0 0 1 0 1‘);
ylabel(‘单极性非归零码‘);

单极性归零码

单极性归零码输入信息为1时,给出的码元前半时间为1,后半时间为0,输入0则完全相同。单极性归零码部分解决了传输问题,直流分量减小,但遇到连续长0时同样无法给出定时信息。

function y = srz(x)

%本函数实现将输入的一段二进制代码编为相应的单极性归零码输出

%输入x为二进制码,输出y为编出的单极性归零码

t0 = 300;

t = 0:1/t0:length(x);   %给出相应的时间序列

for i = 1:length(x)     %进行码型变换

if(x(i) == 1)       %若输入信息为1

for j = 1:t0/2

y(t0/2*(2*i-2)+j) = 1;  %定义前半时间值为1

y(t0/2*(2*i-1)+j) = 0;  %定义后半时间值为0

end

else

for j = 1:t0/2          %反之,输入信息为0

y(t0*(i-1)+j) = 0;   %定义所有时间值为0

end

end

end

y = [y,x(i)];

M = max(y);

m = min(y);

subplot(2,1,1);

plot(t,y);grid;

axis([0,i,m-0.1,M+0.1]);

%使用title命令标记各码元对应的二元信息
title(‘1 0 0 1 1 0
0 0 0 1 0 1‘);
ylabel(‘单极性归零码‘);

双极性非归零码

%双极性非归零码与单极性非归零码类似,区别仅在于双极性使用电平-1来表示信息0

function y = dnrz(x)

%本函数实现将输入的一段二进制代码编为相应的双极性非归零码输出

%输入x为二进制码,输出y为编出的双极性非归零码

t0 = 300;

t = 0:1/t0:length(x);

for i = 1:length(x)

if(x(i) == 1)

for j = 1:t0

y((i-1)*t0+j) = 1;

end

else

for j = 1:t0

y((i-1)*t0+j) = -1;

end

end

end

y = [y,x(i)];

M = max(y);

m = min(y);

subplot(2,1,1);

plot(t,y);grid;

axis([0,i,m-0.1,M+0.1]);

%使用title命令标记各码元对应的二元信息
title(‘1 0 0 1 1 0
0 0 0 1 0 1‘);
ylabel(‘双极性非归零码‘);

双极性归零码

双极性归零码比较特殊,它使用前半时间1后半时间0来表示信息1;采用前半时间-1后半间0来表示信息0.因此它具有三个电平,严格来说是一种三元码。双极性归零码包含了丰富的时间信息,每一个码元都有一个跳变沿,便于接收方定时。同时对随机信号,信息1和0出现的概率相同,所以此种码元几乎没有直流分量。

function y = drz(x)

%本函数实现将输入的一段二进制代码编为相应的双极性归零码输出

%输入x为二进制码,输出y为编出的双极性归零码

t0 = 300;

t = 0:1/t0:length(x);

for i = 1:length(x)

if(x(i) == 1)

for j = 1:t0/2

y(t0/2*(2*i-2)+j) = 1;  %定义前半时间值为1

y(t0/2*(2*i-1)+j) = 0;  %定义后半时间值为0

end

else

for j = 1:t0/2              %反之,输入信息0

y(t0/2*(2*i-2)+j) = -1; %定义前半时间值为-1

y(t0/2*(2*i-1)+j) = 0;  %定义后半时间值为0

end

end

end

y = [y,x(i)];                       %给序列y加上最后一位,便于作图

M = max(y);

m = min(y);

subplot(2,1,1);

plot(t,y);grid;

axis([0,i,m-0.1,M+0.1]);

AMI码

AMI码全称是传号交替反转码,其编码规则是将消息码的1交替的变换为+1和-1,而0保持不变。

AMI码的优点是没有直流成分,且高低频分量少,能量集中在频率为1/2码速处;编解码电路简单,且可利用传号极性交替这一规律观察误码情况;

AMI码的缺点是当原码出现长连0时,信号电平长时间不跳变,造成提取定时信号的困难。

function y = ami(x)

%本函数实现将输入的一段二进制代码编为相应的AMI码输出

%输入x为二进制码,输出y为编出的AMI码

t0 = 300;

t = 0:1/t0:length(x);

m = 1;  %符号标记

for i = 1:length(x)     %计算码元的值

if(x(i) == 1) m=-m;      %如果信息为1

for j = 1:t0    %改码元对应的点值为1

if(m == -1)

y((i-1)*t0+j) = +1;

else y((i-1)*t0+j) = -1;

end

end

else

for j = 1:t0    %反之,信息为0,码元对应点值取0

y((i-1)*t0+j) = 0;

end

end

end

y = [y,x(i)];

M = max(y);

m = min(y);

subplot(2,1,1);

plot(t,y);grid;

axis([0,i,m-0.1,M+0.1]);

%使用title命令标记各码元对应的二元信息
title(‘1 0 0 1 1 0
0 0 0 1 0 1‘);
ylabel(‘AMI码‘);

本次操作激励t=[1 0 0 1 1 0 0 0 0 1 0 1];

以下是生成的信号波形图:

待更新..........

基于MATLAB的数字基带信号的各种码型的产生

时间: 2024-09-30 05:35:12

基于MATLAB的数字基带信号的各种码型的产生的相关文章

Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之--找出Matlab内置函数中,已经大概的介绍了matlab内置函数在混合编程中的优点,并通过程序找出了matlab中的大部分内置函数,当然更多人关心是如何像我所说得那样,不用直接编译,就直接在C#中调用这些内置函数.本文就带你揭开这些谜团. 声明,这篇文章是需要一点点混合编程基础的,基本概念和过程要懂一点,如果能简单成功混编一个简单的计算或者绘图例子

【原】基于matlab的蓝色车牌定位与识别---绪论

本着对车牌比较感兴趣,自己在课余时间摸索关于车牌的定位与识别,现将自己所做的一些内容整理下,也方便和大家交流. 考虑到车牌的定位涉及到许多外界的因素,因此有必要对车牌照的获取条件进行一些限定: 一.大部分车牌照都是用自己的手机照的,大小在1M左右,距离车牌照距离3m左右.这样保证所获取的车牌照有一定的规律,否则随便一张是无法进行定位的. 二.本次仅针对蓝色车牌,至于其他像黄色,黑色车牌的没有做研究.感兴趣的可以自己找些资料,毕竟要做到全面,工作量还是很大的. 三. 相关的参考资料网上也挺多的,这

Hya.io – 基于 Web 的数字音频工作站

Hya.io 是基于 Web 的音频应用程序,通过 Web MIDI ,音频合成器,音序以及大量的插件来支持硬件 MIDI .您可以添加插件到工作区,将其连接到路由音频,进行播放和实验. HYA 支持 AMD 和 ES6 模块.他们用一个简单的 JSON 对象来描述了插件和一个构造函数.您可以使用各种事件,如 handleMouseOver 和 handleMouseDown 的绑定到 Hya GUI . 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[附源码下载] 精心挑选的优秀jQ

基于MATLAB的多项式数据拟合方法研究-毕业论文

摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立.具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了M

基于MATLAB的腐蚀膨胀算法实现

本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了. 腐蚀 腐蚀是一种消除边界点,使边界向内部收缩的过程.可以用来消除小且无意义的物体.用3X3的结构元

基于matlab的音频波形实时采集显示 v0.1

robj = audiorecorder(44100,16,1); %设置采样频率.采样位数.通道数 recordblocking(robj,1); %采集初步数据(1s长度) rdata = getaudiodata(robj); %获取音频数据 plot(rdata); %绘制波形 axis([1,44100,-0.1,0.1]); %设置固定坐标轴 drawnow %刷新显示 n = 100; %设定后续的采样更新次数,n与m可联合计算后续更新时间长度 m = 0.1; %设定更新间隔,m

基于matlab mex的平面点集按重心逆时针排序算法

基于matlab mex的平面点集按重心逆时针排序算法,可用于求凸集,代码如下: #include <mex.h> #include <mat.h> #include <stdlib.h> #include <vector> #include <algorithm> using namespace std; typedef struct PointF { int id; double x, y; PointF() { id = -1; } Poi

基于jQuery的数字键盘插件

有时,我们需要在网页上使用软键盘.今天,就给大家带来一个基于jQuery的数字键盘插件,除了jQuery,不需要依赖任何文件资源.纯数字键盘,有退格,有清除,不支持输入小数(需要的可以自己改一下,主要是多个小数点就有13个键,不好排列了,呵呵).支持鼠标拖动和触摸拖动,可关闭. 在线演示 1.页面代码 <ul> <li><input type="text" placeholder="手机号码后四位" id="numkeyboa

基于MATLAB的GUI(Graphical User Interface)音频实时显示设计

摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声卡录入,并且实时显示录入声音的时域图形和频域图形:待录音结束,通过”播放“按钮可以播放刚录入的声音,并且一边播放一遍实时显示时域和频域图形.本设计的编码在matlab2013a上亲测,可以实现... 一.首先matlab的gui界面设计 打开matlab—>在命令行执行guide—>出现gui编辑