数字信号处理及MATLAB仿真(3)——采样与量化

news/2024/10/5 5:54:07/

        今天写主要来编的程序就是咱们AD变换的两个步骤。一个是采样,还有一个是量化。大家可以先看看,这一过程当中的信号是如何变化的。信号的变换图如下。

        先说说采样,采样是将连续时间信号转换为离散时间信号的过程。在采样过程中,连续信号在特定时间间隔(采样间隔)内被测量和记录,这些时间间隔称为采样周期。采样率(或采样频率)是指每秒钟采样的次数,通常用赫兹(Hz)表示。采样是数字信号处理中的一个关键步骤,因为它将模拟信号转换为可以用数字设备(如计算机)处理的离散信号。大家在图上也能很明显的看出来,不知道大家还记不记得那个公式xₐ(nT)=x(n),每隔一定的距离在采一个值。在理想的采样中也可以写成模拟信号乘上冲激串,即\sum_{m=-\infty }^{\infty }x _{a}(t)\delta (t-mT)。对应上面的概念,这里的T就是采样周期,fs=1/T就是采样频率。就先说这么多吧,我们看程序。

%采样信号的写法
%奈奎斯特采样定理的体现,过采样的优势
%注意使用“;”,抑制输出:当分号放在表达式后面时,运算后命令窗口中不显示表达式的计算结果。clear all
close allf = 10;
fs = 260;%采样信号的写法
%第一种
t = 0:1/fs:1
signal1 = sin(2*pi*f*t);
%第二种
length = [0:300]
signal2 = sin(2*pi*f*length/fs);figure(1)
plot(signal1,'-*')figure(2)
plot(signal2,'-*')

        这里可以有两种不同的写法,个人比较喜欢第二种。大家随便选,来看图像,这里建议用stem函数来看它的离散图像。大家感兴趣的可以数一下一个周期内正好为26个点

        第二个概念是量化,量化是将模拟信号或连续取值的信号转换为有限个离散值的过程。在数字信号处理和通信中,由于数字系统只能处理离散的数值,所以需要对连续的模拟信号进行量化。量化通过将信号的取值范围划分成若干个区间(称为量化级),然后将落在每个区间内的信号值用一个特定的离散值(量化值)来表示。量化会引入量化误差,即量化后的信号值与原始信号值之间的差异。量化误差的大小取决于量化级的数量和量化方式。量化级越多,量化误差通常越小,但同时也会增加数据量和处理复杂度。在开始的图像当中,我们可以看到信号被分成一个阶梯函数,那样的就是我们的一个量化信号。大家在学AD转换的时候,或许会学到过量化阶数这一概念。这里的量化级数则是另一个和它相关的概念。量化级数和量化阶数是量化过程中的两个相关概念。量化级数是指量化后可能的取值个数。量化阶数则是相邻两个量化电平之间的差值。它们之间存在这样的关系:量化阶数 = 量化范围 / 量化级数。这里先给出一个简单的代码。仅供参考。

%量化信号
%% 生成一个正弦波信号
t = 0:0.01:1;             % 时间向量
x = sin(2 * pi * 5 * t);  % 正弦波信号% 定义量化参数
num_levels = 16;           % 量化级数
q_levels = linspace(-1, 1, num_levels); % 量化级别% 对信号进行量化
x_quantized = quantiz(x, q_levels);% 绘制原始信号和量化信号
figure(1);
subplot(2, 1, 1);
plot(t, x);
xlabel('t/s');
ylabel('幅值');
title('原信号');subplot(2, 1, 2);
stairs(t, x_quantized, 'r');
xlabel('t/s');
ylabel('幅值');
title('量化后的信号');
grid on;% 显示量化级别
disp('量化级别:');
disp(q_levels);% 量化函数定义
function y = quantiz(x, q_levels)% 初始化量化后的输出信号y = zeros(size(x));% 对每个信号样本进行量化for i = 1:length(x)% 找到最接近的量化级别[~, idx] = min(abs(q_levels - x(i)));y(i) = q_levels(idx);end
end

       图像如下

        当然在MATLAB当中,我们还可以使用向上取整或者是向下取整或者是四舍五入等等能够让信号归一到不同水平的电平上就行了。

        更多的话,大家继续follow我吧。

        欲知后事如何,且听下回分解。OVO.......


http://www.ppmy.cn/news/1473690.html

相关文章

原型模式的实现

1. 引言 1.1 背景 在实际编程中,有时需要频繁创建多个相似但稍有不同的对象。如果采用传统的对象创建方式,容易造成代码冗余,对象重复初始化操作也可能带来大量的的资源消耗(如时间、内存等)。这样不仅降低了灵活性,导致难以适应状态的变化,还降低了代码的可扩展性。 …

美团实习—后端开发凉经

面试经历分享 日期: 4月22日时长: 50分钟 意外之喜 没想到在面试过程中,我再次被选中进行下一轮,这确实让我感到有些意外和欣喜。这次面试经历对我而言,不仅是一次技能的检验,更是一次知…

C#面:C# 如何使⽤ ActionFilterAttribute?

在C#中,ActionFilterAttribute是一个特性类,用于在控制器的动作方法执行前后添加自定义逻辑。它可以用于实现日志记录、异常处理、权限验证等功能。 要使用ActionFilterAttribute,可以按照以下步骤进行操作: 创建一个继承自Acti…

基于单片机火灾自动报警系统设计

摘 要: 我国的火灾自动报警技术已经相对的较为成熟,随着信息技术的发展,网络化、信息化在火灾自动报警器上的应用也越来越多。无线通信的方式使得报警器本身可以方便的应用于大大小小的环境,例如工厂、社区和学校等等。通过对单片…

uni-app优点有哪些?

uni-app的优点主要有以下几个方面: 跨平台开发:uni-app支持一套代码编写,多端运行,无需额外的适配工作,可以同时在iOS、Android、Web等多个平台上运行。这大大提高了开发效率,节省了开发成本和时间。统一的…

Fastjson首字母大小写问题

1、问题 使用Fastjson转json之后发现首字母小写。实体类如下: Data public class DataIdentity {private String BYDBSM;private String SNWRSSJSJ;private Integer CJFS 20; } 测试代码如下: public static void main(String[] args) {DataIdentit…

MongoDB 单节点升级为副本集高可用集群(1主1从1仲裁)

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享…

集智书童 | 英伟达和斯坦福基于 Transformer 的异常检测最新研究!

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。 原文链接:英伟达和斯坦福基于 Transformer 的异常检测最新研究! 在作者推动各种视觉任务性能边界的同时,模型的大小也在相应增长。为了跟上…