通信原理与MATLAB(十三):AMI的编解码

news2024/11/20 7:11:08

目录

  • 1.AMI的的编解码原理
    • 1.1 AMI编码原理
    • 1.2 AMI解码原理
  • 2.AMI编解码的代码
  • 3.AMI编解码结果图
  • 4.AMI的误码率曲线
    • 4.1 原理
    • 4.2 AMI的误码率曲线代码
  • 4.3 误码率曲线图

1.AMI的的编解码原理

1.1 AMI编码原理

如下图所示,AMI的编码原理:将原始码元的1转换成1,0转换成-1。

1.2 AMI解码原理

AMI解码原理:将AMI码元中的1转换成1,-1转换成0。
如果是经过信道后的AMI码元,那么解码之前先要经过低通滤波器,然后抽样判决后,恢复出AMI码,然后再进行解码。
在这里插入图片描述

2.AMI编解码的代码

clear all;                  % 清除所有变量
close all;                  % 关闭所有窗口
clc;                        % 清屏
%% 基本参数
M=10;                       % 产生码元数    
L=100;                      % 每码元复制L次,每个码元采样次数
Ts=0.001;                   % 每个码元的宽度,即码元的持续时间
Rb=1/Ts;                    % 码元速率1K
dt=Ts/L;                    % 采样间隔
TotalT=M*Ts;                % 总时间
t=0:dt:TotalT-dt;           % 时间
Fs=1/dt;                    % 采样间隔的倒数即采样频率

%% 产生单极性波形
wave=randi([0,1],1,M);      % 产生二进制随机码,M为码元个数
%% AMI编码,将原码中的1转换成1,0转换成-1
for i=1:M
    if wave(i)==1
        ami(i)=1;
    else 
        ami(i)=-1;
    end
end

fz=ones(1,L);               % 定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:);              % 将原来wave的第一行复制L次,称为L*M的矩阵
jidai=reshape(x1,1,L*M);    % 产生单极性不归零矩形脉冲波形,将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

x2=ami(fz,:);               % 将原来ami的第一行复制L次,称为L*M的矩阵
ami_tz=reshape(x2,1,L*M);   % 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

%% 绘制波形
figure(1);                  % 绘制第1幅图
subplot(311);               % 窗口分割成3*1的,当前是第1个子图 
plot(t,jidai,'LineWidth',2);% 绘制基带码元波形,线宽为2
title('基带信号波形');      % 标题
xlabel('时间/s');           % x轴标签
ylabel('幅度');             % y轴标签
axis([0,TotalT,-0.1,1.1])   % 坐标范围限制

subplot(312)                % 窗口分割成3*1的,当前是第2个子图 
plot(t,ami_tz,'LineWidth',2);% 绘制ami的波形 
title('AMI信号波形')        % 标题
axis([0,TotalT,-1.1,1.1]);  % 坐标范围限制
xlabel('时间/s');           % x轴标签
ylabel('幅度');             % y轴标签
%% 信号经过高斯白噪声信道
tz=awgn(ami_tz,20);         % 信号ami_tz中加入白噪声,信噪比为SNR=20dB
subplot(313);               % 窗口分割成3*1的,当前是第1个子图 
plot(t,tz,'LineWidth',2);   % 绘制2ASK信号加入白噪声的波形
axis([0,TotalT,-1.5,1.5]);  % 坐标范围设置
title('通过高斯白噪声信道后的信号');% 标题
xlabel('时间/s');           % x轴标签
ylabel('幅度');             % y轴标签
%% 解码部分
%% 加噪信号经过滤波器
% 低通滤波器设计
fp=2*Rb;                    % 低通滤波器截止频率,乘以2是因为下面要将模拟频率转换成数字频率wp=Rb/(Fs/2)
b=fir1(30, fp/Fs, boxcar(31));% 生成fir滤波器系统函数中分子多项式的系数
% fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
% 这里是生成了30(31个抽头系数)的矩形窗滤波器
[h,w]=freqz(b, 1,512);      % 生成fir滤波器的频率响应
% freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
lvbo=fftfilt(b,tz);         % 对信号进行滤波,tz是等待滤波的信号,b是fir滤波器的系统函数的分子多项式系数
figure(2);                  % 绘制第2幅图  
subplot(411);               % 窗口分割成4*1的,当前是第1个子图 
plot(w/pi*Fs/2,20*log(abs(h)),'LineWidth',2); % 绘制滤波器的幅频响应
title('低通滤波器的频谱');  % 标题
xlabel('频率/Hz');          % x轴标签
ylabel('幅度/dB');          % y轴标签

subplot(412)                % 窗口分割成4*1的,当前是第2个子图 
plot(t,lvbo,'LineWidth',2); % 绘制经过低通滤波器后的信号
axis([0,TotalT,-1.5,1.5]);  % 设置坐标范围
title("经过低通滤波器后的信号");% 标题
xlabel('时间/s');           % x轴标签
ylabel('幅度');             % y轴标签

%% 抽样判决
pdst=1*(lvbo>0);            % 滤波后的向量的每个元素和0进行比较,大于01,否则为0

% 取码元中间时刻值为判决值
panjue=[];

for j=(L/2):L:(L*M)
    if pdst(j)>0
        panjue=[panjue,1];
    else
        panjue=[panjue,0];
    end
end

x3=panjue(fz,:);            % 将原来panjue的第一行复制L次,称为L*M的矩阵
huifu=reshape(x3,1,L*M);    % 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

subplot(413)                % 窗口分割成4*1的,当前是第3个子图 
plot(t,huifu,'LineWidth',2) % 画出经过抽样判决后的信号
axis([0,TotalT,-0.1,1.1]);  % 设置坐标范用
title("经过抽样判决后的信号")% 标题
xlabel('时间/s');           % x轴标签
ylabel('幅度');             % y轴标签

%% AMI解码,1对应转换为1-1转换成0
for i=1:M
    if panjue(i)==1
        dout(i)=1;
    else 
        dout(i)=0;
    end
end

x4=dout(fz,:);              % 将原来dout的第一行复制L次,称为L*M的矩阵
dout_wave=reshape(x4,1,L*M);% 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

subplot(414)                % 窗口分割成4*1的,当前是第4个子图 
plot(t,dout_wave,'LineWidth',2)% 画出经过抽样判决后的信号
axis([0,TotalT,-0.1,1.1]);  % 设置坐标范用
title("AMI解码后波形")      % 标题
xlabel('时间/s');           % x轴标签
ylabel('幅度');             % y轴标签


%% 绘制频谱
%% 基带信号频谱
T=t(end);                   % 时间
df=1/T;                     % 频谱分辨率
N=length(jidai);            % 采样长度
f=(-N/2:N/2-1)*df;          % 频率范围
mf=fftshift(abs(fft(jidai)));%对信源信号采用快速傅里叶变换并移到矩阵中心
figure(3)                   % 绘制第3幅图
subplot(211);               % 窗口分割成2*1的,当前是第1个子图 
plot(f,mf,'LineWidth',2);   % 绘制信源频谱波形
title("基带信号频谱");      % 标题
xlabel('频率/Hz');          % x轴标签
ylabel('幅度');             % y轴标签

%% AMI信号频谱
sf=fftshift(abs(fft(ami_tz))); % 对AMI信号采用快速傅里叶变换并将0-fs频谱移动到-fs/2-fs/2
subplot(212)                % 窗口分割成2*1的,当前是第1个子图 
plot(f,sf,'LineWidth',2)    % 绘制调制信号频谱
title("AMI信号频谱")        % 标题
xlabel('频率/Hz');          % x轴标签
ylabel('幅度');             % y轴标签


%% 加入噪声后的频谱
mmf=fftshift(abs(fft(tz))); % 对信号采用快速傅里叶变换并移到矩阵中心
figure(4)                   % 绘制第4幅图
subplot(211);               % 窗口分割成2*1的,当前是第1个子图 
plot(f,mmf,'LineWidth',2)   % 画出乘以相干载波后的频谱
title("加入噪声后的频谱")   % 标题
xlabel('频率/Hz');          % x轴标签
ylabel('幅度');             % y轴标签

%% 经过低通滤波后的频谱
dmf=fftshift(abs(fft(lvbo)));%对低通滤波信号采用快速傅里叶变换并移到矩阵中心
subplot(212);               % 窗口分割成2*1的,当前是第2个子图 
plot(f,dmf,'LineWidth',2)   % 画出经过低通滤波后的频谱
title("经过低通滤波后的频谱");% 标题
xlabel('频率/Hz');          % x轴标签
ylabel('幅度');             % y轴标签

3.AMI编解码结果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.AMI的误码率曲线

4.1 原理

计算某信噪比下的错误的码元个数,然后除以总码元个数,即该信噪比下的误码率。然后更改信噪比,计算新的误码率,一个信噪比对应一个误码率,连点成线。

4.2 AMI的误码率曲线代码

clear all;                  % 清除所有变量
close all;                  % 关闭所有窗口
clc;                        % 清屏
%% 基本参数
M=100000;                   % 产生码元数    
L=100;                      % 每码元复制L次,每个码元采样次数
Ts=0.001;                   % 每个码元的宽度,即码元的持续时间
Rb=1/Ts;                    % 码元速率1K
dt=Ts/L;                    % 采样间隔
TotalT=M*Ts;                % 总时间
t=0:dt:TotalT-dt;           % 时间
Fs=1/dt;                    % 采样间隔的倒数即采样频率

%% 产生单极性波形
wave=randi([0,1],1,M);      % 产生二进制随机码,M为码元个数
%% AMI编码,将原码中的1转换成1,0转换成-1
for i=1:M
    if wave(i)==1
        ami(i)=1;
    else 
        ami(i)=-1;
    end
end

fz=ones(1,L);               % 定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:);              % 将原来wave的第一行复制L次,称为L*M的矩阵
jidai=reshape(x1,1,L*M);    % 产生单极性不归零矩形脉冲波形,将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

x2=ami(fz,:);               % 将原来ami的第一行复制L次,称为L*M的矩阵
ami_tz=reshape(x2,1,L*M);   % 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

%% 信号经过高斯白噪声信道
EbN0_dB = -15:1:5;
for i=1:21
tz=awgn(ami_tz,EbN0_dB(i)); % 信号ami_tz中加入白噪声

%% 解码部分
%% 加噪信号经过滤波器
% 低通滤波器设计
fp=2*Rb;                    % 低通滤波器截止频率,乘以2是因为下面要将模拟频率转换成数字频率wp=Rb/(Fs/2)
b=fir1(30, fp/Fs, boxcar(31));% 生成fir滤波器系统函数中分子多项式的系数
% fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
% 这里是生成了30(31个抽头系数)的矩形窗滤波器
[h,w]=freqz(b, 1,512);      % 生成fir滤波器的频率响应
% freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
lvbo=fftfilt(b,tz);         % 对信号进行滤波,tz是等待滤波的信号,b是fir滤波器的系统函数的分子多项式系数

%% 抽样判决
pdst=1*(lvbo>0);            % 滤波后的向量的每个元素和0进行比较,大于01,否则为0

% 取码元中间时刻值为判决值
panjue=[];

for j=(L/2):L:(L*M)
    if pdst(j)>0
        panjue=[panjue,1];
    else
        panjue=[panjue,0];
    end
end

%% AMI解码,1对应转换为1-1转换成0
for k=1:M
    if panjue(k)==1
        dout(k)=1;
    else 
        dout(k)=0;
    end
end

% 计算错误码元数,然后除以总码元数得到误码率
error_num=length(find(dout~=wave));

error_rate(i)=error_num/M;

end

figure(1)
semilogy(EbN0_dB,error_rate,'-ob');% 绘制误码率曲线
xlabel('Eb/n0');                   % x轴标签
ylabel('BRE');                     % y轴标签
title('AMI的误码率曲线')           % 标题

4.3 误码率曲线图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快过年了,用Python康康哪一家足浴店可以带朋友去玩.....

人生苦短,我用Python 首先肯定是去正经足浴店, 毕竟一年出差也不少, 大家都很辛苦, 好不容易放假了, 约上好兄弟一起去放松放松~ 所需环境 python 3.8 解释器pycharm 编辑器 所需模块 requests 数据来源分析 …

Silane-PEG-NH2 氨基聚乙二醇硅烷 NH2-PEG-Silane结构式

英文名称:Silane-PEG-NH2 Silane-PEG-Amine 中文名称:硅烷-聚乙二醇-氨基 分子量:1k,2k,3.4k,5k,10k,20k。。。 存储条件:-20C,避光,避湿 用 途…

2022年度总结,迎接2023

目录 我和CSDN的2022 初次见面: 你我的成长: 博客: 比赛: 我和CSDN的2023 我和CSDN的2022 初次见面: CSDN你好啊!我跟你的初次见面在于2022年4月2日!!! 这这半年内…

【算法5.1】背包问题 - 01背包 (至多最大价值、至少最小价值)

目录 至少模板和至多模板的两大区别 1、至多模板 2、至少模板 2. 01背包 - 至多模板 - 体积至多j,总价值最大 1、朴素做法 - 二维dp 2、优化 - 一维dp 4700. 何以包邮? - 至少模板 - 价值至少j,总价值最小 至少模板和至多模板的两大区…

list容器与vector容器的区别

vector与list都是STL中非常重要的序列式容器,它们都存放在namespace std命名空间中,由于俩个容器的底层结构不同,导致其特性不同 一、底层实现结构不同 vector本质是一段动态连续的顺序表,而list底层是一个双向循环链表 二、访…

Ubuntu多硬盘luks全盘加密自动解锁(硬件变更后失效)的方法

简介大家都知道,Linux现在用Luks全盘加密一直有一个痛点,就是每次开机都需要输入解密硬盘的密码,之后又要输入用户密码,非常的麻烦!本文正是为了解决这个问题诞生的!本文多硬盘加密带来的效果是&#xff0c…

Redis持久化——RDB机制详解

在运行情况下,Redis 以数据结构的形式将数据维持在内存中,为了让这些数据在 Redis 重启之后仍然可用,需要将数据写入持久存储 持久化是指将数据写入持久存储,例如固态磁盘(SSD) Redis 提供了一系列持久化选项。这些包括&#xff1…

Java-黑马Java学习作业-day07综合练习

学习视频链接:黑马Java学习视频 文章目录练习一:飞机票练习二:打印素数练习三:验证码练习四:复制数组练习五:评委打分练习六:数字加密练习七:数字解密练习八:抽奖解法一:…

【C++11】—— 可变参数模板

目录 一、可变参数模板概念以及定义方式 二、参数包的展开 1. 递归函数方式展开参数包 2. 逗号表达式展开参数包 三、STL容器中的empalce相关接口函数 一、可变参数模板概念以及定义方式 在c11之前,类模板和函数模板只能含有固定数量的模板参数,c11…

JavaScript高级 ES5 面向对象原型继承

原型以及ES5中实现继承1. 对象和函数的原型1. 普通对象的原型 [[prototype]]2. 函数的原型 prototype2. new、constructor1. new 操作符2. constructor属性3. 将方法放到原型上4. 创建对象的内存表现5. 重写原型对象3. 原型链的查找顺序4. 原型链实现的继承5. 借用构造函数继承…

深入URP之Shader篇10: 深度值专题(1)

之前研究Unlit shader的时候就遇到一些Z值相关的问题,一笔带过了,比如ComputeFogFactor中的UNITY_Z_0_FAR_FROM_CLIPSPACE。今天就把URP Shader中出现的Z相关的问题做一个专题一起研究下。 深度缓冲的方向和UNITY_REVERSED_Z 先说这个关于z的宏&#x…

nacos:服务注册与发现

导入SpringCloudAlibaba相关的依赖&#xff0c;并在父工程将依赖进行管理 <dependencyManagement> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-s…

Java EE|多线程代码实例之定时器与线程池

文章目录&#x1f534;定时器什么是定时器以及开发中的作用标准库中的定时器定时器的实现&#x1f534;线程池什么是线程池标准库中的线程池创建一个线程池ThreadPoolExecutor构造方法解析线程池的实现&#x1f534;定时器 什么是定时器以及开发中的作用 程序中的定时器功能与…

【互联网大厂机试真题 - 华为】九宫格

题目描述 九宫格是一款广为流传的游戏,起源于河图洛书。游戏规则是:1到9九个数字放在3x3的格子中,要求每行、每列以及两个对角线上的三数之和都等于15. 在金麻名著《射雕英雄传》中黃蓉曾给九宫格的一种解法,口诀:戴九恩一,左三右七,二四有肩,八六为足,五居中央。解法…

【云原生进阶之容器】第四章Operator原理4.3节--Operator模式

1 Operator概述 1.1 诞生背景 Kubernetes实际是期望状态管理器。先在Kubernetes中指定应用程序期望状态(实例数,磁盘空间,镜像等),然后它会尝试把应用维持在这种状态。Kubernetes的控制平面运行在Master节点上,它包含数个controller以调和应用达到期望状态: 检查当前的…

【阶段三】Python机器学习30篇:机器学习项目实战:智能推荐系统的基本原理与计算相似度的常用方法

本篇的思维导图: 智能推荐系统模型 智能推荐系统属于非监督式学习,是机器学习一个非常重要的应用领域,它能带来的经济价值往往是直接且非常可观的。 智能推荐系统的基本原理 智能推荐系统的应用场景 互联网每天都在产生海量信息,用户行为数据呈现爆发式增长…

PyTorch - 常见神经网络

文章目录LeNetAlexNetDropoutAlexNet 网络结构torchvision中的AlexNet的实现ZFNetVGG-NetsVGG 各网络VGG-16 网络结构GoogLeNet代码实现ResNetDenseNetRNNLSTMGRULeNet 1998年&#xff0c;由 LeCun 提出用于手写数字识别任务只有5层结构&#xff1b;目前看来不输入深度学习网络…

智能售货机系统帝可得

智能售货机 概述项目使用springcloudalibaba中提供的短信服务图形验证码生成多端登录/网关统一鉴权对象存储服务代码的自动填充微服务集成emq&#xff0c;发送emq工单业务流 接收工单 拒绝工单 运维工单补货工单使用xxl-job进行任务调度lkd集成xxl-job自动创建维修工单自动…

设计模式_结构型模式 -《代理模式》

设计模式_结构型模式 -《代理模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承…

Docker 架构和安装

Docker 包括三个基本概念: 镜像&#xff08;Image&#xff09;&#xff1a;Docker 镜像&#xff08;Image&#xff09;&#xff0c;就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。 容器&#xff08;Con…