如何正确计算显示器带宽需求

news/2024/12/23 20:54:11 标签: 计算机外设, 科技

1. 对显示器的基本认识

一个显示器的参数主要有这些:

  • 分辨率:显示器屏幕上像素点的总数,通常用横向像素和纵向像素的数量来表示,比如1920×1080(即1080p)。

  • 刷新率:显示器每秒钟画面更新的次数,用赫兹 (Hz) 表示,比如60Hz144Hz

  • 色深:每个像素的颜色显示能力,色深越高,显示器能呈现的颜色越丰富,过渡越平滑,比如8bit10bit

这些参数也是计算显示器带宽的重要参数。

2. 错误的计算

假如这里有一块1080P@60Hz 8bit的屏幕,那它所需的带宽是多少呢?一些数学不错且有计算机硬件知识的人会立马回答道:

这块屏幕有1960乘1080个像素,每个像素又红绿蓝三个子像素构成,每秒刷新60次,而且还是8bit,所以应该是:

1920 * 1080 * 60 * 8 * 3 = 2.986Gbit/s

整个互联网上基本全是这种算法,但如果我告诉你这是错的呢?

3.显示器的工作原理

想要知道正确的算法就必须了解显示器的工作原理。

显示器在显示时并不是像幻灯片一样一整个画面一整个画面地切换,而是使用逐行扫描(Progressive Scanning):显示器会从屏幕的左上角开始一行一行地从左往右刷新,到右下角的像素完成刷新算作完成一次完整的画面刷新。如下图左半部分所示。
请添加图片描述

问题就出在这里:文艺一点地说,我们生活在电磁波的海洋里;实际一点地说,外部的Wi-Fi和移动信号的干扰以及电脑和显示器内部电路板的高频讯号干扰都会对画面传输造成影响。如果电磁波影响了数据的传输,就会导致每一行的信号对不齐,最后产出的画面就是撕裂和错位的。同时显示器还要保持画面在屏幕正中心,而不是偏左或者偏右。

所以显示器在逐行扫描时会在外围预留出一部分像素区域用于对齐和时钟同步,虽然这部分像素不参与显示,但是它会占用掉传输带宽。所以在计算带宽需求时,就需要把这一部分也考虑进去。

4. 实际像素数的计算

实际传输的画面大概分为3个部分:

  • 同步信号区(Sync):分为行同步信号区(Hsync)和场同步信号区(Vsync)
  • 消隐区(Blank):分为前消隐区(Front blank)和后消隐区(Back blank)
  • 有效显示区域(Active)
    请添加图片描述

所以说实际传输的画面的尺寸是:

Htotal = Hsync + Hfront + Hactive + Hback
Vtotal = Vsync + Vfront + Vactive + Vback

每张画面的像素量是:

pixels_per_frame = Htotal * Vtotal

每张画面的像素量乘以这个显示器的刷新率就是这个显示器一秒内要处理的像素量,专业名词叫显示器像素时钟(Pixel Clock):

pixel_clock = Htotal * Vtotal * Hz

那么如何知道Sync和Blank所占的像素数呢?这就要看显示器遵循的计时标准。不同的计时标准屏幕外用于时钟同步和对齐的部分也是不同的。

目前常见的标准是(我把下载链接附在这里):

  • CVT计时标准
  • CVT-RB计时标准
  • CVT-R2计时标准

越新的接口越节约带宽,现在的DP接口都是采用最新的CVT-R2标准,在这个标准下,用于计算Blank和Sync区域的相关公式是:
请添加图片描述

当然如果每个分辨率都要走一遍所有公式是很麻烦的,所以VESA也制作有一张Excel表格(搜索CVT VESA就能找到)来自动计算相关参数,只需要填写分辨率、刷新率即可
请添加图片描述

拿计算出的Pixel Clock乘色深再乘3(RGB三色通道)即可:

133.187 * 8 * 3 = 3.196Gbit/s

对于HDMI和DisplayPort的各个标准在不同刷新率下对不同分辨率的支持情况,我把维基百科的表格放在这里,也可以点击链接看:
HDMI:
请添加图片描述

DP(需要结合两张图看):
请添加图片描述
请添加图片描述

表格中的DSC是指依靠显示流压缩技术(Display Stream Compression)实现,这种技术能实现基本肉眼无法察觉压缩的画面效果。

表格中的4:2:0是一种色度抽样压缩技术,人眼对于这种压缩的感知不大,但这种技术仍然没有DSC的效果极致。


http://www.niftyadmin.cn/n/5796989.html

相关文章

upload-labs-master第21关超详细教程

目录 环境配置解题思路利用漏洞 操作演示 环境配置 需要的东西 phpstudy-2018 链接: phpstudy-2018 提取码:0278 32 位 vc 9 和 11 运行库 链接: 运行库 提取码:0278 upload-labs-master 靶场 链接: upload-lasb-ma…

python多线程爬取药品信息

多线程爬取药品信息 利用多线程来获取药品信息可以实现高效的爬取,方便我们自己对药品的名称、价格以及功效进行了解和掌握 导入需要使用到的包 from concurrent.futures.thread import ThreadPoolExecutor from lxml import etree import requests import rando…

C++面试八股文:指针与引用的区别

引言 这也是一道C开发工程师在面试中经常被问到的题目,本文将从指针和引用的几方面区别和各自的常用用途展开讲解,助力各位在面试中大放异彩。 指针和引用的区别 1、指针是一个变量,储存的是一个地址,通过该地址可以操作内存中…

List反转的方法

1.list循环 List<String> strsnew ArrayList<>();for (int i 0; i <100 ; i) {strs.add("a"i);}List<String> fzstrsnew ArrayList<>();for (int i strs.size()-1; i >0 ; i--) {fzstrs.add(strs.get(i));}System.out.println(fzstr…

微服务详细教程之nacos和sentinel实战

前言 上一篇文章中已经介绍了java的高并发编程中的问题&#xff0c;现在主要介绍微服相关的问题&#xff0c;其中在网上面经中经常出现的几个微服问题。这也是我们工作中经常遇到的几个问题。 一.微服务有哪些好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东…

Elasticsearch:什么是查询语言?

查询语言定义 查询语言包括数据库查询语言 (database query language - DQL)&#xff0c;是一种用于查询和从数据库检索信息的专用计算机语言。它充当用户和数据库之间的接口&#xff0c;使用户能够管理来自数据库管理系统 (database management system - DBMS) 的数据。 最广…

使用开源在线聊天工具Fiora轻松搭建个性化聊天平台在线交流

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 今天给大家介绍一款免费开源的在线聊天工具——Fiora。它不仅是一款功能强大的即时通讯软件&#xff0c;更是开发者们展现创造…

Scala学习记录 如何打印输出

在Scala中&#xff0c;打印输出可以通过多种方式实现&#xff0c;以下是一些常见的打印输出方法&#xff1a; 1.使用printf()方法&#xff1a; 这是一种传统的C语言风格的打印方式&#xff0c;通过格式化字符串来控制输出的格式。例如&#xff0c;printf("整数&#xff1a…