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



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

各種警報訊號

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

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


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

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


這場的課程簡報在此


2023年6月26日

黃金角度的程式遊戲

以前寫過幾篇在探討植物的葉序、花序怎麼生長的文章,其實就是【黃金角度】這個主題

螺旋狀的馬鈴薯芽

向日葵的數學遊戲

鳳梨的數學遊戲

鳳梨的數學遊戲(2)


下一片葉子(或花)與這片葉子(花)的角度如果在某個特定角度的話,可以讓排列最緊密,不容易重疊。舉例來說,如果每一片葉子都圍繞著莖轉360度,代表每一片葉子都會上下交疊。



而如果是繞90度,則葉子則分布在0度、90度、180度、270度四個角度


如果是間隔120度就是這樣



 如果隔115這個無法整除360的角度呢?好像開始有點緊密呢


而最佳的角度就是接近137.5 這個角度了。


https://chihhsiangchien.github.io/goldenRatio/index.html

這個程式就是用來模擬不同角度的排列狀況,在上圖這個狀況,自然可以看到如鳳梨、松果上面的螺線,數看看螺線的數字,正是費式數列的前後兩個數字呢。

你可以這樣試試看不同的角度,費氏數列長這樣
1、 1、 2、 3、 5、 8、 13、 21、 34、 55、 89、 144、 233、 377、 610


1/2 *360 =180

2/3*360 = 240

3/5*360 = 216

5/8*360 = 225

8/13*360 =221.5

13/21*360 = 222.85

21/34*360 = 222.35

34/55*360 = 222.5

55/89*360 = 222.47

89/144*360 = 222.5

144/233*360 = 222.48

這樣一直算下去就會發現數字就在222.5左右,如果用360去扣掉這個數字那就是137.5了,那就是黃金角度


數感遊戲

 人類衡量數量的概念分為感數(subitization)及算數能力(counting)兩種特性,在5以下的數字通常看一眼就知道了,這就是「感數」,但再多一些,就得用計算的了。

前兩年臺師大的研究團隊用了斑龜進行數感的研究,發現斑龜可以分辨9和10的差異,也有「大於」的概念。

看到這些研究,我也想來知道自己的數感,於是我就做了一個研究數感的遊戲。畫面最上方可以改變各種參數

遊戲網址:https://chihhsiangchien.github.io/numberSense/index.html


  • 數字起點和數字終點,代表你要測試的數字範圍,預設5-10。
  • 左右差值代表每次測試時,左右差距是多少,預設是1。
  • 例如測試數字為5,而差值是1,則畫面會呈現一邊是5個圓點,一邊是4個圓點。你要在蓋牌之後點「比較多」的那邊。
  • 點一次就答對可能是運氣,但點了五次都答對可能就代表你真的分得出來,每個數字測幾次就是用在這邊。
  • 顯示時間(毫秒)是用在決定你可以看到多少時間的圓點,能看的時間越久,你就越能展現「算數」的能力,越短就只能靠直覺了。
  • 按下GO之後,程式會把你的設定做亂數排序,全部完成之後會呈現圖表讓你知道你的正確率是如何。


有些人測試之後可能會覺得自己超厲害,十幾的數字居然可以全對,如果真是這樣,我建議你更進一步做測試。

例如你發現自己在10的數字上正確率達100/100,那麼你就把測試參數改成起點和終點都是10,連續測10次,看看你是不是可以在這樣的測試中全對。


此外,你也可以試試看把顯示時間調到100毫秒,數字就限定在2-5之間,再試試看你的「感數」能力怎麼樣,到底你的一眼要看多久才會正確分辨出這些簡單的數字。

2023年6月19日

用線上程式看看你的臉是不是對稱

這是最近做教學程式的side project,想起了自己很久很久寫的一篇短記

我們真的對稱嗎

現在有能力寫程式來實作了,就來玩玩吧。

正常的玩法是看左右臉是不是對稱,但我自己總是忍不住就想做出單眼怪物之類的奇怪影像,若是給學生使用應該也會變成這樣吧。


「正片後像」和「負片後像」的線上實作程式

 


上週再利用 js與載具上的相機製作了幾個應用在教學的程式。

正片後像

這一個是作停格動畫的程式,目的是用在正片後像的動畫實作,也可以用在其他有「順序」呈現的單元裡。只要按「拍照」就可以做完了。 以前我要演示動畫製作時,有做過現場拍照之後,我再到電腦上後製給學生看,但那實在太花時間了。後來上課時有平板支援之後,我也讓學生用app來製作,但app的製作目的和教學上的目的不太相同,那些做gif的app會有很多選項可以做調整,對教學上太多選擇反而是困擾。所以呢我就自己做一個來用在教學上,你唯一要做的和能做的就是選擇相機和拍照這兩件事情。

負片後像

https://chihhsiangchien.github.io/webcam/webcamAfterimage/postiveAfterimage.html


你可以先看我多年前這篇的說明:負片後像新玩法
我的程式做的事情就是把畫面轉成負片和灰階,你只要在拍照後,按下最右邊那個按鈕就可以了。

看著負片的畫面停留幾秒之後,按下灰階之後,就會感覺看到了正常顏色的影像喔,但其實那只是灰階而已。

以上的程式我都放在這個網站上
https://chihhsiangchien.github.io/

2023年6月11日

模擬複式顯微鏡下的玻片移動

學生對於複式顯微鏡的操作有兩個很大的痛點:

1.玻片移動方向與影像改變方向如何對應

2.如何追蹤視野下的生物移動


老師對顯微鏡操作有豐富經驗,所以很容易就掌握到方向怎麼移動,不過學生操作顯微鏡的經驗很少,加上時間也很少,所以只能把這些問題的答案用背的。

老師要在課堂上解說這樣的問題,也是很困擾,因為乍看之下在黑板上畫畫方向,就可以說明,但其實常常是有說沒有懂,學生還是要靠自己弄懂。

好的,找到痛點之後,接下來就是解決問題了。是的,我開發了一個程式,就是要模擬這個情境的。





程式連結

可以改變倍率、調整載物台高度(模擬調節輪轉動)、改變光圈,甚至還有蟲蟲模式,觀察顯微靜下的微生物移動,也可以改變上下顛倒左右相反的模式。


使用400X時,若使用蟲蟲模式,則會出現紅色準星,且蟲蟲下方會出現生命值。準星瞄準蟲蟲,蟲蟲就會受到傷害,最後就會消失,變成了顯微鏡射擊遊戲了。

不過很可惜的,在電腦上操作應該都可以順利,但如果在iPad上,應該就只剩下方向改變這件事還是正常的,如果開啟蟲蟲模式,執行速度就會延遲到無法忍耐的程度了。

免安裝app的脈搏偵測

既然前篇開發了可以使用鏡頭的程式,那我就想我可以繼續開發出其他應用,像是脈搏偵測。

我們課程裡頭有一個實驗,是讓學生A聽自己心音,學生B幫學生A量脈搏,一分鐘後回報脈搏和心搏的次數。感覺上這樣操作,應該可以得到相同的數字,但其實幾乎不可能,同一個人量脈搏都可能量不到、算錯,更何況兩個人同時量一個人。

我後來上課其實有找了一些作脈搏測量的app來協助使用。但是沒那麼符合需求,像是有些app一定要用後鏡頭,測量只限幾十秒到一分鐘,有些只有數字沒有波形...。

而我要應用在教學上,反而要有以下特點:

  1. 要能看到脈搏波形,倒不一定需要算出數字
  2. 不要限制量測時間
  3. 不用裝app,筆電載具隨時可量
  4. 可以選鏡頭,平板上的前鏡頭更好用

既然找不到適合自己需求的,那就自己開發出一個吧!

https://chihhsiangchien.github.io/webcam/pulse/pulse.html


操作上很簡單,學生自己聽自己心音,然後一手隔著塑膠膜按在前鏡頭上,光是用看的用聽的,就可以知道脈搏心搏是週期相同但有點延遲的。