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