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

目录

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

一、实验目的

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 : 50if ct(j) == 0c = zeros(1, 20);elseif ct(j) == 1c = ones(1, 20);endc1 = [c1 c];
endfigure;  % 画出未编码波形
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) > 0out(i, 1) = 1;elseout(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)) < 64out(i, 2) = 0;out(i, 3) = 0;out(i, 4) = 1;step = 2;st = 32;elseif 64 <= abs(x(i)) & abs(x(i)) < 128out(i, 2) = 0;out(i, 3) = 1;out(i, 4) = 0;step = 4;st = 64;elseif 128 <= abs(x(i)) & abs(x(i)) < 256out(i, 2) = 0;out(i, 3) = 1;out(i, 4) = 1;step = 8;st = 128;elseif 256 <= abs(x(i)) & abs(x(i)) < 512out(i, 2) = 1;out(i, 3) = 0;out(i, 4) = 0;step = 16;st = 256;elseif 512 <= abs(x(i)) & abs(x(i)) < 1024out(i, 2) = 1;out(i, 3) = 0;out(i, 4) = 1;step = 32;st = 512;elseif 1024 <= abs(x(i)) & abs(x(i)) < 2048out(i, 2) = 1;out(i, 3) = 1;out(i, 4) = 0;step = 64;st = 1024;elseif 2048 <= abs(x(i)) & abs(x(i)) < 4096out(i, 2) = 1;out(i, 3) = 1;out(i, 4) = 1;step = 128;st = 2048;elseout(i, 2) = 1;out(i, 3) = 1;out(i, 4) = 1;step = 128;st = 2048;endif(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 / 8ss = 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.mzph.cn/news/602289.shtml

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

相关文章

如何本地搭建DolphinScheduler并无公网ip远程访问管理界面

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

通过cpolar在公网访问本地网站

通过cpolar可以轻松将本地网址映射到公网进行访问&#xff0c;下面简要介绍一下实现步骤。 目录 一、cpolar下载 二、安装 三、使用 3.1 登录 3.2 创建隧道 一、cpolar下载 cpolar官网地址&#xff1a;cpolar - secure introspectable tunnels to localhost 通过QQ邮箱…

网络请求 - 异步编程详解

一、概述 网络管理模块主要提供以下功能&#xff1a; HTTP数据请求&#xff1a;通过HTTP发起一个数据请求。WebSocket连接&#xff1a;使用WebSocket建立服务器与客户端的双向连接。Socket连接&#xff1a;通过Socket进行数据传输。 HTTP和WebSocket都是啥&#xff1f; 比如我…

MyBatis - 批量更新(update foreach)报错

在使用mybatis执行批量更新(update foreach)数据的时候报错如下&#xff1a; org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; c…

基于web3+solidity的众筹项目

基本配置&#xff1a;node、npm、yarn&#xff0c;安装ganache&#xff0c;chrome&#xff0c;chrome安装插件MetaMask&#xff0c; 主要功能&#xff1a;目的是实现一个简单的众筹平台&#xff0c;允许用户发起筹款项目、捐款、提出使用资金请求以及证明人证明。 部分合约&…

echarts 仪表盘进度条 相关配置

option {series: [{type: gauge,min: 0,//最大值max: 100, //最小值startAngle: 200,//仪表盘起始角度。圆心 正右手侧为0度&#xff0c;正上方为90度&#xff0c;正左手侧为180度。endAngle: -20,//仪表盘结束角度splitNumber: 100, //仪表盘刻度的分割段数itemStyle: {color…

深度学习|4.1 深L层神经网络 4.2 深层网络的正向传播

4.1 深L层神经网络 对于某些问题来说&#xff0c;深层神经网络相对于浅层神经网络解决该问题的效果会较好。所以问题就变成了神经网络层数的设置。 其中 n [ i ] n^{[i]} n[i]表示第i层神经节点的个数&#xff0c; w [ l ] w^{[l]} w[l]代表计算第l层所采用的权重系数&#xff…

day07 四数相加Ⅱ 赎金信 三数之和 四数之和

题目1&#xff1a;454 四数相加Ⅱ 题目链接&#xff1a;454 四数相加Ⅱ 题意 4个整数数组nums1&#xff0c; nums2&#xff0c; nums3&#xff0c; nums4的长度均为n&#xff0c;有多少个元组&#xff08;i&#xff0c;j&#xff0c;k&#xff0c;l&#xff09;使得 nums[…

Python如何生成个性二维码

Python-生成个性二维码 一、问题描述 通过调用MyQR模块来实现生成个人所需二维码。 安装&#xff1a; pip install myqr 二、代码实现 1.普通二维码 from MyQR import myqr # 普通二维码 myqr.run(wordshttp://www.csdn.net/mayi0312,save_nameqrcode.png ) 效果图&#…

@JsonFormat与@DateTimeFormat

JsonFormat注解很好的解决了后端传给前端的格式&#xff0c;我们通过使用 JsonFormat可以很好的解决&#xff1a;后台到前台时间格式保持一致的问题 其次&#xff0c;另一个问题是&#xff0c;我们在使用WEB服务的时&#xff0c;可 能会需要用到&#xff0c;传入时间给后台&am…

buuctf-Misc 题目解答分解109-111

109.[CFI-CTF 2018]webLogon capture 流量包分析&#xff0c; wireshark 打开 就这几个数据包&#xff0c;追踪http 进行url 解码 URL网址解码器 - 在线网址解码 得到flag CFI{1ns3cur3_l0g0n} 110.[GKCTF 2021]excel 骚操作 下载 excel 文件 &#xff0c;打开 发现点击其他地…

计算机Java项目|基于Springboot实现患者管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 文末获取源码 项目编号&#xff1a;KS-032…

CanFestival结合Android来完成canopen通信

1.准备开发环境 安装Android Studio和NDK后&#xff0c;需要在Android Studio中创建一个新的NDK项目&#xff0c;并且在项目目录下创建一个jni目录来放置NDK代码。 配置CAN总线接口硬件需要根据具体的硬件要求进行&#xff0c;常见的方法包括使用串口或USB连接CAN总线接口&…

PyTorch Tutorial

本文作为博客“Transformer - Attention is all you need 论文阅读”的补充内容&#xff0c;阅读的内容来自于 https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html#recommended-preparation 建议的准备流程。 Deep Learning with PyTorch: …

网络知识-以太网技术的发展及网络设备

目 录 一、背景介绍 &#xff08;一&#xff09;网络技术的时代 &#xff08;二&#xff09;以太网技术脱颖而出 二、以太网的工作原理 &#xff08;一&#xff09;、载波侦听多路访问&#xff08;CSMA/CD&#xff09; 1、数据发送流程 2、发送过程解析 3、…

WeNet语音识别+Qwen-72B-Chat Bot+Sambert-Hifigan语音合成

WeNet语音识别Qwen-72B-Chat Bot&#x1f47e;Sambert-Hifigan语音合成 简介 利用 WeNet 进行语音识别&#xff0c;使用户能够通过语音输入与系统进行交互。接着&#xff0c;Qwen-72B-Chat Bot作为聊天机器人接收用户的语音输入或文本输入&#xff0c;提供响应并与用户进行对话…

RPC基础知识总结

RPC 是什么? RPC&#xff08;Remote Procedure Call&#xff09; 即远程过程调用&#xff0c;通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC &#xff1f; 因为&#xff0c;两个不同的服务器上的服务提供的方法不在一个内存空间&#xff0c;所以&am…

软件测试/测试开发丨Vuetify框架的使用

介绍 Vuetify 是一个基于 Vue.js 精心打造 UI 组件库&#xff0c;整套 UI 设计为 Material 风格。能够让没有任何设计技能的开发者创造出时尚的 Material 风格界面。 为什么要使用Vuetify框架 所有组件遵从 Material Design 设计规范&#xff0c;UI 体验非常优秀&#xff0c…

zookeeper经典应用场景之分布式锁

1. 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中&#xff0c;就需要一种更加高级的锁机制来处理跨机器的进…

MiniTab的宏基础知识

什么是宏&#xff1f; 宏是包含一系列 Minitab 会话命令的文本文件。可以使用宏自动执行重复性任务&#xff08;例如&#xff0c;生成月度报表&#xff09;或扩展 Minitab 的功能&#xff08;例如&#xff0c;计算特殊检验统计量&#xff09;。 Minitab 提供以下类型的宏&…