:fft,欠取樣,取樣定理,電磁引導,智慧型車競賽
前一段時間,推文中介紹了兩款參賽同學根據負反饋原理製作的恆磁20khz的訊號源,有效的解決了智慧型車比賽場地中電磁導線的長度,直徑等引起的電磁線圈的阻抗變化,從而對於輸出訊號中20khz基波訊號帶來影響,提高了比賽場地導引訊號的精度。
兩款訊號源中,都採用了10mh電感和6.8nf電容組成的諧振選頻迴路,對輸出電流訊號中20khz基波訊號進行檢測。通過負反饋的原理來穩定輸出電流訊號中基波的幅值。
是否還可以採用別的方法來檢測輸出電流訊號的基波呢?下面給大家所介紹,就是通過普通的電阻對輸出電流進行取樣,通過軟體演算法來獲取輸出電流的基波分量。
實驗仍然採用傳統的數字訊號源,輸出所使用的20khz,100ma的方波交流訊號。在訊號輸出線中串入乙個0.1歐姆的電阻,將電流訊號轉變成電壓訊號。
為了便於微控制器採集該訊號。使用了ina199對於電阻兩端的電壓進行差模放大,放大倍數50倍。由於in199的頻寬只有14khz,它對於電流訊號中的高頻訊號 有著較大的衰減。下圖中,可以看到在取樣電阻兩端的電壓訊號經過ina199差模放大之後,訊號的上公升沿和下降沿變得光滑了。訊號失真是由於它中間的高頻分量被衰減了。
雖然訊號出現了失真,但這只是低通濾波器將其中的高頻訊號濾除了。對於20khz基波訊號衰減不大。並且這是乙個線性低通濾波器,所以對於後面的測量校正不會帶來很大的影響。
使用微控制器軟體演算法來獲取電流訊號的基波頻率分量,首先需要通過adc(模擬數字轉化器)對於輸入訊號進行取樣,然後再進行頻率分析。由於微控制器的adc效能和計算能力有限,所以需要使用訊號欠取樣和快速傅利葉變換計數。下面分別進行介紹。
根據訊號取樣香儂(claude shannon)定理,如果訊號取樣頻率大於訊號中最高頻率的兩倍,則訊號可以無損失進行恢復,否則就會造成資訊的丟失和頻率混疊。通常稱訊號最高頻率的兩倍為訊號的奈奎斯特(nyquist)取樣頻率。在實際應用中情況下,需要取樣頻率大於訊號最高頻率的五倍以上。
對於方波電流訊號,理論上,它的最高頻率是無窮大。這樣就會給訊號取樣帶來很大的麻煩。如果取樣頻率無法滿足奈奎斯特頻率,就會產生訊號的頻率混疊現象,表現在原本訊號中高頻分量在採集後所形成的序列反而是低頻序列。這樣就會造成訊號頻率分量出現偏差。
20khz的電流訊號,具有豐富的高次諧波。如果考慮到訊號的10次諧波作為訊號的最高頻率。那麼所需要的取樣頻率就是20000102=400,000hz。這個頻率對於普通的微控制器來說已經到來它的上限了。如下是設定微控制器adc不同的轉換時間,所採集到的電流訊號。
可以看出,在轉換時間小的情況下,是可以採集到比較完整的電流波形,但是,資料中會帶有很大的雜訊。如果轉換時間設定長了,就會出現明顯的欠取樣的情況,資料波形與實際訊號波形之間出現了很大的差別。
如何解決這個矛盾了。這裡需要應用到電流訊號是週期訊號的特點,可以使用訊號欠取樣來獲得訊號完整的波形。
欠取樣是巧妙應用到頻譜混疊,將原本高頻的諧波,變成低頻的諧波,從而可以在遠小於訊號的奈奎斯特取樣頻率下完成訊號的採集。
從時域分析來看,取樣的週期比訊號的週期(或者訊號週期的整數倍數)略大,比如大了deltat,它遠遠小於訊號的週期t。這樣每乙個週期只採集乙個資料,下乙個週期的的取樣點會往後延遲deltat.。將若干個週期中不同位置的取樣資料拼合在一起就可以形成訊號的完整週期的資料。下圖就可以看出,乙個高頻正弦波,在欠取樣下,可以形成乙個低頻的正弦序列波形。
對於20khz的訊號,它的乙個週期為50微妙。下圖是採用週期是50.172微秒的間隔對電流訊號進行採集所獲得資料波形,可以看出它是原來電流波形的完美體現。
通過matlab中的fft命令,可以求解出資料中的各個頻率分量幅度(成為幅度譜)。具體結果如下圖所示。
頻譜顯示,上述波形中,它的基波以及各個奇次(3,5,7…)諧波都存在,並隨著頻率的增加而減小。所有的偶次(2,4,6…)諧波都不存在。這是由於原始的對稱方波屬於奇諧訊號,這樣的訊號以及它的線性變換都不存在偶次諧波。相關的介紹在「分數諧波」推文中介紹過。
獲取訊號中的各個諧波分量的幅值,可以通過傅利葉變換求得。對於採集所得到的離散序列來講,所使用變換就是離散傅利葉變換(dft)。在上個世紀60年代,出現的離散傅利葉變換的快速演算法(fft)使得dft的計算複雜度從o(n^2)降低到n*log2(n),這使得頻譜分析快速進入了實際工程應用中。
問題是,快速傅利葉變換是否是最快,最有效的分析方法呢?
這需要看應用的具體需求。在有些情況下,反而直接應用dft所需要的計算量比fft還要小。比如在這裡,由於我們只需要求出訊號中20khz的基波訊號分量,即訊號頻譜中對應20khz的係數x[k],所以直接使用上述dft公式計算x[k]則只需要n次複數乘法和n-1次複數加法即可。反而比log2(n)*n次的fft更少。
由於計算需要使用到exp(2pijkn/n)係數,根據尤拉公式,它是由cos(t)+jsin(t)構成,這些係數可以在進行計算前製作成**提前得到,或者使用三角變換公式進行地推而形成,這都可以加快具體計算過程。
下面,對於上述方法進行實驗驗證一下。採用和以前實驗方案相同,在以前標準訊號源迴路中串入不同的電感,模擬不同長度的電磁線。通過乙個lc諧振迴路放在電磁線周圍,來感應磁場強度。分別記錄在不同串入電感的情況下,lc輸出交流電壓訊號以及電流採集訊號的fft係數。
如下是對20中不同電感下,測量的資料曲線。可以看出,原來標準訊號源,隨著輸出迴路電感的增加,輸出電流訊號的基波分量在逐步增加。具體原因在以往的推文中有分析。
與此同時,可以看到通過電流取樣資料所計算出的fft基波分量的頻譜係數也按照相同的比例進行變化。
這說明,通過軟體計算所獲得的基波分量的大小與採用lc選頻諧振迴路的作用相同。如果使用fft係數對於輸出電流進行反饋控制,就可以使得輸出電流的基波保持穩定。
如下就是使用採集到的lc電壓值除以電流訊號的fft基波係數所得到的比值,可以看到該比值基本維持在 乙個恆定量。
這也說明,使用電流取樣然後進行頻譜分析可以完成訊號源基波分量的穩定控制。
對於比賽數字訊號源增加輸出電流取樣電阻,通過訊號欠取樣計數,可以獲得輸出電流波形資料。應用訊號傅利葉變換,提取所感興趣的基波分量的幅度。由於只是計算基波分量 乙個頻譜係數,所以不需要採用快速傅利葉變換,而是使用迭代的方式完成普通的離散傅利葉變換計算就可以高效計算出對應的頻譜係數。
在具體實現中有些引數需要通過試湊來完成優化。比如欠取樣的頻率的選擇,計算dft資料的長度等。在上述實驗,選擇欠取樣頻率使得在訊號的乙個週期內可以採集到100個左右的有效資料。為了避免由於資料擷取對於計算結果所帶來的誤差,選擇1個或者2個正週期的資料進行計算,可以獲得比較穩定的頻譜係數。
傅利葉級數(一)
概述 傅利葉級數,起初是用來解決如何求解微分方程的問題的。學過高數的應該都知道,對於非齊次微分方程的求解,如果輸入是指數冪,sin或者cos系列,就可以先求其其次微分方程的通解,然後通過公式求出特解。如果是其他的函式,就很難解決。傅利葉級數就是將所有的週期函式轉化為sin和cos的乘積。這篇部落格就...
頻域濾波(一) 傅利葉譜與相位
ori rec imread c program files matlab r2013a bin original images dip3e original images ch04 fig0424 a rectangle tif ori rec mat2gray ori rec 257 768,2...
傅利葉級數的一點小心得
目錄先從數學定義中的三角形式傅利葉級數出發,來討論這個問題 f t frac cos omega t sin omega t cos 2 omega t sin 2 omega t frac sum limits infty cos n omega t sin n omega t frac int ...