SPDIF接口介绍

news/2024/9/20 3:57:35/文章来源:https://www.cnblogs.com/bujidao1128/p/18418738

SPDIF接口介绍

S/PDIF接口规范详解

S/PDIF是sony和philips在80年代为一般家用器材所定制出来的一种数字讯号传输接口,基本上是以AES/EBU(也称AES3)专业用数字接口为参考然后做了一些小变动而成的家用版本。

可以使用成本较低的硬件来实现数字讯号传输。为了定制一个统一的接口规格,现如今以IEC 60958标准规范来囊括取代AES/EBU与S/PDIF规范,而IEC 60958定义了三种主要形态:

(1)IEC 60958 TYPE1 Balanced :三线式传输使用110欧阻抗的线材及XLR接头,使用于专业场合

(2)IEC 60958 TYPE2 Unbalanced:使用75欧阻抗的同轴线以及RCA接头,适用于一般家用场合

(3)IEC 60958 TYPE2 Optical:使用光纤传输以及F05光纤接头,也是使用于一般家用场合

IEC60958有时会简称为IEC958,而IEC 60958 TYPE1即为AES/EBU(也称AES3)接口,而IEC 60958 TYPE2即为S/PDIF接口,虽然在IEC 60958 TYPE2的接头规范里是使用RCA或光纤接头,不过近年来一些使用S/PDIF的专业器材改用BNC接头搭配上75欧的同轴线也可以得到比较好的传输质量,下表为AES/EBU与S/PDIF的比较表:

IEC958使用的编码方法

IEC958在传输数据时使用双相符号(Biphase Mark Code)编码,简称BMC,属于一种相位调制(phase modulation)的编码方法,是将时钟信号和数据信号混合在一起传输的编码方法。

其原理是使用一个两倍于传输位率的时钟频率做为基准,把原来一位数据拆成两份,当数据为1的时候,在其时钟周期内转变一次电位(0->1或1->0)让数据变成两个不同电位,变成10或01,而当数据为0则不转变电位,变成11或00。同时每一个位开头的电平与前一个结尾电平要不同(Preamble 头4位除外),这样接收端才能判别每一个位的边界,如下图所示。(BMC编码可以让传输线保持在接近0的平均直流电位,除了可以降低传输需要耗费的功率之外,也可以降低实体电磁干扰,让数据正确性更高)。

AES/EBU与S/PDIF主要是用来传递PCM格式的音频信号,例如48Khz的DAT以及44.1Khz的CD,不过现在也有用来传递压缩过的多声道信号。

标准传递两声道信号的架构如下图所示,最上面是由192个框架(Frame)构成的区块(Block)。而每个Frame储存了两个声道的一组采样信号(Sample)分为Channel A与Channel B两个声道。每组Sample 由一个子框架(Sub Frame)构成,也就是一个Frame里有两个Sub Frame。Sub Frame的长度为32bits,里头包含了头码(Preamble),辅助数据(Aux Data),音频数据(Audio Data)以及4个位的信息与检查码。一个Sub Frame为32bits,则一个Frame为8Byte,一个block为192x8=1536 Bytes,每个block总共可以传递192个双声道Sample。

子框架(Sub Frame)的结构以及每个部分代表的意义如下:

0-3 头码(Preamble):用来表示一个Sub Frame的开头,有三种型态,分别表示该Sub Frame为Channel A、Channel B或者是一个Block的起始Sub Frame(为Channel A)。

4-7 辅助数据(Aux. Data):原始此区块的设计是用来传递一些使用者自行添加的信息,不过目前比较常见的用途是当音讯数据超过20Bit取样时,这四个Bit用来储存多出的取样Bit,比如说当要传送24Bit取样的数据时,用来存放末四个Bit的音讯数据。

8-27 音频数据(Audio Data):存放实际的取样数据,长度为20 Bit,以LSB优先的方式传送,当取样低于20 Bit时,没有用到的LSB Bits要设定为零,举例来说,当我们要传送16 Bit的数据时,只会用到12-27 Bit的位置(LSB在12 Bit),而8-11 Bit为零。

28 有效位(Validity Bit):此位设定了这一个Sub Frame内的数据是不是正确,如果设定为0,代表此Sub Frame内的数据是正确可被接收的,反之如果此Bit为1,则代表接收端应该忽略此组Sub Frame。比如说CD转盘读取CD数据时若是有某一个Sample读不到就会将代表该组Sample的Sub Frame中的有效位设为1。

29 使用者位(User Bit):此位为使用者自行定义的位,每组Sample传送一位,直到192组Sample传完后组成192位的信息,两声道各自有一组192位的使用者信息。

30 信道状态位(Channel Status Bit):此位与使用者位一样,每组Sample传送一位,最后组成两声道各自一组192位的信道状态信息(Channel Status)。这个192位信道状态信息分为专业(Professional)与一般家用(Consumer)两种不同的结构,以第一个位决定,设为1的时候为Professional模式,设为0的时候为Consumer模式。

31 同位检查位(Parity Bit):同位检查是用来判别是否有奇数个位是发生错误,是一种简便错误检查方法,这边是使用偶位同位检查(Even Parity Check)。

子框架内的头码(Preamble)定义

头码是用来表示一个Sub Frame的开头,主要有B,M,W(或Z,X,Y)三种组态,各代表不同的意义。M代表此时传送的是A通道(左声道),W代表此时传输的是B通道(右声道),而B比较特殊,代表此时传送的是A通道,并且是一个Block的起始Sub Frame。

在上头的表格里的数据数值是Sub Frame中其它的数据经过BMC编码之后再加到整个Sub Frame前头的数据数值,所以总共是八码,代表四个位的时序。此外比较特别的是除了有X、Y、Z三种组态之外,上面的表格还列出了另外一组与原本数据向位相反的数值,要使用哪一组数值是依照前一组Sub Frame中最尾端的电平而定,当前一组Sub Frame为最尾端的电平0时用左边那一列数值,为1的时候用右边那一列,这样接收端才能正确处理。

在一个区块(Block)中,Preamble为Z组态时代表一个区块的起始点,如下图所示。

数据处理

由于SPDIF传输的是音频数据速率很低一般都是K级别的。为了从BMC编码后的数据恢复出音频数据,我们可以用一个较高频率的时钟(比如100M)去采样SPDIF接口上输入的信号。得到其沿变化的最小时间间隔(N个时钟周期)。这样在每个沿变化后或者计时到时间间隔N后, 重新清零计数器开始计时到N-1时采样一位数据。用一个8位的移位寄存器,去连续接收数据,再根据子框架内的头码(Preamble)定义去识别出Fame头。同时根据BMC的编码方法“在其时钟周期内转变一次电位(0->1或1->0)让数据变成两个不同电位,变成10或01,而当数据为0则不转变电位,变成11或00。”去将BMC变化后的数据转换为实际的音频数据。

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

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

相关文章

通过 NSSM 把 FastAPI+Celery+Flower 注册成 3个Windos 服务

通过 NSSM 把 FastAPI+Celery+Flower 注册成 3个Windos 服务 什么是 nssm? 是一个服务封装程序,它可以将普通exe程序封装成服务,实现开机自启动,同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大。nssm官网 nssm 常用命令 nssm install servername /…

zblogPHP后台时一切正常,但登出后再次登录提示“错误原因:登录失败;帐户和密码都是对的

当使用 Z-Blog PHP 后台时,如果登出后再次登录提示“错误原因:登录失败”,即使确认账户和密码输入正确,可能的原因包括 cookie 问题、缓存问题、数据库问题或配置问题等。以下是一些排查和解决此类问题的方法: 1. 清除浏览器缓存和 cookie问题描述:浏览器缓存或 cookie 可…

想成为Admineloper?Salesforce全新职业解析,机会就在眼前!

每个Salesforce管理员在思考自己的职业生涯时,可能都会想到:下一步是往架构师,或者开发,还是咨询的方向发展。无论哪种职业规划,都需要培养新的技能。 由于角色职责、团队、客户需求等的变化,许多管理员在晋升之前就开始培养这种新技能。管理员可能需要学习Apex或利用现有…

zblog静态分类目录访问出现403错误

当使用 Z-Blog 静态化分类目录后出现 403 错误,这通常意味着服务器拒绝了访问请求,可能是由于权限设置不当、Web 服务器配置错误或其他安全限制导致的。以下是针对不同情况的一些常见解决方案。 1. 检查文件和目录权限问题描述:文件或目录权限设置不正确可能导致 403 错误。…

zblog建站设置静态化以后网页出现403错误

当使用 Z-Blog 建站并设置了静态化后,如果遇到 403 错误,这通常表示服务器拒绝了请求,可能是由于权限设置不当、Web 服务器配置错误或其他安全限制导致的。以下是针对不同 Web 服务器(如 Apache 和 Nginx)的一些常见解决方案。 对于 Apache 服务器 1. 检查文件和目录权限问…

代码随想录算法训练营,9月18日 | 77.组合,216.组合总和III,17.电话号码的字母组合

回溯算法理论基础: 1.回溯是递归的副产品,有递归就有回溯。 2.回溯的本质是穷举,想让回溯法高效些,可以加一些剪枝的操作 3.组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集…

火山引擎数智平台:高性能ChatBI的技术解读和落地实践

导读:大模型能力的发展和成熟,催生出新一代智能化 BI—— ChatBI,即通过自然语言处理(NLP)与大型语言模型(LLMs)的结合,极大简化数据分析过程,提高效率并降低分析门槛。火山引擎数智平台旗下智能数据洞察产品 DataWind 近期上线 ChatBI 能力,提供智能修复、多语法适用…

zblog php404页面,图文详解zblogphp如何自定义404错误页面?zblogphp设置404的方法

在 Z-Blog PHP 中自定义 404 错误页面是一个相对简单的过程。以下是详细的步骤,帮助你完成自定义 404 页面的工作。 1. 创建 404 页面模板 步骤 1:创建 404 页面模板文件在你的 Z-Blog PHP 主题目录下创建一个名为 404.php 的文件。 打开这个文件并编写你的 404 页面模板代码…

思通数科开源产品:免费的AI视频监控卫士安装指南

准备运行环境: 确保您的服务器或计算机安装了Ubuntu 18.04 LTS操作系统。 按照产品要求,安装以下软件:Python 3.9 Java JDK 1.8 MySQL 5.5 Redis 2.7 Elasticsearch 8.14 FFmpeg 4.1.1 RabbitMQ 3.13.2 Minio (2024-07-26T20版本)接着,下载开源软件,并运行Python端、Jav…

网易云JS逆向分析

网易云JS逆向分析 前言 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与文章作者无关,若有侵权,请联系我立即删除! 阅读本篇文章,需要一定的爬虫基础,和js逆向思维,否则无法继续 首先找到一个歌单找到这个api接口api传参为这两个…

虚拟机开启IPV6的建议

概述 默认情况vmware的nat网络模式是没有开启IPV6的,即便宿主机有IPV6。 开启方式:编辑---》选择vmnet8(NAT),点击NAT Settings(NAT设置),选择最下面的开启IPV6 NAT。 少侠,我看你气度不凡天赋异禀,骨骼精奇,这么帅,来了就帮推荐一把吧 我的最近更新 最新发布文章、框架、…

ZBlogPHP Leaked 1 hashtable iterators错误

当遇到 Z-Blog PHP 报告 “Leaked 1 hashtable iterators” 错误时,这通常表明内存泄漏或其他内存管理问题。这类错误通常出现在 PHP 内存管理或扩展中。以下是解决这一问题的一些常见步骤: 检查 PHP 配置问题描述:PHP 配置可能存在问题。 解决方法:编辑 php.ini 文件,确保…