【本科生通信原理】【实验报告】【北京航空航天大学】实验四:模拟信号的数字化及编码

news2025/1/12 12:30:24

目录

    • 一、实验目的
    • 二、实验内容
    • 三、实验程序
    • 四、实验结果
    • 五、实验分析
    • 六、参考文献

一、实验目的

1、掌握低通信号的抽样重建过程;
2、掌握PCM编码译码过程。

二、实验内容

2问:
在这里插入图片描述在这里插入图片描述

三、实验程序

1、

function q1()
dt = 0.001;  % 时间分辨率
t = -8 * pi : dt : 8 * pi;  % 时间向量
x_t = cos(0.15 * pi * t) + sin(2.5 * pi * t) + cos(4 * pi * t);  
% 低通信号
[f, x_f] = F(t, x_t);
fs = 4;  % 采样速率
sdt = 1 / fs;  % 采样间隔
t1 = -8 * pi : sdt : 8 * pi;
st = cos(0.15 * pi * t1) + sin(2.5 * pi * t1) + cos(4 * pi * t1);  
% 采样信号
[f1, sf] = F(t1, st);
 
% 恢复原始信号
t2 = -50 : dt : 50;
gt = sinc(fs * t2);
stt = sigexpand(st, sdt / dt);
xt_t = conv(stt, gt);  % 恢复信号
t3 = -50 : dt : 60 + sdt - dt;
 
figure;  % 画出该低通信号的波形
plot(t, x_t);
xlabel('t/s');
ylabel('x(t)');
title('低通信号x(t)的波形');
grid on;
axis([-8 * pi 8 * pi -3 3]);
 
figure;  % 画出抽样序列,抽样速率为4Hz
plot(t1, st);
xlabel('t/s');
ylabel('x_s(t)');
title('抽样速率为4Hz的抽样序列');
grid on;
axis([-8 * pi 8 * pi -2.5 2.5]);
 
figure;  % 画出抽样序列恢复出的原始信号
plot(t3, xt_t(1 : length(t3)));
xlabel('t/s');
ylabel('x\^(t)');
title('抽样序列恢复出的原始信号');
axis([0 50 -2.5 2.5])
grid on;

2、

function q2()
dt = 0.001; % 时间分辨率
t = -4 * pi : dt : 4 * pi;  % 时间向量
xt = sin(2 * pi * t);  % 低通信号
fs = 20;  % 采样频率
sdt = 1 / fs; % 采样间隔
t1 = -4 * pi : sdt : 4 * pi;  % 采样时间向量
st = sin(2 * pi * t1);  % 采样信号
 
ct = [];
Dt = [];
for i = 1 : length(t1)  % 对每一个采样点进行迭代
    mt = st(i) / 1 * 4096;  % 转化为量化电平
    bt = pcm_encode(mt);  % 进行pcm编码
    ct = cat(2, bt, ct);
    dt = pcm_decode(bt, 1);  % 进行pcm解码
    Dt(i) = dt;
end
c1 = [];
for j = 1 : 50
    if ct(j) == 0
        c = zeros(1, 20);
    elseif ct(j) == 1
        c = ones(1, 20);
    end
    c1 = [c1 c];
end
 
figure;  % 画出未编码波形
plot(t1, st);
xlabel('t/s');
ylabel('x_s(t)');
title('未编码波形');
grid on;
axis([-4 * pi 4 * pi -1 1]);
 
figure;  % 画出PCM编码后的波形
plot(t1, c1(1 : length(t1)));
xlabel('t/s');
ylabel('PCM(t)');
title('经过PCM编码的波形');
grid on;
axis([-12 10 -0.1 1.1]);
 
figure;  %画出译码后的波形
plot(t1, Dt);
xlabel('t/s');
ylabel('x\^(t)');
title('译码后的波形');
grid on;
axis([-4 * pi 4 * pi -1 1]);

function q2_2()
cnt = -70 : 1 : 0;
for i = 1 : length(cnt)
    Ac = 10 ^ (cnt(i) / 20);  % dB的转换
    r(i) = PCM(Ac);
end
plot(cnt, 10 * log10(r));
grid on;
xlabel('A_c^2/A_0^2');
ylabel('r/dB');
title('量化信噪比与SNR的关系曲线');
end

程序中用到的子函数:

1、

function [f, sf] = F(t, st)
%利用fft, fftshift定义函数F计算信号的傅里叶变换
%t-离散时间
%st-离散信号
dt = t(2) - t(1); %时间分辨率
T = t(end);
df = 1 / T; %频率分辨率
N = length(st); %离散傅里叶变换长度
f = -N / 2 * df : df : N / 2 * df - df;
sf = fft(st);
sf = T / N * fftshift(sf);

2、

function [out] = sigexpand(d, M)
%将输入的序列扩展为间隔为N – 1个0的序列
%M:系统采样频率
%d:输入的二进制代码
%out:为1 * (M * length(d))维的矩阵
N = length(d);
out = zeros(M, N);
out(1, :) = d;
out = reshape(out, 1, M * N);
end

3、

function [out] = PCM(Ac)
v = 1;  % 过载电平
t = 0 : 0.01 : 10;
s = Ac * sin(2 * pi * t);  % 抽样序列
y = floor(s / v * 4096);  % 信号值转化为量化单位
pcm_en = pcm_encode(y);  % pcm编码
pcm_de = pcm_decode(pcm_en, v);  % pcm译码
Nq = mean((s - pcm_de).^2);  % 计算量化噪声功率
S = mean(s .^ 2);  % 计算信号平均功率
out = S / Nq;
end

4、

function [out] = pcm_encode(x)
% 输入x参数为0~4096的样值,输出out为8位二进制码
n = length(x);
for i = 1 : n
    % 编写段落码
    if x(i) > 0
        out(i, 1) = 1;
    else
        out(i, 1) = 0;
    end
    % 编写段内码计算量化间隔和量化起始电平
    if abs(x(i)) > 0 && abs(x(i)) < 32
        %段落码
        out(i, 2) = 0;
        out(i, 3) = 0;
        out(i, 4) = 0;
        % 量化间隔
        step = 2;
        %起始电平
        st = 0;
    elseif 32 <= abs(x(i)) && abs(x(i)) < 64
        out(i, 2) = 0;
        out(i, 3) = 0;
        out(i, 4) = 1;
        step = 2;
        st = 32;
     elseif 64 <= abs(x(i)) & abs(x(i)) < 128
        out(i, 2) = 0;
        out(i, 3) = 1;
        out(i, 4) = 0;
        step = 4;
        st = 64;
    elseif 128 <= abs(x(i)) & abs(x(i)) < 256
        out(i, 2) = 0;
        out(i, 3) = 1;
        out(i, 4) = 1;
        step = 8;
        st = 128;
    elseif 256 <= abs(x(i)) & abs(x(i)) < 512
        out(i, 2) = 1;
        out(i, 3) = 0;
        out(i, 4) = 0;
        step = 16;
        st = 256;
    elseif 512 <= abs(x(i)) & abs(x(i)) < 1024
        out(i, 2) = 1;
        out(i, 3) = 0;
        out(i, 4) = 1;
        step = 32;
        st = 512;
    elseif 1024 <= abs(x(i)) & abs(x(i)) < 2048
        out(i, 2) = 1;
        out(i, 3) = 1;
        out(i, 4) = 0;
        step = 64;
        st = 1024;
    elseif 2048 <= abs(x(i)) & abs(x(i)) < 4096
        out(i, 2) = 1;
        out(i, 3) = 1;
        out(i, 4) = 1;
        step = 128;
        st = 2048;
    else
        out(i, 2) = 1;
        out(i, 3) = 1;
        out(i, 4) = 1;
        step = 128;
        st = 2048;
    end
    if(abs(x(i)) >= 4096)
        % 处理过载现象
        out(i, 2: 8) = [1 1 1 1 1 1 1];
    else
        % 计算段落码
        tmp = floor((abs(x(i)) - st) / step);
        t = dec2bin(tmp, 4) - 48;
        out(i, 5 : 8) = t(1 : 4);
    end
end
out = reshape(out', 1, 8 * n);

5、

function [out] = pcm_decode(in, v)
% 输入in为8位二进制码,(-v, +v)为量化区间
n = length(in);
in = reshape(in', 8, n / 8)';
slot(1) = 0;
slot(2) = 32;
slot(3) = 64;
slot(4) = 128;
slot(5) = 256;
slot(6) = 512;
slot(7) = 1024;
slot(8) = 2048;
step(1) = 2;
step(2) = 2;
step(3) = 4;
step(4) = 8;
step(5) = 16;
step(6) = 32;
step(7) = 64;
step(8) = 128;
for i = 1 : n / 8
    ss = 2 * in(i, 1) - 1;
    tmp = in(i, 2) * 4 + in(i, 3) * 2 + in(i, 4) + 1;
    st = slot(tmp);
    dt = (in(i, 5) * 8 + in(i, 6) * 4 + in(i, 7) * 2 + in(i, 8)) * step(tmp) + 0.5 * step(tmp);
    out(i) = ss * (st + dt) / 4096 * v;
end

四、实验结果

1、
(1)、低通信号x(t)的波形:
在这里插入图片描述

图1
(2)、抽样速率为4Hz的抽样序列:
在这里插入图片描述

图2
(3)、抽样序列恢复出的原始信号:
在这里插入图片描述

图3
2、
(1)、未编码的波形:
在这里插入图片描述

图4
(2)、经过PCM编码后的波形(部分,由于采样点数太多导致无法全部画完):
在这里插入图片描述

图5
(3)、译码后的波形:
在这里插入图片描述

图6
(4)、不同幅度Ac情况下,PCM译码后的量化信噪比:
在这里插入图片描述

图7

五、实验分析

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

六、参考文献

1、《通信原理(第7版)》,樊昌信 曹丽娜 编著,北京,国防工业出版社,2022年1月。

2、《信号与系统(第二版)》,【美】Alan V. Oppenheim 等 著,刘树棠 译,北京,电子工业出版社,2020年8月。

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

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

相关文章

macOS 老版本系统恢复中出现“MacBook Pro无法与恢复服务器取得联系”

macOS 老版本系统恢复中出现“MacBook Pro无法与恢复服务器取得联系” 网络问题系统时间问题镜像索引问题 网络问题 系统时间问题 镜像索引问题 恢复模式的 “实用工具 > 系统终端” 里执行如下 nvram IASUCatalogURLhttps://swscan.apple.com/content/catalogs/others/i…

Android 13.0 SystemUI状态栏居中显示时间和修改时间显示样式

1.概述 在13.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了 效果图如下: 2.SystemUI状态栏居中显…

如何配置 VS Code 实现 git 密码免输入

目录 问题描述尝试过的失败方法问题分析最终采用的解决方案&#xff1a;利用 ssh key 提供密码免输入功能安装 git windows 命令工具在windows本地生成 ssh key将公钥安装到 git 服务器第一种方法第二种方法调试方法 参考资料: 问题描述 在 Windows 上&#xff0c;使用 Visual…

西电期末1025.平滑滤波

一.题目 二.分析与思路 别光看公式&#xff0c;读题干&#xff1a;“位置i的输出为距离i最近的三个输入的平均值”&#xff0c;再看示例&#xff0c;输入几个&#xff0c;输出几个&#xff0c;所以就是输出每个位置距离最近的三个输入的平均值&#xff0c;中间没什么问题&…

高可用分布式部署Spark、完整详细部署教程

前言 Spark 是 UC Berkeley AMP Lab 开源的通用分布式并行计算框架。 Spark基于map reduce算法实现的分布式计算&#xff0c;拥有Hadoop MapReduce所具有的优点&#xff1b;但不同于MapReduce的是Job中间输出和结果可以保存在内存中&#xff0c;从而不再需要读写HDFS&#xff…

DoIP学习笔记系列:(八)车厂一般关于DoIP的相关测试分析

文章目录 1. 前言2. 基本项测试2.1 协议版本默认值2.2 车辆标识请求报文格式2.3 带EID的车辆标识请求报文格式2.4 带VIN的车辆标识请求报文格式2.5 否定响应码0x002.6 否定响应码0x012.7 否定响应码0x022.8 否定响应码0x042.9 路由激活应答码0x002.10 路由激活应答码0x012.11 路…

RMAN-03002 RMAN-06059 ORA-19625

有个现场经理反馈&#xff0c;每天的rman备份异常&#xff0c;登录系统查看rman的log日志&#xff0c;报错信息如下 RMAN> run{ 2> backup filesperset 50 archivelog all format /backup/ARCHBAK_%d_%T_%s tag arch_bak delete all input; 3> } 4> Starting …

粒子群优化pso结合bp神经网络优化对csv文件预测matlab(3)

1.csv数据为密西西比数据集&#xff0c;获取数据集可以管我要&#xff0c;数据集内容形式如下图&#xff1a; 2.代码 这里参考的是b站的一位博主。 数据集导入教程在我的另一篇文章bp写过&#xff0c;需要的话可以去看一下 psobp.m close all clc%读取数据 inputX; outputY;…

数字化工厂产品推荐 带OPC UA的分布式IO模块

背景 近年来&#xff0c;为了提升在全球范围内的竞争力&#xff0c;制造企业希望自己工厂的机器之间协同性更强&#xff0c;自动化设备采集到的数据能够发挥更大的价值&#xff0c;越来越多的传统型工业制造企业开始加入数字化工厂建设的行列&#xff0c;实现智能制造。 数字化…

Hierarchical Clusting模型

介绍&#xff1a; Hierarchical Clustering 是一种常用的聚类方法&#xff0c;它通过构建一个层次化的聚类树&#xff08;或者称为聚类图&#xff09;&#xff0c;将数据点逐步合并组成不同的聚类簇。 Hierarchical Clustering 的主要思想是将相似的数据点归为一类&#xff0c…

数字IC后端实现之Innovus TA-152错误解析(分频generated clock定义错误)

**ERROR: (TA-152): A latency path from the ‘Fall’ edge of the master clock at source pin… Error Code TA-152 在数字IC后端实现innovus中我们经常会看到这类Error&#xff0c;具体信息如下所示。 Error Message **ERROR: (TA-152): A latency path from the ‘Fa…

模板模式实现分布式锁实战

前言 分布式锁相信大家都有用过&#xff0c;常见的分布式锁实现方式例如redis、zookeeper、数据库都可以实现&#xff0c;而我们代码中强引用这些分布式锁的代码&#xff0c;那么当我们以后想替换分布式锁的实现方式时&#xff0c;需要修改代码的成本会很高&#xff0c;于是我…

21.串的处理

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.nextLine();char[] c str.toCharArray();int n c.length;StringBuilder st new StringBuilder();int i 0;while(i<n)…

G4周:CGAN,手势生成

本文为&#x1f517;365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊|接辅导、项目定制 我的环境&#xff1a; 1.语言&#xff1a;python3.7 2.编译器&#xff1a;pycharm 3.深度学习框架Pytorch 1.8.0cu111 一、CGAN介绍 条件生成对抗网络&#xff08;…

【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic

【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic 原因 golang 服务出现了 panic&#xff0c;根据 panic 打印出的堆栈找到了问题代码&#xff0c;看上去原因是&#xff1a;json 序列化时&#xff0c;遇到了无法序列化的内容 [panic]: json: unsupported …

微信小程序——调节手机屏幕亮度案例分享

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Elasticsearch基本操作之索引操作

本文说下Elasticsearch基本操作之索引操作 文章目录 概述创建索引创建索引示例重复创建索引示例 查看索引查看所有索引查看单个索引 删除索引删除索引 概述 由于是使用命令来操作Elasticsearch&#xff0c;可以使用kibana&#xff0c;postman和apifox等工具 我使用了apifox来执…

python-查漏补缺笔记-更新中

包导入时__init__.py中命令的执行顺序和sys.modules变化 ref: https://edu.csdn.net/skill/practice/python-3-6/164 在有父包和子包的情况下&#xff0c;父包中的“ __ init__.py”语句会在子包的“ __ init__.py”语句之前执行&#xff0c;然后按下列顺序执行导入子包和模块…

7款实用的SQLite数据库可视化管理工具

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。今天推荐7款实用的SQLite数据库可视化管理工具(GUI)&#xff0c;帮助大家更好的管理SQLite数据库。 什么是SQLite&#xff1f; SQLite是一个…

[C#]使用onnxruntime部署yolov8-onnx印章检测

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8是目标检测领域中的一种先进算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列算法的最新发展。YOLO算法以其高效和实时的性能而著名&#xff0c;而YOLOv8则进一…