2023年9月23日

用micro:bit探究心理聲學

 昨天在竹市輔導團講一場STEM類型的實作演講,主題是用micro:bit探究聲學,但實際上是探究「心理聲學」

使用的器材是內建揚聲器micro:bit V2,但實際上大多數的課程內容都是用線上模擬器版本達成,而考量多數人沒有寫程式的經驗,所以主要是以寫好的程式改一些參數來做實驗達成的。

頻率產生器

都卜勒效應

使用這樣的程式下載入實體的micro:bit後,並接上電池,將micro:bit裝入塑膠袋中在頭上甩動,可以直接感受到都卜勒效應(Doppler effect),原先是定頻的聲音,卻可以因為甩動而產生高低不同的聲音。

聲音定位

兩人一組合作體驗,一人使用頻率產生器,另一人閉上雙眼,你是不是可以分辨聲源在左或在右?這可以用兩耳時間差來解釋。如果聲音先到左耳才到右耳,則聲音可能來自右耳。時間差越小,越接近中線。
但是來自右前方和右後方的聲音,有完全相同的響度差異和時間差異,我們是否可以分辨呢?結果居然也行,甚至右上方和右下方也可以!

這張圖「空間錐形區域聲像混淆」中(Cone of Confusion),那個錐形的兩個藍點到達兩耳的時間差是相同的,如果光用時間差,顯然我們應該無法分辨出位置,但實際上卻可以。


其中一個原因是我們的耳殼、耳內構造和頭部構造等會加強或衰減某些頻率,使得在那個錐形上時間差相等的兩個點,實際上進入耳內時,頻率分布會有明顯不同。細節可以再看Head-related_transfer_function


聽覺頻率範圍


人類的聽覺頻率範圍是20Hz-20000Hz,但每個個體都會有差異,你可以用這樣的程式來測試看看,按下A+B就會發出特定頻率的聲音,A和B分別會減少或增加10Hz,你也可以改變一開始的頻率變成20000,一路按A往下降頻率,看看你的聽覺極限頻率是多少。

不過這種非標準設備的測試僅供參考,因為不同喇叭或耳機對於各種頻率的表現不一定相同,雖然設定給予20000Hz,但你的耳機不一定會真的發出那個頻率的聲音。


2006年搞笑諾貝爾和平獎頒給了做為青少年驅逐器(electromechanical teenager repellant )的The Mosquito,其頻率是17.4 kHz,這樣的頻率你也可以自己用上述兩個程式做出來看看,你是否聽得到?我帶國中生做這實驗時,幾乎每一個學生聽到這樣高頻的聲音,都非常受不了呢,但是也不乏有一些根本聽不到這個高頻聲音的學生呢。

聲強和響度


從低頻到高頻,響度有什麼變化?



這個程式中,你只要一直按下A鈕,就會聽到聲音頻率一直往上,仔細記錄一下你感受到的聲音大小變化。
你應該會發現在低頻的時候聲音很小聲,到某個範圍時聲音又會變大聲,但到了某個頻率之後,高頻的聲音又變小聲了。


聲強要多少,兩頻率的響度才會一樣?


在基準頻率 1000Hz,音量100時,若將測試頻率改成100Hz、200Hz、2000Hz,你要調到多少音量才會讓這些聲音聽起來和基準頻率一樣大聲呢?


在同一個頻率下,設定的音量(音強,聲波的振幅)越大,聽到的聲音(響度)就越大聲。但是若是在兩個不同頻率下,用同樣的設定音量,卻會聽到不一樣大聲的聲音。

顯然響度和頻率會有關係,這可以從等響度曲線 Equal-loudness contours來看,同一條紅線具有一樣的響度,在100Hz或是10KHz的聲音得要調高聲壓才能和2000Hz聽起來一樣大聲。

響度不只和音高有關,也和時長、音強有關,比如說同樣的頻率的聲音,時間短一點的,我們會感覺響度比較小。

聽覺頻率解析度

兩個聲音只差1Hz,你能分辨出來嗎?如果你可以,那麼你的頻率解析度就是1Hz了。數字越小,代表解析度越高。


每次按下A+B就會播放兩個音,在按下A或B鍵之後就會改變第二個音的頻率,每次加減1。請你紀錄自己的頻率解析度是多少,然後將頻率1設成100 Hz、500 Hz、1000 Hz、2000 Hz之後再測試看看,不同的頻率下,頻率解析度有差嗎?

通常你會發現在頻率越低的情況下,測出來的數字越小,而在很高頻的如1000Hz時,你就得要差異很大才會分得出兩個音。

也就是說,如果我們把數個連續聽起來不同的音畫成一張圖,音的編號當橫軸,音的頻率當縱軸,從低到高,顯然這些音沒辦法連成一條直線,也就是非線性關係。

這也影響到音調和頻率的關係,頻率變成兩倍時,我們會感受到聲音只高了8度。如高音C的頻率是中央C的兩倍,在十二平均律下,會在這個範圍內,切出了12個半音,然後每個半音都是前一個半音的某個倍數,也就是 2^(1/12) = 1.0594...倍

資料來源:康軒國中理化課本


線性音階或是對數音階


在這個程式中,A鍵按下的聲音變化是線性的,而B鍵則是非線性的,每個音都是前個音的兩倍。


對數音階














以下這個程式則是直接用陣列方式,將全音依序列出,你可以改變頻率或是替換成另外的陣列,就可以變成不同的調性,如C大調、中國五聲音階、或是小調、藍調等。

https://makecode.microbit.org/S06447-31468-02304-25263



對這如果很有興趣的,還可以參考我之前寫的另外一篇文章和影片

各種警報訊號

警車、救護車、消防車等警報聲大家一定不陌生,但是你知道其實這些聲音的頻率和長度都是有規定的,而且有些警報聲其實只有聲音長度不同,而頻率是相同的喔。

我將內政部的這個資料轉換成表格看,就會比較清楚了


其實消防車和警車兩個的差異是來自聲音長度的不同喔。

想要聽聽看這些警報聲,你可以從這個程式中找到已經定義好的聲音函式。


這場的課程簡報在此