普及知識
什麼是訊號分析?
將一個複雜訊號分解成若干簡單訊號分量之和,或者用有限的一組參量去表示一個複雜波形的訊號,從這些簡單的分量組成情況去考察複雜訊號的特性。
對訊號分析的過程實際上就是一個特徵提取的過程,從一段複雜的波形中提取我們需要的資訊。
為什麼要分析訊號?
- 訊號分析是獲取訊號特徵資訊的重要手段,透過訊號分析,可以得到複雜訊號的基本特徵。
- 訊號分析是獲取訊號源特徵資訊的重要手段,可以透過對訊號特徵的詳細瞭解,得到訊號源特性、執行情況等資訊。
- 深度學習的第一步是要收集資料的特徵(feature)。所以需要透過訊號分析,提取資料集特徵。
怎樣進行訊號分析?
訊號分析方式────根據訊號的型別選擇
- 訊號平穩────由於訊號不隨時變化,可以在時域和頻域直接分析;
- 訊號不穩────由於訊號隨時變化,需要將訊號拆解分析
- 時間維度拆解,利用平均瞬時功率訊號,可以知道訊號傳播規律
- 頻域維度拆解,按照不同頻帶的濾波器進行濾波處理
- 時頻域緯度拆解,同時包含訊號隨時間和頻域變化的規律
訊號的頻域拆解
訊號的頻率成分
- 任何訊號都可以看作是多個不同頻率的簡單波形(如正弦波)的疊加
- 每個頻率的波形都有其特定的振幅
包絡(Envelope)
包絡是在訊號處理中描述訊號強度變化的曲線或輪廓。
包絡曲線是在訊號波形的最高點和最低點之間繪製一條平滑曲線,它可以用來描述訊號的振幅隨時間變化的趨勢.
包絡有助於捕獲訊號的宏觀變化特徵,忽略瞬時波動,適合分析具有調幅特性或其他週期性變化的訊號。
精細結構
指音訊中的高頻細節,如每個振動週期內的變化。
訊號的包絡結構和精細結構與訊號頻率的關係
多個不同頻率訊號的疊加,由於和差化積,會形成包絡結構和精細結構。
決定包絡結構(261.63Hz):
決定精細結構(3401.19Hz):
訊號的包絡結構是由低頻訊號決定的,訊號的精細結構是由高頻訊號決定的。
在語音識別中,主要透過訊號的包絡結構來區分不同的音訊訊號,因此在識別領域更關注低頻的作用。
訊號的時域分析
分幀(framing)
什麼是分幀?
分幀是指:將訊號按照時間尺度分割,劃分為多個較短的、固定長度的幀。
也就是將訊號按照時間尺度劃分成多個段,每一段的長度就是幀長frame_size。
分出的段的數量,就是幀的個數frame_num。
如果不考慮重疊分幀,則該訊號的總取樣點數為frame_size * frame_num。
為什麼要分幀?
由於音訊訊號是一個隨時間變化的連續訊號,而我們通常需要在一個較短的時間視窗內去分析,來捕捉訊號的時間變化特性。
分幀重疊(Overlapping)
分幀重疊是指相鄰幀之間存在部分重疊,這樣可以確保幀與幀之間的過渡區域不會丟失重要資訊。重疊部分有助於平滑的過渡,減少由分幀引入的邊界效應。
重疊大小(Overlap Size):相鄰幀之間重疊的樣本數
幀移(Hop Size):每次移動的樣本數,即相鄰幀的開始位置之間的距離。
幀數計算公式
設:
- \(N\)為音訊訊號的總樣本數
- \(L\)為每幀的長度
- \(O\)為幀與幀的重疊大小
幀移(Hop Size)可以表示為:
幀數\(F\)的計算公式為:
公式推導
為了計算幀數,我們需要知道音訊訊號在分幀後的幀數。
基本思路是:從訊號起始位置開始,每次移動幀移(H)個樣本,直到覆蓋整個訊號。
假設有總樣本數\(N\),幀長度\(L\),重疊大小\(O\),幀移\(H=L-O\)。
-
初步分析:
我們要覆蓋從0到\(N-1\)的所有樣本,從而計算總的幀移動次數。考慮到幀開始的位置
- 第一個幀的起始位置:\(0\)
- 第二個幀的起始位置:\(H\)
- 第三個幀的起始位置:\(2H\)
- ...
- 第k個幀的起始位置:\((k-1)H\)
-
覆蓋整個訊號
為了覆蓋整個訊號,我們希望最後一個幀的起始位置滿足:\((k-1)H + L\ge N\)
也就是說,k必須滿足:\(k\ge \frac{N-L}{H}+1\)
-
得出總幀數計算公式
為了確保所有的訊號樣本的覆蓋,我們需要向上取整:
\[F=\left\lceil\frac{N-L}{H}+1\right\rceil \]由於\(H=L-O\),化簡得:
\[F=\left\lceil\frac{N-O}{H}\right\rceil \]
幅值包絡(Amplitude Envelope)
幅值包絡是描述訊號振幅隨時間變化的曲線,能夠反映一個訊號整體的振幅結構。
幅值包絡是一條平滑的曲線,代表訊號在每個時間點的最大幅值,它定義了訊號振幅的外部輪廓軌跡。
時域與頻域的關係
相位與振幅
正弦波就是一個圓周運動在一個二維平面的投影。
任意時刻的相位:\(\phi\)
任意時刻的幅度:\(\sin{\phi}\times振幅A\)
頻域的基本單元
頻域的基本單元可以理解為一個是始終在旋轉的圓。
快速傅立葉變換(Fast Fourier Transform)
FFT可以將訊號從原始域(通常是時間或空間)轉換到頻域或逆轉換回來。
任意波形的FFT
相位差
相位差不是時間差,透過求時間差佔週期的比例,乘\(2\pi\)就得到了相位差。
頻譜圖(Spectrogram)
頻譜圖通常用來表示訊號在頻域上的能量分佈。
它顯示了訊號各個頻率分量的振幅或功率。一般是針對整個訊號,或者某一個固定時間視窗。
頻譜圖是一個二維影像,橫軸是訊號頻率,縱軸是訊號振幅。
語譜圖
語譜圖是頻譜圖在時間軸上的延伸。
時頻域分析
為什麼不能只依靠頻域分析?
頻譜雖然可以看出訊號的頻率分佈,但是由於丟失了時域資訊,因此無法看出頻率分佈隨時間的變化。
時域分析方法
幅值包絡法
學習程式碼
其餘方法待續
時頻域分析方法
短時傅立葉變換(STFT)
短時傅立葉變換(Short-Time Fourier Transform,STFT)
小波變換(WT)
Wigner分佈
聲音
聲音包括兩個基本屬性:頻率和振幅
角頻率
角頻率與頻率的關係:
簡單理解:
\(\omega\)表示rad/s,f表示完成多少次/s,那麼每轉完一圈,也就是走了2\(\pi\)rad,就完成了一次。因此
即
響度(Loudness)
響度是指人耳對聲音強弱的主觀感受。
它不僅與聲音的物理屬性有關,還與人耳的感知特性有關。
響度的主觀感受取決於多個因素,包括聲壓級(Sound Pressure Level, SPL)、頻率和時間等。
聲壓級
聲壓級是聲音強度的一個物理量,通常以分貝(dB)為單位。
聲壓級越高,響度感知通常越大。
頻率
人耳對不同頻率的聲音敏感度不同。
一般來說,人耳對1kHz到4kHz之間的聲音最為敏感。
同樣聲壓級的聲音,在這個頻率範圍內會會被感知為更響。
時間
持續時間對響度感知也有影響。
持續時間較短的聲音可能會被感知為不如等聲壓級的長時間聲音響。
人耳的非線性特徵
人耳的響度感知是非線性的。
這意味著響度的增加與聲壓級的增加不是簡單的線性關係。
通常使用等響曲線(Fletcher-Munson曲線)來描述這一特性,這些曲線顯示了人耳在不同頻率下對相對響度的感知。
頻譜
頻譜就是頻域影像
頻域
可以把某一時刻的聲波拆分成一系列不同頻率的正弦波,
頻域關注的就是每個頻率的正弦波的振幅(或者相位)
時頻譜
Time-Frequency Spectrum
一個用來表示訊號在時域和頻域屬性的工具,它能在同時考慮時間和頻率的情況下分析訊號。
如何看時頻圖
音訊遮掩效應
功率譜 (Power Spectrum)
什麼是功率?
在訊號處理中,功率通常表示訊號的能量。
對於一個頻率成分,功率通常是該頻率成分振幅的平方。
什麼是功率譜?
功率譜是描述訊號在不同頻率下功率分佈的影像或函式。
它揭示了訊號的頻率成分及對應的能量大小。
功率譜通常用來分析訊號的頻率特性,比如找出訊號中的主要頻率成分、噪聲特性等
如何計算功率譜?
- 對訊號做傅立葉變換:對時域訊號進行傅立葉變換,得到頻域表示。
- 計算功率譜密度:將傅立葉變換結果的振幅平方來計算功率譜密度(Power Spectral Density)。
- 歸一化:有時需要對功率譜進行歸一化處理,便於比較不同訊號的功率譜。
梅爾頻譜
梅爾刻度
梅爾刻度(mel scale)是一種基於頻率定義的非線性刻度單位,目的是表示人耳對音高(pitch)等距變化的感官。
梅爾刻度與線性的頻率刻度────赫茲(Hz)之間可以進行近似的數學運算,用來表述聲音訊率與人類感知的關係。
頻率f與梅爾刻度m的轉換公式
梅爾刻度將1000Hz,且高於人耳聽閾值40分貝的聲音訊號,定為1000mel的參考點。在頻率500Hz以上時,隨著頻率的增加,人耳每感覺到等量的音高變化,所需要的頻率變化愈來愈大。這導致在赫茲刻度500Hz往上的四個八度(一個八度即為兩倍的頻率),只對應梅爾刻度上的兩個八度。Mel的名字來源於單詞melody,表示這個刻度是基於音高比較而被創造的。
什麼是梅爾頻譜?
梅爾頻譜(Mel Spectrum)是將聲音訊號的頻譜透過梅爾刻度進行轉換後得到的結果,更貼近人類的聽覺感知特性。在語音識別、語音合成等領域有重要應用。
動態時間規整(DTW)
常見音訊檔案
- wav
- mp3
- ogg
- wma
- flac
如何讓計算機聽懂語音?
語音訊號是模擬量,透過取樣、量化、編碼可以將模擬量轉換為數字量
取樣率(Sample rate)
單位時間內從連續訊號中取樣的次數
奈奎斯特定理
只要取樣頻率大於等於取樣訊號中最高頻率的兩倍,原訊號既可無失真恢復
即 音訊檔案能達到的最高頻率是其取樣率的一半
與音訊相關的庫
librosa
[!NOTE]
舊版本只支援wav,可以使用ffmpeg將其他型別的音訊檔案轉換成wav(新版本自帶ffmpeg)
librosa.effects.trim // 消除音訊前後靜音部分
librosa.effects.split // 找到所有非靜音的下標區間
librosa.effects.remix // 根據多個下標區間來擷取音訊,與split結合可以消除音訊中所有的靜音部分
audioread
wave
soundfile
scipy
pyaudio
與音訊相關的領域
語音合成TTS
Text-To-Speech
簡單實現:將處理的文字作為輸入,輸出對應音訊的頻譜,再由頻譜轉化成聲音
作用:將文字轉換成口語
用途:
- 虛擬助手
- 有聲讀物
- 無障礙
常見的TTS系統:
WaveNet | |
---|---|
GPT |
語音識別ASR
Automatic-Speech-Recognition
音樂生成
聲音分析與處理
語音轉換VC
voice conversion