書接上回:稀疏傅里葉變換原理說明(一)
三、流程中各部分詳解
3.3 降采樣FFT
降采樣指的是頻域降采樣,當然這一步也是在時域上進行操作的。先看公式:
$$y_{i}=\sum_{j=0}^{\frac{N}{B}-1}x_{i+Bj}$$
上述操作等價於
$$\hat{y}_{i}=\hat{x}_{i(n/B)}, 其中 i=0,1,2,3,...,B-1$$
需要說明的是,Â的含義是對信號序列A進行傅里葉變換后的結果,上同。這里舉個例子:
這個例子中,N=4096,濾波器長度ω=384,分筐數B=64。這里與公式稍有出入是因為:之前在濾波器處提到,從信號序列中取出與濾波器序列長度相同的部分序列進行處理,而降采樣在濾波之后,因此降采樣也沒必要對所有的信號序列進行處理,只需要對被濾波器取出來的那部分進行處理即可,因此公式實際為:
$$y_{i}=\sum_{j=0}^{\frac{ \omega }{B}-1}x_{i+Bj}, 其中 i=0,1,2,3,...,B-1$$
既然這一步叫降采樣FFT,因此FFT是不能少的,而fft的對象就是經過了求和后的序列y。原本需要進行N點FFT運算,現在只需要進行B點FFT運算,這也是SFT提升運算速度的關鍵之一。
注:分筐
在SFT的理論框架中,將頻譜重排和濾波操作合稱為分筐。分筐的含義是指,原始信號頻譜中譜線所在的位置(1~N),經過一系列變換后,變到了另一個新位置之中(1~B),每一個新位置的幅值都是由原信號頻譜中N/B個位置的幅值按比例相加得到的。正因為這種相加特性,稀疏性的作用就體現出來了:因為大部分點的幅值都是趨近於0,因此每個筐中有很大概率只會有一條譜線。
論文《稀疏傅里葉變換理論及研究進展》【1】中有一張很好的圖能描述以上過程:
左圖中虛線是原始信號所在的位置和幅值,實線是經過濾波器卷積后頻譜,總點數N=256、分筐數B=8,因此一個筐中有256/8=32個點進行相加。時域上的相加操作等效於頻域上的采樣操作,采樣點分別是0、32、64、96、128、160、192、224,也就是右圖中的結果。采樣點數從256變成了8,明顯是一個降低的過程,因此這一過程也被稱為降采樣。
3.4 定位
定位和估值問題的實質都是從B個筐中,想辦法恢復或者模擬出原信號。
原信號譜線所在位置經“分筐”后變到一個新位置,是一個映射過程,又因為每個位置都和一個幅值對應,所以這個過程與“哈希映射”非常相似。利用這種思想進行信號恢復的方法稱為“哈希映射法”。除了這種方法外,還有其他恢復方法,但使用“哈希映射法”居多。有的恢復方法可能不分為“定位”和“求值”,統一叫做“重構”,這也是在稀疏傅里葉變換原理說明(一)中的理論框架圖將“定位”和“求值”用虛線框住的原因。
使用“哈希映射法”進行定位的流程如下。
首先,對降采樣FFT后的信號序列z_hat(這個hat后綴指的是該字母Â頭上的玩意,指代FFT后的頻域序列,懶得編輯公式了)按照幅值大小進行排序,取出總計dK個最大值所在的坐標。這里的K指的是稀疏度,d一般是一個大於零的整數,用來確定運算精度。
這是取dK個坐標而不是K個坐標是因為:經過頻譜重排、濾波器、降采樣等操作,不可避免地會生成額外的頻率分量,多取一些坐標利於排查出哪些“筐”中是有用信號哪些“筐”是無用信號。但d取得越大,后續計算速度就越慢。下圖中的例子中,K=1,d=2,因此取最大兩個值的坐標J(1)=25和J(2)=26;
由之前的分析可知,每個筐中都是N/B個頻率成分的和,因此一個筐對應有N/B個坐標值,利用函數
low = mod(ceil((J(i) - 1 - 0.5) * N / B), N)
high = mod(ceil((J(i) - 1 + 0.5) * N / B), N)
確定需要進行逆映射的坐標位置的集合。本例中N=4096,B=64,一個筐中含有64個位置。J(1)=25對應的范圍為1504~1567,J(2)=26對應的范圍為1568~1632,再分別對這些范圍內的值進行逆映射,就可以對應上原信號的頻率了。逆映射公式為:
$$j=(i \ast \sigma ^{-1}) \% N$$
σ-1是σ關於模N下的逆元,而這個σ就是最開始進行頻譜重排的縮放因子。
以J(1)為例,逆映射的結果是:
坐標范圍 | 1504 | 1505 | 1506 | 1507 | 1508 | 。。。 | 1566 | 1567 |
原始頻率 | 417 | 1700 | 2983 | 170 | 1453 | 。。。 | 2139 | 3422 |
因此,第25號“筐”中的幅值是原始信號中頻率成分的位置在417、1700、2983、170。。。等的和。J(2)同理。
這里需要說明的是,這只是一次“定位”得到的結果。一個頻譜重排的縮放因子σ對應一個逆元σ-1,對應B個筐,對應dK個最大值的坐標,對應dkN/B個原始信號的頻率成分。SFT作為一種估計算法,是不可能單靠一次“定位”就能得到原始信號中有用頻率成分的位置的,需要統計多次“定位”的結果。每個“定位”流程選取的σ和σ-1都不一樣,因此每個流程中dkN/B個原始信號的頻率成分也不一樣。假設總共進行了L次定位,則會得到L*(dkN/B)個原始信號的頻率成分坐標,統計其中出現次數大於等於L/2的數,就可以認為該數是有用信號的坐標值了。
由於篇幅限制,后續內容放在了“稀疏傅里葉變換原理說明(三)”當中。