大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。“煮酒言歡”進入IC技術(shù)圈,這里有近50個IC技術(shù)公眾號。
第一部分 設(shè)計概述
1.1 設(shè)計目的
頻繁雜亂的鳴笛聲,不但給周邊居民的生活質(zhì)量造成很大影響,而且增加了駕駛員的疲勞,影響行駛安全,并使乘客和行人在出行時倍感煩躁不安。在大多 數(shù)城市的道路上,時常出現(xiàn)禁止鳴笛的標志,然而并不是所有人都能自覺地遵守 規(guī)則,對鳴笛之人進行適當?shù)奶幜P是確保這項規(guī)定能夠順利實施的必要舉措。
我們決定利用麥克風陣列獲取聲音信號,使用 FPGA 技術(shù)計算聲音的位置, 使用 OPENMV 實現(xiàn)圖像的抓拍,最終實現(xiàn)對鳴笛車輛的準確定位。
1.2 應用領(lǐng)域
本作品實際應用前景廣泛。
用于民用領(lǐng)域:在交通監(jiān)控中,對違規(guī)鳴笛的車輛進行定位并拍照取證,提高監(jiān)控效率;在音視頻會議系統(tǒng)中,采集會議發(fā)言人的語音信號,并進行實時處 理來確定發(fā)言人的當前位置坐標;在安防系統(tǒng)中,利用聲源定位系統(tǒng)來輔助傳統(tǒng) 攝像頭,從而調(diào)整監(jiān)控方向,彌補了普通的運動識別在光線昏暗條件下的不足, 提升安防效果;等等。
用于軍事領(lǐng)域:既可以有效的發(fā)現(xiàn)敵方目標所在的位置,又可以充分的隱藏 自身。
1.3 主要技術(shù)特點
(1)采用麥克風陣列來獲取聲音信號 相較于傳統(tǒng)麥克風,麥克風陣列具有空間選擇性,能明顯抑制干擾;可以用 于獲取多個聲源或移動聲源信號,也可以用在一些特殊場合,該系統(tǒng)對于遠處和 近處的聲源,均可以正常工作。
(2)利用 FFT 算法和 CORDIC 算法計算相位 前者是離散傅氏變換(DFT)的快速算法,是有限長序列傅里葉變換的有限 點離散采樣,從而實現(xiàn)了頻域離散化,使頻域采樣按照數(shù)字運算的方法進行。后者是一個“化繁為簡”的算法,將許多復雜的運算轉(zhuǎn)化為一種“僅需要移位和加 法”的迭代操作。
(3)用 verilog 語言編碼并利用 FPGA 實現(xiàn) 本作品用 FPGA 作處理器處理聲音信號,利用了 FPGA 硬件并行的優(yōu)勢,在 每個時鐘周期內(nèi)完成更多的處理任務(wù),超越了數(shù)字信號處理器的運算能力。
1.4 關(guān)鍵性能指標
(1)完成對實驗室等室內(nèi)環(huán)境的靜止的鳴笛聲源定位,并用攝像頭以及舵 機云臺對鳴笛者進行抓拍,抓拍成功率超過 90%,并且每次抓拍得到的鳴笛者偏 離照片中心不超過 50%.
(2)完成對實驗室等室內(nèi)環(huán)境的緩慢移動的持續(xù)鳴笛聲源定位,并用攝像 頭以及舵機云臺對鳴笛者進行跟拍,跟拍成功率超過 90%,并且在跟拍過程中攝 像頭內(nèi)不丟失鳴笛者圖像。
(3)完成對實驗室等室內(nèi)環(huán)境的快速移動的持續(xù)鳴笛聲源定位,并用攝像 頭以及舵機云臺對鳴笛者進行跟拍,跟拍成功率超過 80%,并且在跟拍過程中攝 像頭出現(xiàn)鳴笛者的時間超過跟拍總時間的 80%.
(4)對上述指標(1)中的抓拍在鳴笛開始的 0.5 秒內(nèi)完成抓拍
1.5 主要創(chuàng)新點
(1)所有過程完全采用數(shù)字化的信號處理方式,所有通信均為數(shù)字通信, 所有處理的信號都為數(shù)字信號,相比于易受各種干擾的模擬信號系統(tǒng),數(shù)字信號 處理抗干擾能力更強,通過多路信號并行處理來實現(xiàn)。
(2)利用了 FPGA 硬件并行的優(yōu)勢,打破了順序執(zhí)行的模式,在每個時鐘周 期內(nèi)完成更多的處理任務(wù),超越了數(shù)字信號處理器(DSP)的運算能力。通過使 用盡可能多的麥克風通道,來提高定位的精確度。
(3)FPGA 良好的運算性能允許建立實時性良好的定位系統(tǒng),可以做到追蹤 高速行駛的鳴笛汽車。
(4)本項目將定位的空間由原有的二維空間拓展為三維空間,提高了追蹤 定位的靈活性和準確性。
第二部分 系統(tǒng)組成及功能說明
2.1 整體介紹
system_diagram 本系統(tǒng)由聲源定位系統(tǒng)和圖像抓拍系統(tǒng)兩部分組成,其中聲源定位系統(tǒng) 由麥克風陣列模塊、PDM 解碼模塊、相位計算模塊組成,后兩個模塊通過 FPGA 板實現(xiàn),圖像抓拍系統(tǒng)通過 OPENMV 實現(xiàn)。
聲源產(chǎn)生聲音信號,傳送給麥克風陣列,編碼產(chǎn)生 PDM 波,再通過接收 PDM 波的緩沖區(qū),送入高階 fir 濾波器實現(xiàn)對 PDM 的解碼,然后將結(jié)果傳入 相位計算模塊,即先通過 FFT 算法進行頻譜分析,再利用 CORDIC 算法計算 相位得到聲源的坐標,最后通過基于 OPENMV 的圖像抓拍系統(tǒng)顯示聲源位置 并抓拍。
2.2 各模塊介紹
2.2.1 麥克風陣列模塊
我們用到的硅麥型號為 SPW0690LM4H-1,這是一種小型、高性能、低功耗, 底部端口硅數(shù)字麥克風與單位 PDM 輸出。包括一個聲傳感器,一個低噪聲輸入緩沖器和 sigma-delta 調(diào)制器。
它具有的特性:低失真/高 AOP、高信噪比、低功耗模式下低電流消耗、平 坦的頻率響應、高驅(qū)動能力、射頻屏蔽、支持雙多路通道、極穩(wěn)定的性能、全指 向性等等。在采集聲音方面,在很寬的頻帶內(nèi)增益保持一致,高保真的采集語音 信號,靈敏度高,能夠檢測到環(huán)境中微弱的聲音信號。它的全指向性可以拾取各 方向的聲音,對來自四面八方的聲音同樣敏感,特別適合用在本項目中。
2.2.2 處理器
本作品使用 Ego1 開發(fā)板作為處理器,型號為 Xilinx Artix-7 系列的 XC7A35T-1CSG324C FPGA。
Xilinx 7系列的FPGA芯片內(nèi)部集成了兩個12bit位寬、采樣率為1MSPS的ADC, 擁有多達 17 個外部模擬信號輸入通道,為用戶的設(shè)計提供了通用的、高精度的模擬輸入接口。
2.2.3 PDM 解碼模塊——基于高階 fir 低通濾波器
PDM 的解碼采用高階 fir 濾波器的算法。PDM 編碼雖然只有 0 和 1 兩種電平, 但 PDM 編碼保留了原始的未編碼數(shù)據(jù)的所有頻率分量,同時增加了高頻噪聲成 分 FIR 濾波器是數(shù)字信號處理系統(tǒng)中最基本的元件,它可以在保證任意幅頻特征的同時具有嚴格的線性相頻特性,其單位抽樣響應是有限長的,此系統(tǒng)穩(wěn)定。根據(jù)自頂向下的層次化、模塊化的設(shè)計思想,將整個濾波器的設(shè)計劃分為多個模塊, 利用硬件描述語言 Verilog 進行各個模塊的功能設(shè)計,并用 Matlab 軟件設(shè)計 98階濾波器各抽頭系數(shù)。
對 PDM 編碼進行傅里葉變換,得到的頻率響應如下圖:
由于聲音定位系統(tǒng)是為了得到人耳可分辨的聲音,或得到清晰的騎車鳴笛聲音,并且人耳可以分辨的聲音頻率為 20-20000Hz,而高于 20000Hz 的聲音信號是我們不需要的,所以我們的低通濾波器的通帶頻率設(shè)置為 0-20000Hz,截止頻率設(shè)置為 48000Hz,阻帶頻率設(shè)置為 100000Hz。PDM 信號經(jīng)過該濾波器, 不僅可以實現(xiàn) PDM 信號向 PCM 信號的解碼,還順帶濾除了我們不需要的高頻聲音信號。
該 fir 濾波器的差分方程表達式為:
將原始信號進行編碼,并經(jīng)過 97 階 fir 低通濾波器的信號與原始信號的對比圖如圖 9、10 所示,其中綠色的為解碼后的信號,藍色的為原始信號。
由圖可知,設(shè)計的濾波器較好的將編碼后的信號還原為原始信號,并且原始信號所包含的頻率分量受到的影響較小。
用 VIVADO 軟件編寫 verilog 語言實現(xiàn)該 97 階的數(shù)字濾波器,由于需要大量 的串行浮點運算,所以所消耗的時間較多,但通過硬件,可用并行運算進行處理。通過計算,我們設(shè)計的 97 階濾波器需要 97 個乘法器和 98 個加法器,具體代碼見附錄。
2.2.4 相位計算模塊
通過 FFT 算法進行頻譜分析
FFT 是離散傅氏變換(DFT)的快速算法,是有限長序列傅里葉變換的有限點 離散采樣,從而實現(xiàn)了頻域離散化,使頻域采樣按照數(shù)字運算的方法進行。
使用 Xilinx Vivado 內(nèi)置的 Fast FourierTransform IP core 進行快速傅里葉變換, 配置使用 Radix-2 架構(gòu),使用 8 通道,每個通道一幀包含 512 個數(shù)據(jù)點。輸入的數(shù)據(jù)位寬為 16 位,輸出則采用 Fixed Point、Unscale,同時為順序輸出,配置如圖 12。
運用 CORDIC 算法計算相位
CORDIC 算法是一個“化繁為簡”的算法,將許多復雜的運算轉(zhuǎn)化為一種“僅 需要移位和加法”的迭代操作。
假設(shè)在 xy 坐標系中有一個點 P1(x1,y1),將 P1 點繞原點旋轉(zhuǎn)θ角后得到 點 P2(x2,y2)。
于是可以得到 P1 和 P2 的關(guān)系:
2.2.5 圖像抓拍系統(tǒng)
在本作品中,使用分辨率為 640*480 的以數(shù)字圖像傳感器為核心的攝像頭, 并使用具有角度不斷變化并可以保持的舵機,構(gòu)成圖像抓拍系統(tǒng)。
OPENMV 通過接收 FPGA 串口發(fā)送的聲源位置信息,從而控制舵機轉(zhuǎn)向聲源 的方向,使得我們使用的攝像頭可以準確的對準聲源,并下達指令給上位機(PC) 進行拍照或錄像。照片將存儲在上位機的內(nèi)存中。
第三部分 完成情況及性能參數(shù)
(1)完成了在實驗室對靜止的鳴笛聲源進行定位,并用攝像頭以及舵機云 臺對鳴笛者進行抓拍,抓拍成功率超過 95%,并且每次抓拍得到的鳴笛者偏離照 片中心不超過 30%,抓拍延時在 0.5 秒以內(nèi)。
(2)完成對實驗室的快速移動的持續(xù)鳴笛聲源的定位,并用攝像頭以及舵 機云臺對鳴笛者進行實時跟拍,跟拍成功率超過 80%,并且在跟拍過程中攝像頭 出現(xiàn)鳴笛者的時間超過跟拍總時間的 95%
(3)上位機屏幕能夠?qū)崟r顯示攝像頭的情況,并且儲存了抓拍到的鳴笛者 照片,以及持續(xù)鳴笛跟拍的視頻。
第四部分 總結(jié)
4.1 可擴展之處
(1)我們使用的 4 路數(shù)字麥克風陣列 PCB 板預留了額外的 28 個空焊的麥克 風接口,可以擴展至 32 路。從而可以盡可能地減小數(shù)字麥克風接收的誤碼率, 并且再次提高定位的精度。
(2)我們用來控制舵機云臺的 OPENMV 擁有自帶的攝像頭,并且具有圖像 識別等功能,將來可以使用 OPENMV 進行圖像處理并配合聲源定位系統(tǒng)進行綜 合跟拍以及抓拍,從而提高跟拍的成功率以及抓拍的準確度。
(3)我們使用了高性能的上位機對跟拍和抓拍的圖像進行實時顯示,并保 存到上位機中。上位機將來可以對保存下來的照片進行二次分析,對抓拍到的車 輛進行車牌識別,并將違章記錄上傳到云端,并利用大數(shù)據(jù)進行監(jiān)管,對一些違 章次數(shù)較多的車輛進行處罰。
(4)本項目使用到的 FPGA 芯片型號僅僅為 XILINX 的 A 系列入門級的 XC7A35T,如果更換為板載資源更多的型號,將會進一步提高聲源定位運算的速度。