計算人聲錄音后電平的大小(dB SPL->dBFS)

計算人聲錄音后電平的大小

這里筆記記錄一下,怎么計算已知大小的聲音,經過麥克風、聲卡錄制后軟件內錄得的音量電平值。(文章最后將計算過程整理為Python代碼,方便復用)

假設用正常說話的聲音大小65dB(SPL)來計算。思路,這里的鏈路是:人說話聲 -> 麥克風 -> 麥克風輸出電壓信號 -> 聲卡麥克風輸入 -> 電腦軟件記錄。那么計算所需的關鍵參數:

  1. 麥克風的靈敏度(算得麥克風輸出電壓信號所需)
  2. 聲卡麥克風輸入接口的最大輸入電平(軟件能錄到的最大電平值,0dBFS,音量100%的位置)

麥克風的靈敏度

假設麥克風的靈敏度是:

S m V / P a = 10 m V / P a S_{mV/Pa}=10mV/Pa SmV/Pa?=10mV/Pa

S d B V = ? 40 d B V S_{dBV}=-40dBV SdBV?=?40dBV

簡化計算過程,這里不考慮麥克風的等效輸入噪聲,不考慮麥克風輸入阻抗,也不考慮環境噪聲。

聲卡麥克風輸入規格

某款帶可調增益的聲卡麥克風輸入的部分規格如下:

  • 動態范圍(A加權):116dB
  • THD+N:-97dB(-1dBFS@8dB增益)
  • 等效輸入噪聲(EIN)(A加權):-127dBu
  • 最大輸入電平(在最小增益下):16dBu
  • 增益范圍:69dB
  • 輸入阻抗:3kΩ

簡化計算,假設錄音時增益設置為0,輸入阻抗不考慮,聲卡的EIN足夠小也不考慮。只取計算過程需要用的最大輸入電平:16dBu。

計算過程

聲壓級單位換算

人說話聲音聲壓級65dB(SPL)單位需要轉換為帕斯卡(Pa),否則無法根據麥克風的靈敏度公式轉換為mV。找到這兩者的關聯公式是:

SPL?(dB) = 20 log ? 10 ( P P 0 ) \text{SPL (dB)} = 20 \log_{10} \left( \frac{P}{P_0} \right) SPL?(dB)=20log10?(P0?P?)

  • P 是需要算出來的帕斯卡聲壓級。
  • P_0 是參考的帕斯卡聲壓級,一般取20uPa。

所以算出來是:

P = P 0 × 1 0 S P L ( d B ) 20 = 20 ( u P a ) × 1 0 65 ( d B ) 20 = 35566 ( u P a ) P = P_0 \times 10 ^ { \frac{SPL(dB)}{20} } = 20 (uPa) \times 10 ^ {\frac{65(dB)}{20} } = 35566(uPa) P=P0?×1020SPL(dB)?=20(uPa)×102065(dB)?=35566(uPa)

計算結果四舍五入保留了整數部分。

算出麥克風輸出電壓

上一步算出來的 35566(uPa) 換算為Pa單位,得到P=0.035566(Pa)。代入麥克風靈敏度公式算得:

V m i c = P × S m V / P a = 0.035566 ( P a ) × 10 ( m V / P a ) = 0.35565 ( m V ) = 3.5565 × 1 0 ? 4 ( V ) V_{mic} = P \times S_{mV/Pa}=0.035566(Pa) \times 10 (mV/Pa) = 0.35565(mV)=3.5565 \times 10^{-4}(V) Vmic?=P×SmV/Pa?=0.035566(Pa)×10(mV/Pa)=0.35565(mV)=3.5565×10?4(V)

由于聲卡靈敏度用的電壓是有效值(RMS),所以這里算出來的值也是有效值。

計算電壓和聲卡最大輸入電壓的占比
聲卡最大輸入電壓

聲卡最大輸入電平是16dBu。dBu 是一個對數單位,用于表示相對于參考值 0.775 伏特(有效值)的電壓電平。即:

V d B u = 20 × l o g 10 ( V m a x 0.775 ) V_{dBu}=20 \times log_{10}( \frac {V_{max}} {0.775}) VdBu?=20×log10?(0.775Vmax??)

V_max是聲卡最大輸入電壓(有效值,RMS)。根據公式,要計算16 dBu對應的電壓值,如下:

V m a x = 0.775 × 1 0 V d B u 20 = 0.775 × 1 0 16 ( d B u ) 20 = 4.89 ( V ) V_{max} = 0.775 \times 10^{\frac{V_{dBu}}{20}}=0.775 \times 10^{\frac{16(dBu)}{20}}= 4.89(V) Vmax?=0.775×1020VdBu??=0.775×102016(dBu)?=4.89(V)

這里保留2位小數。

計算人聲的電平數值

軟件錄音電平音量條的最大值通常是0 dBFS(dB Full Scale),這是一個數字音頻信號電平單位。dBFS表示滿度相對電平,0 dBFS的位置是系統能處理的最大音頻信號的編碼值,即最大值。實際數字音頻信號的幅度相對于這個最大值的比值即為滿度相對電平,因此實際的電平值都是負值。

在軟件中,音量條的最大值通常表示為0 dBFS,這意味著任何超過這個值的信號都會導致削波失真。為了防止失真,通常會將錄音電平設置在-3 dBFS到-6 dBFS之間,以留出一定的余量。

V m i c = 3.5565 × 1 0 ? 4 ( V ) , V m a x = 4.89 ( V ) V_{mic} = 3.5565 \times 10^{-4}(V) , \space V_{max} = 4.89(V) Vmic?=3.5565×10?4(V),?Vmax?=4.89(V)

計算dBFS如下(保留2位小數):

dBFS = 20 × log ? 10 ( V m i c V m a x ) = 20 × log ? 10 ( 3.5565 × 1 0 ? 4 ( V ) 4.89 ( V ) ) = ? 82.77 ( d B F S ) \text{dBFS} = 20 \times \log_{10} \left( \frac{V_{mic}}{V_{max}} \right)=20 \times \log_{10} \left( \frac{3.5565 \times 10^{-4}(V)}{4.89(V)} \right)=-82.77(dBFS) dBFS=20×log10?(Vmax?Vmic??)=20×log10?(4.89(V)3.5565×10?4(V)?)=?82.77(dBFS)

-82.77(dBFS)很小聲,播放出來得將音量調很大才能聽見聲音。這種情況錄音時得將增益調大。

計算過程Python實現

直接把文章復制扔給Kimi,開啟長思考,代碼實現完了。檢查了一下能跑,而且計算過程是對的。小改后如下:

# SPDX-License-Identifier: MIT
# ******************************************************************************
# (c) 2025 庵中十三居士
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# ******************************************************************************import mathdef calculate_dBFS(spl: float, mic_sensitivity_mV_Pa: float, max_input_dBu: float) -> float:'''根據聲音聲壓級、麥克風靈敏度和聲卡最大輸入電平計算錄音后軟件內的電平值(dBFS)。參數:spl (float):聲音聲壓級,單位為分貝(dB SPL)mic_sensitivity_mV_Pa (float):麥克風靈敏度,單位為毫伏每帕(mV/Pa)max_input_dBu (float):聲卡的最大輸入電平,單位為分貝伏特(dBu)返回:float:計算得到的軟件內電平值,單位為分貝滿量程(dBFS)感謝 Moonshot AI 提供的代碼實現。這份計算代碼基于庵中十三居士的文章原理編寫,幫助您將聲學參數與實際錄音電平聯系起來,方便對錄音電平進行預估和調整。'''# 聲壓級轉帕斯卡(Pa)P0 = 20  # uPa(參考聲壓級)spl_db = splPa = P0 * 10 ** (spl_db / 20)# 轉換為Pa單位(因為Pa = V/mic_sensitivity_mV_Pa)Pa = Pa / 1000000  # 將微帕轉換為帕# 計算麥克風輸出電壓(V)V_mic_mV = Pa * mic_sensitivity_mV_PaV_mic = V_mic_mV / 1000# 計算聲卡最大輸入電壓(V)V_ref_dBu = 0.775  # dBu的參考電壓max_input_V = V_ref_dBu * 10 ** (max_input_dBu / 20)# 計算dBFSdBFS = 20 * math.log10(V_mic / max_input_V)return dBFSif __name__ == "__main__":# 參數spl = 65  # 人說話聲音大小(SPL)=65dBmic_sensitivity_mV_Pa = 10  # 麥克風的靈敏度(mV/Pa)max_input_dBu = 16  # 聲卡最大輸入電平(dBu)# 計算dBFS = calculate_dBFS(spl, mic_sensitivity_mV_Pa, max_input_dBu)print(f"計算結果:dBFS = {dBFS:.2f} dBFS") # 計算結果:dBFS = -82.77 dBFS

執行之后結果:

$ python test.py
計算結果:dBFS = -82.77 dBFS

文章CSDN:庵中十三居士

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80398.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL數據庫】C/C++連接數據庫

MySQL要想在C/C下使用,就必須要有 MySQL 提供的頭文件和相關的庫。 在Ubuntu系統上,使用 apt install mysql-server 安裝MySQL服務器后,僅安裝了MySQL數據庫服務本身,并沒有安裝MySQL開發所需的庫和頭文件。因此,在嘗試…

Kubernetes調度策略深度解析:NodeSelector與NodeAffinity的正確打開方式

在Kubernetes集群管理中,如何精準控制Pod的落點?本文將深入解析兩大核心調度策略的差異,并通過生產案例教你做出正確選擇。 一、基礎概念快速理解 1.1 NodeSelector(節點選擇器) 核心機制:通過標簽硬匹配…

Golang的linux運行環境的安裝與配置

很多新手在學go時,linux下的配置環境一頭霧水,總結下,可供參考! --------------------------------------Golang的運行環境的安裝與配置-------------------------------------- 將壓縮包放在/home/tools/下 解壓 tar -zxvf g…

自定義實現elementui的錨點

背景 前不久有個需求,上半部分是el-step步驟條,下半部分是一些文字說明,需要實現點擊步驟條中某個步驟自定義定位到對應部分的文字說明,同時滾動內容區域的時候還要自動選中對應區域的步驟。element-ui-plus的有錨點這個組件&…

Oracle Fusion常用表

模塊表名表描述字段說明sodoo_headers_all銷售訂單頭表sodoo_lines_all銷售訂單行表sodoo_fulfill_lines_all銷售訂單明細行表popo_headers_all采購訂單頭表popo_lines_all采購訂單行表popo_line_locations_all采購訂單分配表popo_distributions_all采購訂單發運表invEGP_SYSTE…

面試常問系列(一)-神經網絡參數初始化-之-softmax

背景 本文內容還是對之前關于面試題transformer的一個延伸,詳細講解一下softmax 面試常問系列(二)-神經網絡參數初始化之自注意力機制-CSDN博客 Softmax函數的梯度特性與輸入值的幅度密切相關,這是Transformer中自注意力機制需要縮放點積結果的關鍵原…

5.9-selcct_poll_epoll 和 reactor 的模擬實現

5.9-select_poll_epoll 本文演示 select 等 io 多路復用函數的應用方法,函數具體介紹可以參考我過去寫的博客。 先綁定監聽的文件描述符 int sockfd socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serveraddr; memset(&serveraddr, 0, sizeof(struc…

Python基礎語法(上)

常量和表達式 我們可以使用python來進行一些 - * / %的一些運算 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) python中的運算規則與數學當中一致,先乘除后加減,有括號的先計算括號里面的。 形如 1 2 - 3 這樣是算式, 在編程語言中稱為 表達式,…

數圖閃耀2025深圳CCFA中國零售博覽會:AI+零售數字化解決方案引發現場熱潮

展會時間:2025年5月8日—10日 地點:深圳國際會展中心(寶安新館) 【深圳訊】5月8日,亞洲規模最大的零售行業盛會——2025 CCFA中國零售博覽會在深圳盛大開幕。本屆展會匯聚全球25個國家和地區的900余家參展商&#xff…

方法:批量識別圖片區域文字并重命名,批量識別指定區域內容改名,基于QT和阿里云的實現方案,詳細方法

基于QT和阿里云的圖片區域文字識別與批量重命名方案 項目場景 ??企業檔案管理??:批量處理掃描合同、發票等文檔,根據編號或關鍵信息自動重命名文件??醫療影像管理??:識別X光、CT等醫學影像中的患者信息,按姓名+檢查日期重命名??電商訂單處理??:從訂單截圖中提…

Mybatis解決以某個字段存在,批量更新,不存在批量插入(高效)(一)

背景 在開發企業級應用時,我們經常需要處理批量數據的插入和更新操作。傳統的逐條處理方式性能低下,而簡單的REPLACE INTO或INSERT ... ON DUPLICATE KEY UPDATE在某些場景下又不夠靈活。本文將介紹一種基于臨時表的高效批量插入/更新方案,解…

JVM、JRE、JDK的區別

JVM JVM全稱Java虛擬機(Java Virtual Machine, JVM),它是運行java字節碼的虛擬機,JVM針對不同的系統有不同的實現,目的運行相同的字節碼有同樣的結果,JVM是“一次編譯,到處運行”實現的關鍵。如下不同的編程語言編譯生成字節碼文…

神經元和神經網絡定義

在深度學習中,神經元和神經網絡是構成神經網絡模型的基本元素。讓我們從基礎開始,逐步解釋它們的含義和作用。 1?? 神經元是什么? 神經元是神經網絡中的基本計算單元,靈感來自于生物神經系統中的神經元。每個人的腦中有數以億…

CDGP重點知識梳理

寫在前面 全文11700字,共82個重點知識 目 錄 考點分布 考試要求 第一章 數據管理-5%

Ubuntu 22.04 安裝配置遠程桌面環境指南

在云服務器或遠程主機上安裝圖形化桌面環境,可以極大地提升管理效率和用戶體驗。本文將詳細介紹如何在 Ubuntu 22.04 (Jammy Jellyfish) 系統上安裝和配置 Xfce4 桌面環境,并通過 VNC 實現遠程訪問。 系統環境 操作系統:Ubuntu 22.04 LTS (Jammy Jellyfish)架構:AMD64安裝…

node提示node:events:495 throw er解決方法

前言 之前開發的時候喜歡使用高版本,追求新的東西,然后回頭運行一下之前的項目提示如下 項目技術棧:node egg 報錯 node:events:495 throw er; // Unhandled error event ^ Error: ENOENT: no such file or directory, scandir F:\my\gi…

【軟件設計師:軟件工程】9.軟件開發模型與方法

一、軟件危機與軟件工程 軟件危機與軟件工程是計算機科學發展中密切相關的兩個概念。 1.軟件危機(Software Crisis) 背景:20世紀60年代至80年代,隨著計算機硬件性能提升,軟件規模與復雜度劇增,傳統開發方法難以應對,導致大量項目失敗。 表現: 成本失控:開發周期長、…

范式之殤-關系代數與參照完整性在 Web 后臺的落寞

最近參加了一個PostgreSQL相關的茶會,感慨良多。原本話題是PostgreSQL 在 SELECT 場景中憑借其成熟的查詢優化器、豐富的功能特性和靈活的執行策略,展現出顯著優勢。在窗口函數(Window Functions)、JOIN 優化、公共表表達式&#…

WebRTC工作原理詳細介紹、WebRTC信令交互過程和WebRTC流媒體傳輸協議介紹

簡介 WebRTC(Web Real-Time Communication)是一項允許在網頁瀏覽器之間進行音視頻通信的技術,基本不需要安裝額外的插件。它的核心特點是支持低延遲的點對點(P2P)通訊,常用于視頻聊天、實時文件共享、多人…

【大語言模型ChatGPT4/4o 】“AI大模型+”多技術融合:賦能自然科學暨ChatGPT在地學、GIS、氣象、農業、生態與環境領域中的應用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千問為代表AI大語言模型帶來了新一波人工智能浪潮,可以面向科研選題、思維導圖、數據清洗、統計分析、高級編程、代碼調試、算法學習、論文檢索、寫作、翻譯、潤色、文獻輔助…