信号采样基本概念 —— 7.数模转换(DAC ADC)

news2024/11/17 4:28:17

文章目录

  • 数字转模拟(DAC)
    • 一个简单的数字转模拟方案
  • 模拟转数字(ADC)

数字转模拟(DAC)

通常来说,我们在设备上存储的数据是以二进制进行传输的,但是当我们试图将数据传输到更远的地方时,或者通过一些其他介质,例如WI-FI、蓝牙,同轴电缆、或者其他无线电信号进行远距离传输的时候,我们就需要把数据转化为模拟信号进行传输。

常见的数模转换,例如对于一个8bit的数据来说,我们可以通过把电势划分成8个不同的等级来代表每一个位,如果一个位为1,那么对应的电势就会被调高,而如果为0,则对应的电势会被调低。

一个简单的数字转模拟方案

数模转换最常见的方案是通过数模转换芯片来完成信号的转换。比方说德仪的PCM1808就是这样一款数模转换芯片。

在这里插入图片描述
通过6,7,8,9引脚分别输入数字信号和时钟输入,就可以在13和14引脚得到其对应的模拟信号。一般来说,其实现数模转换通过类似电压串联来实现。就像下面这样的示例

在这里插入图片描述

所以,我们可以根据这样的原理,写出它对应的数学表达式,例如对于4位的DAC,就可以表示如下:

V o u t = b 3 × V r e f × 8 16 + b 2 × V r e f × 4 16 + b 1 × V r e f × 2 16 + b 0 × V r e f × 1 16 V_{out} = b_3 \times V_{ref} \times \frac{8}{16} + b_2 \times V_{ref} \times \frac{4}{16} + b_1 \times V_{ref} \times \frac{2}{16} + b_0 \times V_{ref} \times \frac{1}{16} Vout=b3×Vref×168+b2×Vref×164+b1×Vref×162+b0×Vref×161

所以自然的,可以得到一个简单的数模转换代码

def dac_output(binary_input, V_ref):
    """
    Calculate the output of a 4-bit DAC for a given binary input.

    :param binary_input: A string of 4 bits, e.g., "1010".
    :param V_ref: Reference voltage of the DAC.
    :return: Analog output voltage.
    """
    if len(binary_input) != 4 or not set(binary_input).issubset({"0", "1"}):
        raise ValueError("binary_input must be a 4-bit binary string.")

    # Mapping each bit to its weighted value
    weights = [8/16, 4/16, 2/16, 1/16]

    V_out = sum(int(bit) * weight * V_ref for bit, weight in zip(binary_input, weights))
    return V_out


# Example:
binary_input = ["1010", "0101", "1111", "0000"]
V_ref = 5.0  # Let's assume the reference voltage is 5 volts.
for b_input in binary_input:
    output_voltage = dac_output(b_input, V_ref)
    print(f"For binary input {b_input}, the DAC output voltage is: {output_voltage:.2f} V")

其输出结果如下:

For binary input 1010, the DAC output voltage is: 3.12 V
For binary input 0101, the DAC output voltage is: 1.56 V
For binary input 1111, the DAC output voltage is: 4.69 V
For binary input 0000, the DAC output voltage is: 0.00 V

模拟转数字(ADC)

有DAC自然就有ADC,我们自然可以得到这样的简易数学表达式

Δ V = V r e f 2 4 \Delta V = \frac{V_{ref}}{2^4} ΔV=24Vref

这样,我们就可以得到如下的代码

def adc_output(V_in, V_ref):
    """
    Calculate the output of a 4-bit ADC for a given analog input voltage.

    :param V_in: Input analog voltage.
    :param V_ref: Reference voltage of the ADC.
    :return: 4-bit binary string representation.
    """
    if V_in > V_ref:
        raise ValueError("Input voltage exceeds reference voltage.")
    
    quantization_levels = 2**4
    delta_V = V_ref / quantization_levels
    
    digital_value = round(V_in / delta_V)  # Use rounding here
    binary_output = format(digital_value, '04b')  # Convert to 4-bit binary string
    
    return binary_output


# Example:
V_in = [3.12, 1.56, 4.69, 0.00]
V_ref = 5.0  # Reference voltage, same as before

for v in V_in:
    binary_output = adc_output(v, V_ref)
    print(f"For input voltage {v} V, the ADC output is: {binary_output}")

那么它的输出结果如下:

For input voltage 3.12 V, the ADC output is: 1010
For input voltage 1.56 V, the ADC output is: 0101
For input voltage 4.69 V, the ADC output is: 1111
For input voltage 0.0 V, the ADC output is: 0000

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

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

相关文章

《深入理解计算机系统》(1):系统组成

一、系统硬件组成 1、控制器(CPU):解释和执行内存中的指令 (1)、控制器 程序控制器:指令指针,指向主存中的机器语言指令,为一个字大小的存储设备或寄存器。 指令寄存器、指令译码器、…

基于docker+Keepalived+Haproxy高可用前后的分离技术

基于dockerKeepalivedHaproxy高可用前后端分离技术 架构图 服务名docker-ip地址docker-keepalived-vip-iphaproxy-01docker-ip自动分配 未指定ip192.168.31.252haproxy-02docker-ip自动分配 未指定ip192.168.31.253 安装haproxy 宿主机ip 192.168.31.254 宿主机keepalived虚…

k8s-9 ingress-nginx 特性

TLS加密 创建证书 测试 auth认证 创建认证文件 rewrite重定向 进入域名 会自动重定向hostname.html 示例二: 测试 后面必须跟westos 这个关键字 canary金丝雀发布 基于header灰度 场景:版本的升级迭代,比如一个service 升级到另…

react学习之---jsx转成虚拟dom的过程

jsx----经过Bebal编译返回可供React.createElement()可调用的对象—React.createElement调用后生成虚拟dom—diff算法—生成新的真实dom 经过babel编译: import {greet} from ‘./utils’; const App {greet(‘scott’)}; ReactDOM.render(App, document.getEl…

芯引擎·新力量 | 第五届浦东新区长三角集成电路技能邀请赛圆满落幕

9月27日, 2023年全国工业和信息化技术技能大赛上海选拔赛、上海职工职业技能系列赛暨第五届浦东新区长三角集成电路技能邀请赛汽车芯片设计竞赛及颁奖典礼在上海集成电路设计产业园举办,上海市经济和信息化委员会人事教育处处长黄春华,上海市…

ESP32网络开发实例-Web服务器控制GPIO

Web服务器控制GPIO 文章目录 Web服务器控制GPIO1、软件准备2、硬件准备3、代码实现本文将介绍如何Arduino IDE编程环境创建一个具有ESP32的独立web服务器,ESP32控制输出(两个LED)。可以通过作为本地网络上的浏览器的任何设备访问。下面将逐步介绍如何创建web服务器以及代码的…

【Redis】Redis的几个应用场景(string数据类型的应用)

Redis的几个应用场景 缓存功能 ⽐较典型的缓存使⽤场景,其中Redis作为缓冲层,MySQL作为存储层,绝⼤部分请求的数据都是从Redis中获取。由于Redis具有⽀撑⾼并发的特性,所以缓存通常能起到加速读写和降低后端压⼒的作⽤。 计数功能…

MS2400隔离式调制器可pin对pin兼容AD7400

MS2400是一款二阶Σ-Δ调制器,集成片上数字隔离器,能将模拟输入信号转换为高速1位码流。可pin对pin兼容AD7400,可兼容AMC1303。调制器对输入信号连续采样,无需外部采样保持电路。模拟信号输入满量程为320mV,转换后的数…

物联网入门系列(一):快速搭建一站式数据存储与实时分析平台

本系列文章将以教程形式介绍物联网领域用户在安装部署、分布式数据库设计、数据写入和查询、流计算和高可用测试等过程中的常见问题、相应的解决方案与注意事项,以帮助新用户快速入门,体验 DolphinDB 的极致性能。 本次介绍内容为——如何快速搭建一站式…

pgpool密码验证失败问题

当使用命令 psql -p 9999 -U postgres -d postgres 登录pgpool时 出现错误:md5 authentication failed 认证问题 推测问题: 1.密码设置错误 2.密码加密方式不一致 在主库操作 查看用户密码 select rolname,rolpassword from pg_authid 可以看出之前密码…

3561-24-8|荧光染料6-fam(Br4)|可作为成像剂

产品简介:6-fam(Br4)是一种荧光染料,广泛应用于生物医学领域中的荧光探针、标记物和成像剂等方面。其分子结构独特,具有良好的荧光量子产率和稳定性,能够在生物体内快速、准确地标记和追踪生物分子和细胞。其优异的荧光性能和化学…

(十四)VBA常用基础知识:当前excel文件所有sheet循环,获取sheet名,获取最大行数最大列数

获取当前excel的所有sheet以及sheet名 Sub test()Dim ws As WorksheetFor Each ws In Worksheetsws.ActivateDebug.Print ws.NameNext ws End Sub 输出结果: Sheet1 Sheet2 Sheet3 Sheet4 Sheet52.获取最大行数 首先要明白取最大行的方式,为什么这样取…

Go:关于 Channel

文章目录 写在前面内容模型图与代码发送流程接收流程 写在前面 本篇主要是通过 Channel 的模型图,对 Channel 的原理做一个基本的概述 内容 模型图与代码 我们先来看下 Channel 的模型图: 以上的图是一个简要的模型图,意味着丢失一些细节…

【Spring Boot】SpringBoot 单元测试

SpringBoot 单元测试 一. 什么是单元测试二. 单元测试的好处三. Spring Boot 单元测试单元测试的实现步骤 一. 什么是单元测试 单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。 二. 单元测试的好处…

TDengine时序数据库学习使用

数据库要求: 1.目前服务器只能在linux运行,先安装服务器版本v1 2.下载与v1完全匹配的客户端版本v1(客户端与服务器的版本号不匹配可能访问不了服务器) 第一步 安装 安装服务器注意,安装教程: 使用安装…

vivado FFT IP仿真(3)FFT IP选项说明

xilinx FFT IP手册PG109 1 Configuration 2 Implementation 3 Detailed Implementation IP Symbol

Android源码下载

文章目录 一、Android源码下载 一、Android源码下载 AOSP 是 Android Open Source Project 的缩写。 git 常用命令总结 git 远程仓库相关的操作 # 查看 remote.origin.url 配置项的值 git config --list Android9.0之前代码在线查看地址:http://androidxref.com/ …

关于webWorker未解问题

今天尝试学习webworker,尝试在vue3项目里面使用 使用的就是常规方法,使用worker-loader,加上在vue.config.js内部添加配置 使用完发现问题 如图所见,该worker仅仅配置点击后传输字符串"1",并在worker内部打印,发现打印不出来 但是仅仅只是将引入的文件换个名字 …

什么是兼容性测试? 有哪些方法?

在现今数字化世界中,软件和应用程序的多样性和复杂性已经达到了前所未有的高度。不同的操作系统、浏览器、设备和网络环境使得开发人员面临着严峻的挑战,即如何确保他们的软件在各种不同条件下都能正常运行。这就是兼容性测试的重要性所在。 一、什么是兼…