基於arduino的環境雜訊測試儀需要哪些東西?
元件的組裝以及寫入單片機的程序
關於分貝計,我很有興趣分享我們的經歷,因為我們曾經用STM32做過一個分貝計。這個問題可能比較偏門,所以總共也才3個回復。不知道有沒有看。首先來說說聲音的大小的單位db,db這個單位其實可以叫沒有單位,因為他其實表示的是一種比例關係,給出計算公式:
SPL=20 x log10[ p(e) / p(ref) ]
SPL及我們所說的分貝,p(e)為待測聲壓,p(ref)為參考聲壓。也就是說其實我們所說的XXdb都是說的這個聲音相對於我們規定的一個聲音的大小的比值,並取以10為底的對數再乘以20。之所以採用取對數是因為這個比值可能會非常大。例如正常的人耳能夠聽到最微弱的聲音叫作「聽覺閾」,為20微帕斯卡 (μPa) 的壓強變化,即20 x 10-6 Pa (百萬分之二十 帕斯卡)。而一架太空穿梭機在發出最大馬力時能在近距離產生大約 2,000 Pa 或2 x 109μPa的噪音這麼大的數值處理起來非常不方便。弱採用db的形式,他們差距將只有160db.所以首先要理解db這種單位帶來了形式上的簡單,也在直覺上讓我們覺得一個噪音計從30db測到90db好像很簡單,其實仔細算算便能得出,這個2個聲音的聲壓大小相差了1000倍,所以其實做好一個噪音計並不是很簡單的。再來說說實際上的聲音大小我們是怎麼計算的。我們知道人耳對於不同頻率的聲音的感受是不一致的,類似於一個帶通濾波器,首先只對20-20000HZ之間的頻率有反應,造成同樣的聲壓,頻率不同,對人聽覺的影響也不同。下圖即為人耳對於不同頻率的反應程度。注意,單位同樣是db。但其中有一個我們這需要使用到的數學方法傅里葉變換。
那麼什麼叫做傅里葉變換?傅立葉變換在應用中算是一種分析信號的方法,它可分析信號的成分,也可用這些成分合成信號。他的數學公式是這樣的。。 當然這只是裝個B。作為工程狗基本上不用了解這麼詳細的數學公式,簡單的理解傅里葉變換就是,他可以把一個信號分解為無數個由他的諧波信號相加而成。及 a=a1+a2+a3+...+an後面全部是他的諧波信號,及各種頻率的波的疊加。所以當實際的聲音信號經過傅里葉變換之後,就可以分解為各種不同頻率的聲音的疊加,也可以說,真實的聲音必然是不同頻率的正弦波的疊加。而經過傅里葉變換之後,聲音也就由時域轉換到了頻域。
此時就可以方便的得出各給頻率處聲音的強度和大小。便能對聲音大小進行加權計算了。由圖1可以看出a率加權曲線是連續的,那我們是否需要把每個頻率都進行加權?答案是可以,但也沒必要。在實際中我們對於頻率的選取叫做倍頻程。倍頻程的中心頻率為31.5、63、125、250、500、1K、2K、4K、8K、16KHz,某些要求更精細的條件下可以使用1/3倍頻程。一個聲音在倍頻程上的分量可能是這樣,是不是很熟悉,很多音樂軟體都有這個顯示,以前的dvd播放機或者功放也大多有這個顯示。如此一來,通過編程我們實現傅里葉變換,得到頻域,取出倍頻程上的值,通過加權,最終計算出聲音的分貝。然後呢?然後就需要做最後一步,那就是校準。通過與專業的儀器進行校準,對比輸出。我的經驗是只要完全按照以上理論,硬體上ok,基本上只需要調節聲音的放大倍數,就可以和專業的幾百塊的雜訊計符合的相當完美。註:本答案只涉及聲音分貝演算法知識。其實對於分貝計還有同樣重要的信號調理能力,畢竟是1000倍信號大小的差距。==============================================
創客這麼火,為什麼身邊沒創客?
還一個人玩DIY?
Arduino入門難?
DFRobot淘寶最大代理商,首個Arduino知識分享公眾號,更適合GEEK的公眾號。理論與實踐並重。期待你的關注。
環境雜訊測試儀難就難在如何對雜訊正確定標和可信測量。
雜訊的單位是分貝(dB),但分貝本身其實是一個表示比值而不是能量強度。實際上聲音強度的真正定義是聲壓(Pa, 帕斯卡)。分貝用於噪音計量的時候其實隱含了基準點(0dB)等於20微帕(μPa)的信息。
所以聲音雖然容易採集,但定標沒法定——如何把這個聲音引發出來,從而確定麥克感測到的電壓值,所對應的分貝數到底是多少呢?要知道我們日常生活的環境底噪尚且有20-40dB甚至更多。
另外一個問題就是測量的可信與權威性。如何保證測量設備感測、頻響和模數轉換的正確?又如何向別人證明這一點?這幾乎是個無解的問題。當然可以去記錄測量的全程錄音,但這也只是個參考。
我的建議是乾脆不要自己去測量雜訊,而是購買一個成品的噪音計。例如勝利的這一款:
然後好好做一個精度比較高的模數轉換電路,把噪音計的DC類比信號輸出直接接上。這樣,測量到的電平和雜訊之間,就有了經過權威儀器標定的關係,你就可以自由的讀取、利用或永久記錄雜訊的權威測量數據了。——測准電壓並不是什麼難事。當然如果你堅持自己製作,你也可以用這種成型的雜訊計,去調教、標定和檢驗你用麥克風測量到的聲音強度,與雜訊分貝數之間的關係。
總之做儀器的原則就是:無基準,不做事。千萬別忘記。不知道題主有沒有搞定...最近正好也在弄這個,供題主參考下吧
我不是想要做出多精確的儀器,就是想做個東西監測環境的噪音情況,所以是不是嚴格按照分貝什麼的計算要求去測也就沒管
我的方案是:arduino uno+ 某寶買的麥克風咪頭(最好自帶放大器的)
接線是:麥克風咪頭為3線,模擬量輸出的,電源和GND分別接arduino的5V和GND,輸出線(OUT有的寫的是S)接arduino的A0口
程序是:
setup里只把serial初始話以下,Serial.begin(9600); 噪音檢測都放在loop里;
通過analogRead(A0),讀取A0口的模擬量(0-1024),讀取1000次後求方差,方差的數值就可以代表噪音的情況;
我讀取到的A0口的模擬量數據大概是這樣的...
(木有示波器什麼的東西,導出數據到EXCEL里做的,湊合看看吧)平均值是533(不同的麥克風咪頭模塊貌似平均值不一樣,另外一個是700左右);
半夜啥都不做的時候方差2.5左右,手機APP顯示分貝是25db左右;
放白雜訊音頻(較輕)的時候方差6.5左右,手機APP顯示分貝是70db左右;
放白雜訊音頻(較響)的時候方差25左右,手機APP顯示分貝是100db左右;
雖然,計算結果和APP顯示的分貝不是線性相關的...不過也能湊合表示以下環境的噪音情況...
希望能對題主有幫助
樓上答得很專業!學生時代做過一個遠程雜訊監測的項目。用了5塊錢的麥克風模塊,直接接到單片機的ADC,然後不停地採樣並且顯示數據。接著用樓上說的標準聲級計來標定,得到ADC的輸出和聲壓之間的關係。我記得還挺準的。
如果僅僅是單機的手持檢測儀器,arduino方案可能用到的元器件有:Arduino Uno, 聲音感測器模塊(如 @何忠傑 所言),LCD顯示模塊,電池。
切記校準(如 @Super璐璐 所言),即在採集感測器數據後,可轉化成分貝單位何專業的儀器比對。然後在arduino程序中,進行相應的數值補償。
如果這是您需要的答案,請點贊。歡迎進一步交流。謝謝。
推薦閱讀:
※Ruff 和 Arduino 最大區別是什麼?
※用Arduino連接感測器收集數據,以無線方式發送到RaspberryPi,由樹莓派處理數據並保存,行不行?怎麼做?
※Arduino 是什麼?
※Arduino 的 Serial.write() 和 Serial.print() 的區別在哪裡?
※arduino與電腦利用wifi數據互通,是怎麼實現的?
TAG:Arduino |