## Ultrasound Beamforming concept and Implementation 超音波合成波束的概念與實行
在學習超音波模擬程式的路上,一定會聽見 Delay and Sum Beamforming 這個技術。然而,雖然道理我都懂,在實際撰寫程式來實現模擬的時候,卻花了我一些時間。
因此在此忠實記錄如何透過 MATLAB,使用收到的Channel Data來實現 Beamforming。
### Delay and Sum Beamforming Concept
#### 1. How does ultrasound works?
* 要談到 DAS Beamforming,首先必須談到超音波到底怎麼運作的。超音波由探頭發射,探頭由很多個元件(element)組成,每個element都可以發射超音波訊號。
* 訊號經過介質傳遞到反射物,因此音波可以反射回來,回到探頭,此時 element 轉為接收模式。此時 element 可以去計算發射到接收所需的時間,藉此計算反射物距離探頭有多遠。
舉例來說:發射到接收共0.05秒,聲速為1500m/s,則反射物距離探頭= 1500*0.05/2=37.5m
需注意一下,探頭是不允許在尚未接收到訊號之前,就又打下一個訊號的。因為程式會無法判斷時間與深度的關係。
舉例來說:假設我隔了十秒就發射另一個訊號,第一個訊號回傳共花30秒,另一個共花50秒。
系統會無法判斷:50秒的訊號是指很深層的反射物,還是原本的反射物但隔了十秒發射的。
#### 2. What do DELAY and SUM mean?
* 既然接收到的時間,可以換算成距離來呈現反射物的位置,那就會有問題產生了:反射的訊號到最近的 element,跟到最遠的 element,是不是會有時間差?
答案是:沒錯!而且實際上還原出來的圖片,正因為這個問題,而會呈現圓弧形(因為回傳到遠一點的 element 的時間較長,因此系統誤以為有一個點,在比較遠的地方)
舉例來說如下圖所示:
由於實際物體到左邊element距離為d,因此系統會以為:有一個點在該element下方,距離為d。
或說實際物體到右邊element距離為d2,因此系統也以為:有一個點在該element下方,距離d2。

* 因此,針對這個問題,我們應該讓「距離物體近一點的 element 晚一點再收到訊號、遠一點的先收到訊號」,所以想法上會覺得,給予不同的時間延遲(time delay),也就是標題中的 DELAY之後,每個 element 回推物體的深度位置都是正確的了。消除距離的影響之後,為了讓訊號強度更高,因此將第一個到最後一個元件 DELAY 完的訊號加起來,也就是 SUM,最終就可以得到 DAS beamforming 的結果了。
#### 3. What's wrong in digital world?
* Time Delay 這個概念當然沒有問題,想讓弧線拉成一條橫線(消除時間差)也是對的想法。然而,在數位的世界中,資料的取得、儲存總和現實世界有所不同,因此,我們需要換個觀念思考。
* 首先,在數位世界中,我們並無法得到「連續」的訊號,而是透過取樣來達到近似的結果,因此在計算 time delay 上,也要配合取樣頻率、取樣個數來進行處理。
舉例來說:時間序列為t、取樣頻率為fs,取樣個數為N。
則時間應該從0開始到第N個取樣,除以取樣頻率(每秒取幾個點),意思是,第幾個取樣點共花多少時間。
Code: t= [0:N]/fs;
* 再來,則是儲存 Channel Data 的方式。以元件數量為128為例,假設一次全部發射所有的element,並由所有的element接收,資料會是以 "128x深度" 的方式儲存。
現在都已經把時間成分轉成距離了,就不能再想著把訊號套用 time delay(也就是不要再想著 S(t)→ S(t-τ))了。而是告訴該 element,因為距離比較遠,他收到的資料應該要去某個距離找,再將其更新為真實的距離,並存在新的陣列中。如下圖所示:

當新的陣列已經消除delay的影響,為了讓訊號強度更高,因此將所有人delay完的訊號加起來(SUM),就能得到該點的影像。