時(shí)頻分析(TFA, time frequency analysis)的發(fā)展目標(biāo)之一,就是努力提高時(shí)頻分辨率(另一個(gè)目標(biāo)是信號(hào)能夠被完美重構(gòu)。做到完美重構(gòu)的話,可以使得該TFA技術(shù)用于信號(hào)去噪,模態(tài)分解等方面。)。時(shí)頻譜具有高時(shí)頻分辨率,直觀地可以理解為時(shí)頻平面上的高能量聚集性,所以一定程度上,高能量聚集性可以表征高時(shí)頻分辨率(高能量聚集性不絕對(duì)表示高時(shí)頻分辨率,二者沒(méi)有絕對(duì)聯(lián)系)。在時(shí)頻分析中, Rényi entropy 可用于度量時(shí)頻能量聚集度。
為固鎮(zhèn)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及固鎮(zhèn)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、做網(wǎng)站、固鎮(zhèn)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Rényi entropy 由Alfred Renyi在其1961年的論文中提出,作為香農(nóng)熵的一種推廣,其離散形式如下
記時(shí)頻能量密度為 ,時(shí)頻能量聚集度定義為
Rényi entropy 非線性單調(diào)遞減,因此 越小,表示時(shí)頻能量聚集度越高。
關(guān)于上式的討論,即 Rényi entropy 在時(shí)頻分析中的應(yīng)用,見(jiàn)文獻(xiàn)[3].
參考文獻(xiàn):
[1] Renyi Entropy Renyi Divergence - 知乎 (zhihu.com)
[2] WANG S, CHEN X, CAI G, 等. Matching Demodulation Transform and SynchroSqueezing in Time-Frequency Analysis[J/OL]. IEEE Transactions on Signal Processing, 2014, 62(1): 69-84. .
[3] BARANIUK R G, FLANDRIN P, JANSSEN A J E M, 等. Measuring time-frequency information content using the Renyi entropies[J/OL]. IEEE Transactions on Information Theory, 2001, 47(4): 1391-1409. .
(1) 傅立葉級(jí)數(shù):法國(guó)數(shù)學(xué)家 傅里葉 發(fā)現(xiàn),任何周期函數(shù)都可以用 正弦函數(shù) 和 余弦函數(shù) 構(gòu)成的無(wú)窮級(jí)數(shù)來(lái)表示(選擇正弦函數(shù)與余弦函數(shù)作為基函數(shù)是因?yàn)樗鼈兪钦坏模?,后世稱傅里葉級(jí)數(shù)為一種特殊的三角級(jí)數(shù),根據(jù) 歐拉公式 ,三角函數(shù)又能化成指數(shù)形式,也稱傅立葉級(jí)數(shù)為一種指數(shù)級(jí)數(shù)。傅里葉級(jí)數(shù),在時(shí)域是一個(gè)周期且連續(xù)的函數(shù),而在頻域是一個(gè)非周期離散的函數(shù)。
(2) 傅立葉變換:將一個(gè)時(shí)域非周期的連續(xù)信號(hào),轉(zhuǎn)換為一個(gè)在頻域非周期的連續(xù)信號(hào)。
(3) 頻域,時(shí)域與相位之間的關(guān)系:
(4) 歐拉公式:
(1) 傅里葉變換的 不足
即我們知道傅里葉變化可以分析信號(hào)的頻譜,那么為什么還要提出小波變換?答案就是 方沁園 所說(shuō)的,“對(duì) 非平穩(wěn) 過(guò)程,傅里葉變換有局限性”。
如下圖:
做完FFT(快速傅里葉變換)后,可以在頻譜上看到清晰的四條線,信號(hào)包含四個(gè)頻率成分。
一切沒(méi)有問(wèn)題。但是,如果是 頻率隨著時(shí)間變化的非平穩(wěn)信號(hào) 呢?
如上圖,最上邊的是頻率始終不變的平穩(wěn)信號(hào)。而下邊兩個(gè)則是頻率隨著時(shí)間改變的非平穩(wěn)信號(hào),它們同樣包含和最上信號(hào)相同頻率的四個(gè)成分。
做FFT后,我們發(fā)現(xiàn)這三個(gè)時(shí)域上有巨大差異的信號(hào),頻譜(幅值譜)卻非常一致。尤其是下邊兩個(gè)非平穩(wěn)信號(hào),我們從頻譜上無(wú)法區(qū)分它們,因?yàn)樗鼈儼乃膫€(gè)頻率的信號(hào)的成分確實(shí)是一樣的,只是出現(xiàn)的先后順序不同。
可見(jiàn),傅里葉變換處理非平穩(wěn)信號(hào)有天生缺陷。它只能獲取 一段信號(hào)總體上包含哪些頻率的成分 ,但是 對(duì)各成分出現(xiàn)的時(shí)刻并無(wú)所知 。因此時(shí)域相差很大的兩個(gè)信號(hào),可能頻譜圖一樣。
然而平穩(wěn)信號(hào)大多是人為制造出來(lái)的,自然界的大量信號(hào)幾乎都是非平穩(wěn)的,所以在比如生物醫(yī)學(xué)信號(hào)分析等領(lǐng)域的論文中,基本看不到單純傅里葉變換這樣naive的方法。
(2) 短時(shí)傅里葉變換(Short-time Fourier Transform, STFT)
一個(gè)簡(jiǎn)單可行的方法就是—— 加窗 。我又要套用 方沁園 同學(xué)的描述了,“把整個(gè)時(shí)域過(guò)程分解成無(wú)數(shù)個(gè)等長(zhǎng)的小過(guò)程,每個(gè)小過(guò)程近似平穩(wěn),再傅里葉變換,就知道在哪個(gè)時(shí)間點(diǎn)上出現(xiàn)了什么頻率了?!边@就是短時(shí)傅里葉變換。
時(shí)域上分成一段一段做FFT,不就知道頻率成分隨著時(shí)間的變化情況了嗎!
用這樣的方法,可以得到一個(gè)信號(hào)的時(shí)頻圖了:
圖上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四個(gè)頻域成分,還能看到出現(xiàn)的時(shí)間。兩排峰是對(duì)稱的,所以大家只用看一排就行了。
是不是棒棒的?時(shí)頻分析結(jié)果到手。但是STFT依然有缺陷。
使用STFT存在一個(gè)問(wèn)題,我們應(yīng)該用多寬的窗函數(shù)?
窗太寬太窄都有問(wèn)題:
窗太窄,窗內(nèi)的信號(hào)太短,會(huì)導(dǎo)致頻率分析不夠精準(zhǔn),頻率分辨率差。窗太寬,時(shí)域上又不夠精細(xì),時(shí)間分辨率低。
(這里插一句,這個(gè)道理可以用海森堡不確定性原理來(lái)解釋。類似于我們不能同時(shí)獲取一個(gè)粒子的動(dòng)量和位置,我們也不能同時(shí)獲取信號(hào)絕對(duì)精準(zhǔn)的時(shí)刻和頻率。這也是一對(duì)不可兼得的矛盾體。我們不知道在某個(gè)瞬間哪個(gè)頻率分量存在,我們知道的只能是在一個(gè)時(shí)間段內(nèi)某個(gè)頻帶的分量存在。 所以絕對(duì)意義的瞬時(shí)頻率是不存在的。)
所以 窄窗口時(shí)間分辨率高、頻率分辨率低 , 寬窗口時(shí)間分辨率低、頻率分辨率高 。對(duì)于時(shí)變的非穩(wěn)態(tài)信號(hào), 高頻適合小窗口,低頻適合大窗口 。然而 STFT的窗口是固定的 ,在一次STFT中寬度不會(huì)變化,所以STFT還是無(wú)法滿足非穩(wěn)態(tài)信號(hào)變化的頻率的需求。
(3) 小波變換
那么你可能會(huì)想到,讓窗口大小變起來(lái),多做幾次STFT不就可以了嗎?!沒(méi)錯(cuò),小波變換就有著這樣的思路。
但事實(shí)上小波并不是這么做的(關(guān)于這一點(diǎn), 方沁園 同學(xué)的表述“小波變換就是根據(jù)算法,加不等長(zhǎng)的窗,對(duì)每一小部分進(jìn)行傅里葉變換”就不準(zhǔn)確了。小波變換并沒(méi)有采用窗的思想,更沒(méi)有做傅里葉變換。)
至于為什么不采用可變窗的STFT呢,我認(rèn)為是因?yàn)檫@樣做冗余會(huì)太嚴(yán)重, STFT做不到正交化 ,這也是它的一大缺陷。
于是小波變換的出發(fā)點(diǎn)和STFT還是不同的。 STFT是給信號(hào)加窗,分段做FFT ;而小波直接把傅里葉變換的基給換了——將 無(wú)限長(zhǎng)的三角函數(shù)基 換成了 有限長(zhǎng)的會(huì)衰減的小波基 。這樣 不僅能夠獲取頻率 ,還可以 定位到時(shí)間 了~
這就是為什么它叫“小波”,因?yàn)槭呛苄〉囊粋€(gè)波嘛~
從公式可以看出,不同于傅里葉變換,變量只有頻率ω,小波變換有兩個(gè)變量:尺度a(scale)和平移量 τ(translation)。 尺度 a控制小波函數(shù)的 伸縮 , 平移量 τ控制小波函數(shù)的 平移 。 尺度 就對(duì)應(yīng)于 頻率 (反比), 平移量 τ就對(duì)應(yīng)于 時(shí)間 。
當(dāng)伸縮、平移到這么一種重合情況時(shí),也會(huì)相乘得到一個(gè)大的值。這時(shí)候和傅里葉變換不同的是,這 不僅可以知道信號(hào)有這樣頻率的成分,而且知道它在時(shí)域上存在的具體位置。
而當(dāng)我們?cè)诿總€(gè)尺度下都平移著和信號(hào)乘過(guò)一遍后,我們就知道信號(hào) 在每個(gè)位置都包含哪些頻率成分 。
看到了嗎?有了小波,我們從此再也不害怕非穩(wěn)定信號(hào)啦!從此可以做時(shí)頻分析啦!
做傅里葉變換只能得到一個(gè) 頻譜 ,做小波變換卻可以得到一個(gè) 時(shí)頻譜 !
小波還有一些好處,比如,我們知道對(duì)于突變信號(hào),傅里葉變換存在 吉布斯效應(yīng) ,我們用無(wú)限長(zhǎng)的三角函數(shù)怎么也擬合不好突變信號(hào)。
鏈接:
(1) PSNR(峰值信噪比)
PSNR: Peak Signal to Noise Ratio,一種全參考的圖像質(zhì)量評(píng)價(jià)指標(biāo)。?
其中,MSE表示當(dāng)前圖像X和參考圖像Y的均方誤差(Mean Square Error),H、W分別為圖像的高度和寬度;n為每像素的比特?cái)?shù),一般取8,即像素灰階數(shù)為256. PSNR的單位是dB,數(shù)值越大表示失真越小。
PSNR是最普遍和使用最為廣泛的一種圖像客觀評(píng)價(jià)指標(biāo),然而它是基于對(duì)應(yīng)像素點(diǎn)間的誤差,即基于誤差敏感的圖像質(zhì)量評(píng)價(jià)。由于并未考慮到人眼的視覺(jué)特性(人眼對(duì)空間頻率較低的對(duì)比差異敏感度較高,人眼對(duì)亮度對(duì)比差異的敏感度較色度高,人眼對(duì)一個(gè)區(qū)域的感知結(jié)果會(huì)受到其周圍鄰近區(qū)域的影響等),因而經(jīng)常出現(xiàn)評(píng)價(jià)結(jié)果與人的主觀感覺(jué)不一致的情況。
(2) SSIM(結(jié)構(gòu)相似性)
SSIM: structural similarity index, 是一種衡量?jī)煞鶊D像相似度的指標(biāo)。它分別從亮度、對(duì)比度、結(jié)構(gòu)三方面度量圖像相似性。
結(jié)構(gòu)相似性的范圍為-1到1。當(dāng)兩張圖像一模一樣時(shí),SSIM的值等于1。
其他指標(biāo):
這是python的matplotlib里的一個(gè)畫wav文件的時(shí)頻分析(specgram)的函數(shù)。和matlab里的那個(gè)差不多。使用超級(jí)方便,自動(dòng)就做好了短時(shí)傅立葉變換(short
time fourier
transform)~函數(shù)用法具體可參照
關(guān)于短時(shí)傅立葉變換的具體內(nèi)容可google之~下面介紹程序。
#首先import各種library。wave和struct都是安裝python2.6自帶的。scipy可以在
#下載。pylab可在下載。都是非常#強(qiáng)大的包包啊~~
import wave
import struct
from scipy import *
from pylab import *
#讀取wav文件,我這兒讀了個(gè)自己用python寫的音階的wav
filename = '/Users/rongjin/Desktop/scale.wav'
wavefile = wave.open(filename, 'r') # open for writing
#讀取wav文件的四種信息的函數(shù)。期中numframes表示一共讀取了幾個(gè)frames,在后面要用到滴。
nchannels = wavefile.getnchannels()
sample_width = wavefile.getsampwidth()
framerate = wavefile.getframerate()
numframes = wavefile.getnframes()
#建一個(gè)y的數(shù)列,用來(lái)保存后面讀的每個(gè)frame的amplitude。
y = zeros(numframes)
#for循環(huán),readframe(1)每次讀一個(gè)frame,取其前兩位,是左聲道的信息。右聲道就是后兩位啦。
#unpack是struct里的一個(gè)函數(shù),用法詳見(jiàn)。簡(jiǎn)單說(shuō)來(lái)
就是把#packed的string轉(zhuǎn)換成原來(lái)的數(shù)據(jù),無(wú)論是什么樣的數(shù)據(jù)都返回一個(gè)tuple。這里返回的是長(zhǎng)度為一的一個(gè)
#tuple,所以我們?nèi)∷牡诹阄弧?/p>
for i in range(numframes):
val =
wavefile.readframes(1)
left =
val[0:2]
#right = val[2:4]
v =
struct.unpack('h', left )[0]
y[i] =
v
#framerate就是44100,文件初讀取的值。然后本程序最關(guān)鍵的一步!specgram!實(shí)在太簡(jiǎn)單了。。。
Fs = framerate
specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
show()
時(shí)頻分析
時(shí)頻分析(jtfa)即時(shí)頻聯(lián)合域分析(joint
time-frequency
analysis)的簡(jiǎn)稱,作為分析時(shí)變非平穩(wěn)信號(hào)的有力工具,
成為現(xiàn)代信號(hào)處理研究的一個(gè)熱點(diǎn),它作為一種新興的信號(hào)處理方法,近年來(lái)受到越來(lái)越多的重視。時(shí)頻分析方法提供了時(shí)間域與
頻率域的聯(lián)合分布信息,清楚地描述了信號(hào)頻率隨時(shí)間變化的關(guān)系。
時(shí)頻分析的基本思想是:設(shè)計(jì)時(shí)間和頻率的聯(lián)合函數(shù),用它
同時(shí)描述信號(hào)在不同時(shí)間和頻率的能量密度或強(qiáng)度。時(shí)間和頻率的這種聯(lián)合函數(shù)簡(jiǎn)稱為時(shí)頻分布。利用時(shí)頻分布來(lái)分析信號(hào),能在
每一時(shí)間指示出信號(hào)在瞬時(shí)頻率串附近的能量聚集情況,并且能夠進(jìn)行時(shí)頻濾波和時(shí)變信號(hào)綜合。
信號(hào)時(shí)頻分析的重要性
(1)時(shí)間和頻率是描述信號(hào)的兩個(gè)最重要的物理量。
(2)信號(hào)的時(shí)域和頻域之間具有緊密的聯(lián)系。
時(shí)頻分析的主要方法
(1)窗口傅立葉變換(gabor變換);
(2)連續(xù)小波變換;