Matlab实现单(双)极性(不)归零码

内容大纲

  • Matlab实现单极性不归零波形(NRZ),0 1 幅值
  • Matlab实现单极性归零波形(RZ),0 1 幅值
  • Matlab实现双极性不归零波形,-1 1 幅值
  • Matlab实现双极性归零波形, -1 1 幅值

设计

首先需要确定单个码元信号,以一秒为一个码元周期,每次采样128个点得到两个码元信号,分别是RZ信号和NRZ信号

%% 生成单个码元
Ts = 1; % 码元周期
N_sample = 128; % 单个码元抽样点数
dt = Ts / N_sample; % 抽样时间间隔
N = 100; % 码元数
t = 0 : dt : (N * N_sample - 1) * dt; % 序列传输时间
gt1 = ones(1, N_sample); % NRZ
gt2 = [ones(1, N_sample / 2), zeros(1, N_sample / 2)]; % RZ

然后根据码元数生成N个0 1 的随机序列,然后根据随机序列在1时取一个码元信号,随机序列为0时取一个零信号

%% 生成随机序列
RAN = round(rand(1, N)); % 随机0 1序列
se1 = [];
se2 = [];
for i = 1 : N % 生成序列
if RAN(i)==1
se1 = [se1 gt1];
se2 = [se2 gt2];
else
se1 = [se1 zeros(1, N_sample)];
se2 = [se2 zeros(1, N_sample)];
end
end

然后观察波形看是否正确

%% 绘制出结果
subplot(2, 1, 1);plot(t, se1);grid on;axis([0 20 0 2]);title('NRZ');
subplot(2, 1, 2);plot(t, se2);grid on;axis([0 20 0 2]);title('RZ');

求信号的功率谱,功率谱 = 信号的频率的绝对平方 / 传输序列的持续时间, 求得的功率谱进行单位换算以dB值表示

%% 功率谱密度计算
fft_se1 = fftshift(fft(se1)); % 求序列的频谱
fft_se2 = fftshift(fft(se2));
PE1 = 10 * log10(abs(fft_se1) .^ 2 / (N * Ts)); % 公式法求概率谱密度
PE2 = 10 * log10(abs(fft_se2) .^ 2 / (N * Ts));
PEL1 = (-length(fft_se1) / 2 : length(fft_se1) / 2 - 1) / 10; % 求区间长度
PEL2 = (-length(fft_se2) / 2 : length(fft_se2) / 2 - 1) / 10;

注意:这里使最终观察的波形易于观察,需要使用fftshift函数使0频率响应移到频域中心,而频域较宽,因此只观察整个频域的1/10,取中心部位观察

观察功率谱是否正确

%% 绘制出结果
subplot(2, 2, 1);plot(t, se1);grid on;axis([0 20 -1.5 1.5]);title('DBNRZ');
subplot(2, 2, 2);plot(t, se2);grid on;axis([0 20 -1.5 1.5]);title('DBRZ');

把单极性转化为双极性观察:此处与单极性不同的地方在于,生成序列的时候,随机序列为0时取单个码元信号的乘以-1,而不是取0信号

此处以附上双极性的全部代码(与单极性差别不大)

clear all
close all
clc
%% 生成单个码元
Ts = 1; % 码元周期
N_sample = 128; % 单个码元抽样点数
dt = Ts / N_sample; % 抽样时间间隔
N = 100; % 码元数
t = 0 : dt : (N * N_sample - 1) * dt; % 序列传输时间
gt1 = ones(1, N_sample); % NRZ
gt2 = [ones(1, N_sample / 2), zeros(1, N_sample / 2)]; % RZ
%% 生成随机序列
RAN = round(rand(1, N)); % 随机0 1序列
se1 = [];
se2 = [];
for i = 1 : N % 生成序列
if RAN(i)==1
se1 = [se1 gt1];
se2 = [se2 gt2];
else
se1 = [se1 -1*gt1];
se2 = [se2 -1*gt2];
end
end
%% 绘制出结果
subplot(2, 2, 1);plot(t, se1);grid on;axis([0 20 -1.5 1.5]);title('DBNRZ');
subplot(2, 2, 2);plot(t, se2);grid on;axis([0 20 -1.5 1.5]);title('DBRZ');
%% 功率谱密度计算
fft_se1 = fftshift(fft(se1)); % 求序列的频谱
fft_se2 = fftshift(fft(se2));
PE1 = 10 * log10(abs(fft_se1) .^ 2 / (N * Ts)); % 公式法求概率谱密度
PE2 = 10 * log10(abs(fft_se2) .^ 2 / (N * Ts));
PEL1 = (-length(fft_se1) / 2 : length(fft_se1) / 2 - 1) / 10; % 求区间长度
PEL2 = (-length(fft_se2) / 2 : length(fft_se2) / 2 - 1) / 10;
%% 绘制出结果
subplot(2, 2, 3);plot(PEL1, PE1); grid on; axis([-50 50 -50 50]); title('density-DBNRZ');
subplot(2, 2, 4);plot(PEL2, PE1); grid on; axis([-50 50 -50 50]); title('density-DBRZ');

运行效果

单极性归零信号和单极性不归零信号及其功率谱密度:

分析:单个码元信号的周期是1,图中很坐标以2显示一个点,实际为1。占空比的设置为50%。以01时间段为例,图一的信号一直都是1,这是不归零的信号,图二在00.5时为1,0.5~1时为0,也就是在下一个码元来临前回归零,这是归零信号的特性。而两者信号的功率谱密度显示,在0频率处能量最集中,各个平垫的能量分布较为均衡,向两极逐渐递减,这适应于一个随机信号的特性

双极性归零信号和单极性不归零信号及其功率谱密度:

分析:双极性信号不归零信号只有1 -1 两种幅值,而归零信号则多一个0幅值。由于与单极性信号相比,只是幅值上面有所差异,对于频域的没有太大的影响,因而其功率谱密度也是十分相似的

后记

关于单(双)极性(不)归零编码的应用看了网上一篇博客:多路复用技术、频分多路复用、时分多路复用、波分多路复用、码分多址、空分多址,讲得还不错。贴网址:

http://blog.csdn.net/sunnyboy_cia/article/details/6382573

Matlab实现单(双)极性(不)归零码的更多相关文章

  1. 【一通百通】Bash的单双括号建议:多用[[]], 少用[]

    一. bash [  ] 单双括号 基本要素: Ø  [ ] 两个符号左右都要有空格分隔 Ø  内部操作符与操作变量之间要有空格:如  [  “a”  =  “b”  ] Ø  字符串比较中,> ...

  2. js+正则+单双引号问题

    在处理用js动态添加表格时,表格中有正则表达式,其单双引号问题导致的添加表格不成功,和正则失效问题 <script type="text/javascript"> va ...

  3. Turn.js 实现翻书效果(自适应单双页)

    来源:https://www.cnblogs.com/hellman/p/10683492.html在上面的来源基础上增加页码显示,自适应单双页PC端效果: 移动端展示: 源码下载地址:http:// ...

  4. sql语句的单双引号问题

    $current_account_url='<a class="mini-button" iconcls="icon-edit" onclick=&quo ...

  5. table 控制单双行颜色以及鼠标hover颜色 table光棒

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. php单双引号

    1.定义字符串 定义字符串时,只有一种引号被视为定义符,即单引号或双引号.于是,如果一个字符串由双引号开始,那么只有双引号被分析器解析.这样,你就可以在双引号串中包含任何其他字符,甚至单引号.下面的引 ...

  7. repeater单双行颜色不同,gridview repeater DataList 鼠标经过改变背景颜色

    1.gridview 双击GridView的OnRowDataBound事件: 在后台的GridView1_RowDataBound()方法添加代码,最后代码如下所示: protected void  ...

  8. JS中反斜杠和单双引号的配合使用效果

    <div id="tag"></div> <div id="tag1"></div> <div id=&q ...

  9. php中alert弹出时单双引号问题

    php代码中单双引号问题是个很重要的问题,使用不当会造成很多麻烦.先记录一下今天写alert遇到的麻烦.我做登录的时候,成功时想弹出个提示说登录成功.写alert语句时不显示.其实就是单双引号弄得不对 ...

随机推荐

  1. iPhone 6 (iOS 9.2) extractiion failed by XRY

    My colleague extracted an iPhone 6 with XRY and it is iOS 9.2 . Unfortunately the Wizard crashed and ...

  2. Java druid

    1.ConnectionFactory (添加引用:druid-1.0.1.jar) package nankang.test; import java.sql.Connection; import ...

  3. Android数据库(sqlite)加密方案

    最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密. 很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,如果加 ...

  4. SVN命令收集

    1.检出 svn co  http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码 svn  co  svn://路径(目录或文件的全路径 ...

  5. 解决Linux中遇到No such device

    虚拟机备份转移后,网络启动异常,提示“SIOCSIFADDR: No such device” he problem lies in the fact that ethernet MAC addres ...

  6. shell字符串操作详解

    shell字符串操作详解的相关资料. 1.shell变量声明的判断  表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...

  7. linux下关于mysqldump备份的.sql导入数据库表数据丢失优化

    直切正题 前2个随笔做了linux下自动备份,但是备份的.sql文件发现表数据丢失,原因是数据库太大我的数据库文件是804M,在用ftp拉去也会丢失数据 所以对db.sh备份数据库加一个压缩gizp ...

  8. DOS下无法调出中文输入法-Solved

    From:http://www.cnblogs.com/killerlegend/p/3750542.html Author:KillerLegend Date:2014.5.24 DOS下无法打开中 ...

  9. C语言-sizeof()与strlen()的区别【转】

    先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...

  10. 利用Newtonsoft.Json实现Json序列化与反序列化

    在项目中用到了Newtonsoft.Json来实现序列化和反序列化,在这里写下实现代码. 1.创建类用于排除不序列化的属性 public class ExcludePropertiesContract ...