目前分類:FORTH語言 (19)

瀏覽方式: 標題列表 簡短摘要

前言:

一直覺得 C語言跟 FORTH 語言在對記憶體的使用用法上,觀念非常的類似。兩個語言的運作核心都是直接對電腦記憶體位址做存取,跟控制,來達到各種程式的目的。所以操作的觀念上非常的接近。所以一直想來篇簡短的心得比較,來比較兩種語言如何的操作記憶體,這樣的比較,可以大大地加深對兩種語言的了解,所以來留個紀錄吧,同時也可以清楚看到兩種語言的優劣性。基本上,我是覺得 FORTH 是略勝一籌的啦!

從歷史上來看, FORTH 是1960年代末期,由查理斯·摩爾 (Charles H. Moore) 所開發的語言,最早是為了控制巨大的電波天文望遠鏡所使用。 而C語言則是在1969年到1973年之間,由丹尼斯·里奇(Dennis Ritchie)為了在PDP-11電腦上運行的Unix系統所設計出來的程式語言。

也就是說其實兩個語言出現的時間非常的接近,而 FORTH 可能要比C語言早個幾年。也許年代接近吧,兩個語言的發明人不約而同的都有類似的思維,真的是非常的有趣,也許是英雄所見略同吧。只是兩個語言在操作逼近目標的方式迴異,而這方面我覺得 FORTH 高明許多,間單又漂亮的解決了問題。而C語言則將問題複雜化,反而產生了更多問題,使得C語言變得非常的反直覺跟難以學習。雖然 C語言已經是主流每個資訊科系必學的語言了,但我們來用個程式比較看看,看看C語言會有什麼問題吧!

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言

學 C/C++ 語言的,慢慢進階後大概就會開始學習所謂的資料結構跟演算法。資料結構這裡,一般除了靜態的陣列外,慢慢的會開始學習動態的記憶體配置的技術例如 malloc(), free()... 這些動態記憶體配置跟釋放的指令。再利用這些函數,跟系統要記憶體或用完後歸還記憶體。

老實說,其實最近不斷的在練習跟精進這些 C 語言的技巧。畢盡,這是主要吃飯的工具。但是,這個版是不準備放任何 C/C++ 語言的任何東西的,因為網路上 C/C++ 的素材真的太氾濫了,這種入門等級的,實在無需我們出來浪費網路的資源。

但是,來個 FORTH 語言版本的這種程式碼,倒是十分的樂意!除了讓我更熟悉外,也可以加減推廣 FORTH 語言囉。所以來篇這樣的部落格文吧!

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

最近幾天,被武漢肺炎攻進家裡囉,家裏有人中獎。然後自己也被迫關在家裡照顧他們。在家裏,還是不要浪費寶貴的時間,來寫寫並更新部落格吧。

最近因為操作一些高靈敏度感測器的關係,發現我們常會需要一種非常重要的應用:某些非常高靈敏度的感測器,因為非常的靈敏,所以相對的,通常會有大量的雜訊伴隨在真實訊號裡面。如何在一堆雜訊裡面抽出真實的感測器訊號,是常常會遇到且必須的重要技術。

這種情況,我們通常會分析雜訊的頻率狀況,假如頻率確定的話,適當引進高通濾波器 (High-Pass Filter),低通濾波器 (Low-Pass Filter)或是帶通濾波器 (Band-Pass Filter),即可有效的過濾雜訊的干擾。

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言

最近因為工作上會用到,所以做了一些研究。當然啦,這篇偏向統計物理的心得筆記。但是因為有用 FORTH 來模擬了一下,應該也是不錯 FORTH 語言的參考,所以把它歸類在 FORTH 語言裡面。

一般而言,這種模擬可以用任何語言, R 語言, Python,MatLab ... 都行。 因為 gFORTH 有很完整跟非常標準的浮點運算,所以我都把 gFORTH 當數值分析語言來用,也蠻方便的。做個心得筆記記錄,以後要用時查閱方便。

 

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

最近在研究鼎鼎大名的卡爾曼濾波器 Kalman Filter。這個濾波器已經發展很久囉,因為太威了,各種資料的處理,數據的融合都少不了它。所以被廣泛地使用在工業上的各行各業,航天,導航,汽車,無人車控制,...甚至是電腦裡滑鼠位置速度的讀取,連最近最夯的BMS電池管理系統都可以見到它的身影。它其實是個數學統計理論加上馬可夫鏈的一個結果,核心的五個公式,可以透過嚴密的統計跟控制理論完整的推導出來。不過對初學者而言,直接透過反直覺的這五個矩陣運算的複雜公式來學習卡爾曼濾波器,除了直接被嚇跑,恐怕也得不到任何新的洞見跟有價值的想法。

所以最好的學習方式,還是先從簡單的一維公式開始,比較可以容易操作跟熟悉所有卡爾曼濾波器的想法。等非常熟悉後,再回頭去看這五個卡爾曼濾波器的數學推導跟所有動態模型的條件跟假設,這樣在學習上會比較有幫助些。

所以這篇來用一維的卡爾曼濾波器公式先來熟悉,跟練功。比較嚴密跟太數學的推導之後再說吧!(留到下一篇)

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

最近因為工作的關係,需要熟悉 RS485 的通訊協定。這個協定基本上是硬體層 RS232 的差動電壓版本,叫做 RS422,再加上一個傳輸層的協定叫做 Modbus 的 protocol,並不難。

但假如要實作的話,就需要搞懂所謂 CRC (Cyclic redundancy check) 循環冗餘校驗的計算演算法,所有資料在送出前需要透過這個CRC計算後附加上去。主從的雙方收到資料後都依賴這個 CRC 的計算來彼此查驗是否資料的傳輸的過程中發生任何資料丟包的情況,最後來進行後續的處置。

特別是像 RS485 的這種號稱可以傳送長達一公里距離的 bus, 這種訊號因為長距離的傳輸而扭曲丟包的情況是非常容易發生的,所以採用 CRC 的技術來進行檢查變得非常的必要。

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

雖然正統的 FORTH語言不太使用浮點運算,但 gFORTH 真的是個不錯的科學計算平台。它的浮點運算在我的 MacOS 上來看,是雙準確度,非常精確的,真的越用越喜歡。

最近心血來潮,用它來測試一些地理計算的數學運算,例如地球上任兩點距離的計算,真的覺得非常方便。站在推廣 FORTH 語言的立場,來灌溉一下提供一下 FORTH 程式碼囉。

 

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

最近開始比較有參加台灣符式語言愛好者協會 FIG Taiwan 的活動,認識了不少喜歡這個很古老語言的愛好者。就上星期,協會的理事長透過推特,傳來了一段在 GitHub 上外國同好用 eFORTH 所撰寫的太陽能熱水器的 FORTH 程式碼。

有大概喵了一下,裡面有線性內插法的程式碼。線性數值內插的程式碼對 FORTH 儀器控制而言,是非常普遍跟重要的,因為不管是量測溫度的 Thermal Couple 感測, 量測真空的真空計,... 及各式各樣的感測器,他們的特性曲線很少是線性的啦。然後你說要有一個完美的理論公式來描述它們通常也是非常困難的。所以通常是建立一個對應表,然後透過查表做線性內插的方式將所需要的數值轉換出來。

當然內插法也很多種,但線性內插法是最方便跟快速的,所以最常被使用。

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

類比/數位轉換:

對於任何的科學實驗儀器,或者製程機台,或是自動化控制,通常會有兩個非常重要的介面:

第一個就是 Digital I/O,用來感測或控制 on/off 的訊號。例如控制 Relay 繼電器的 On/Off 來進一步控制某個元件通電運作否?或是控制電磁氣動閥允許壓縮空氣通過否?來更進一步帶動氣壓缸動作之類的(因為壓縮空氣可以帶來極大的能量,所以很多大型的真空閥或是那些只有兩種狀態的機械動作都是由壓縮空氣去驅動!) 或是感測光遮動,磁遮動開關是否感測到機械手臂或門窗已抵達特定位置,繼電器開關是否已經開路或斷路 ... etc 。

第二個就是 AD/DA 類比世界(Analog)跟數位世界(Digital)的轉換介面,它可以把我們生活中處處可見的類比訊號,例如溫度,例如壓力,例如光強度,例如電路裡的電壓,... 適當的轉換成數位化的數值,這樣以數位訊號來運作的電腦或是微處理器才能更近一步對這些數據進行處理(AD)。或反方向,中央處理器透過演算法算出一個數位的數值後,將這個「數位」的數值等比例地轉換成一個類比的電壓值,進一步的去控制那些以類比方式運作的電路元件(DA)。

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

這個星期很開心的利用了國外 FORTH 同好的程式碼,搞定了 gFORTH 跟 wiringPi 在 RaspberryPi 樹莓派上 GPIO 的控制 (請點此篇部落格文),初步測試控制 LED 點滅是完全沒有問題的。所以可以開始來做更複雜的測試囉!來測試一下 SPI 介面的控制吧。

SPI 介面的最佳控制範例就是拿來跟 MAX 7219 溝通囉! MAX7219 是個 8x8 LED 陣列,或是8顆 7段LED顯示器的控制器。它透過SPI介面來跟外界溝通。去年用 Arduino UNO 來用這個做了一個 8x8 LED陣列的迷你跑馬燈(請點此篇部落格文)。今年來做個一模一樣的東西吧,只是這次我們選用的平台從 Arduino UNO + C++ 來改成 RaspberryPi ZeroW + gFORTH 吧!順便我們也可以測試一下 gFORTH 跟 wiringPi 搭配之下,進一步的控制能耐囉。

 

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

樹莓 RaspberryPi 派:

一般而言,我自己做些小東西來控制各種電子玩意我喜歡用 Arduino。 原因無他,因為晶片價格便宜,開發環境完備,資源多。但是 Arduino 還是有缺點的,畢盡ATmega 只是個簡單的八位元單晶片微處理器,不太可能在上面架上複雜的作業系統的,所以要做重量級的應用就很吃力了。

若要做極端複雜的重量級運用,上網查了一下,目前最流行的應該就是樹莓派 Raspberry Pi 囉!採用主流威力強大的 ARM 架構微處理器核心,以太網路,USB,HDMI 影像輸出的高度整合。採用 micro SD 來當巨量的儲存媒介,後期的版本連 wifi/藍芽都是內建的了。也有設計了 40 pins 的 GPIO 數位I/O來做各種外部控制的需求,仿效 Arduino 開源硬體的概念,吸引了各式各樣的硬體資源的進駐。最後配上特製的 Linux 作業系統。整個就是一台威到不行的超級迷你 Linux 電腦。有了 Linux 的威力進駐,那個使用幾乎是完全沒有任何極限的強大,甚至用一堆板子來組個超級電腦叢集都是可以囉!

極端迷你的體積,便宜的售價。這也使得 RaspberryPi 成為受歡迎的嵌入式系統平台。各種強大有趣的專案,例如 AI 人臉辨識,駭客用無線網路掃描儀,AI網路攝影機,家庭物聯網控制中心,掌上GameBoy 模擬器,... 有了 Linux 真的應用上幾乎沒有極限喲。

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

話說這禮拜(2018年7月)終於換新電腦囉, 把家裡的那台 2012 late 的 iMac 21" 換成更新, 更棒的 2017 5K iMac 27"

那台舊 iMac 是已經安裝好 gFORTH 的, 我的 FORTH 程式大部分都在那台上面測試. 新的 iMac 27" 當然預設是不會安裝這種冷僻的電腦語言系統的, 所以必須要重新安裝 gFORTH. 剛好來篇教學文, 來把在 MacOS 上安裝 gFORTH 的過程做個紀錄吧! 這樣也好給有需要的人參考.

 

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

前一篇, 我們利用霍納, 秦九韶的算法寫出了可以快速計算各種多項式函數的 FORTH 程式碼. 這一篇, 我們就來進階應用吧! 原來啊, 多項式函數還有個很有用的用途, 一些超越函數或是特殊函數, 有些是可以用多項式函數來做個多階的逼近跟取值的, (冪級數power series, 無窮階的多項式級數展開...)

而我們的 FORTH系統雖然在 ANS FORTH 已經定義了一些重要的數學函數. 但其實, 有一些數學函數其實也很重要, 例如鼎鼎大名的高斯分佈機率函數! 因為在工程的領域, 或是實驗, 統計的計算, 分佈的估計, 假設檢定. 樣樣都離不開這個重要的函數的!

所以來建構這個連 Excel 都內建的常態分佈機率及其機率密度函數來提供給我們的 FORTH 系統使用吧! 這樣就更如虎添翼囉, 有這個函數的加持, 把 FORTH 當統計軟體, 或統計語言來使用, 更是一點都不奇怪, 整個 FORTH 系統更是威上加威囉, 會更方便來解決任何科學/統計/工程上的任何問題.

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

前面幾篇是來利用最小平方法來配適實驗數據, 求一個多階的多項式. 今天的這一篇, 要倒過來, 假定已經已知一個多階多項式(例如: f(x)=2x^3-4x^2+5x-7), 要如何有效率的求值呢?

就來舉例吧, 假定這個多項式是 f(x)=2x^3-4x^2+5x-7, 要求 x=123 處的值 f(x=123)=?

傳統的算法:

文章標籤

ohiyooo2 發表在 痞客邦 留言(1) 人氣()

前言:

這一篇是上一篇 FORTH 語言專題的延續, 所以前言幾乎一樣! (哈..)

是因為這樣的, 在工作上, 台灣過去20年來培養了大量的製程工程師. 有製程工程師就會有大量的工程實驗, 或是製程實驗. 有製程實驗就免不了產生大量的實驗數據要分析, 要歸納. 於是, 大家都一定不陌生的是最小平方法的曲線配適. 然後, 每個工程師們都不陌生就是如何用 Excel 來做這個最小平方法的多項式配適.

這邊, 不甘於只是用 Excel 來做這件事啦! 想說自己來寫一個程式來做這個最小平方法的多項式配適, 這樣一定很方便. 如果你熟悉數值分析技術的話會知道, 多階的最小平方法多項式曲線配適, 最後會轉化變成要解一個n階的線性聯立方程組問題. 所以前一篇, 我們已經把求解任意階的聯立方程組的數值程式給搞定了! 這一篇, 就要直接進入核心, 要開始寫這個最小平方法多項式曲線配適的數值程式囉!

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

是因為這樣的, 在工作上, 台灣過去20年來培養了大量的製程工程師. 有製程工程師就會有大量的工程實驗, 或是製程實驗. 有製程實驗就免不了產生大量的實驗數據要分析, 要歸納. 於是, 大家都一定不陌生的是最小平方法的曲線配置. 然後, 每個工程師們都不陌生就是如何用 Excel 來做這個最小平方法的多項式配置.

這邊, 不甘於只是用 Excel 來做這件事啦! 想說自己來寫一個程式來做這個最小平方法的多項式配適 (這個程式已經完成了, 跟這篇 BLOG 剛好是姊妹篇, 有興趣請參照此連結), 這樣一定很方便. 如果你熟悉數值分析技術的話會知道, 多階的最小平方法多項式曲線配置, 最後會轉化變成要解一個n階的線性聯立方程組問題. 所以這邊第一步要把這個可以解任意階的聯立方程組的數值程式給先搞定. 所以就來寫一個吧, 來寫一個可以解 n 階聯立方程組的程式囉!

我覺得啊, 數值分析也是工程師們必備的技能. 而且, 結合數學, 用電腦演算法來計算, 模擬工程或物理問題, 或用數理統計處理實驗數據, 這一直都是非常有趣的事. 當然啦, 為了推廣我所非常喜愛的很稀有的 FORTH 程式語言, 這裡的程式一概都用 FORTH 語言來撰寫(C語言, 或其他語言的數值分析程式, 真的太普遍了, 不差我這一個.). 順便展現一下 FORTH 語言優秀的高階性, 跟交談性, 及用來執行數值分析的技巧. 當然, 這些程式碼也變成我自己以後常用的數值分析程式庫啦!

文章標籤

ohiyooo2 發表在 痞客邦 留言(1) 人氣()

前言:

接續2018年農曆過年時期, 在家裡發現一本古老的遊戲程式設計書籍 「BASIC 遊戲程式集」 事件,

之後翻到這本書的第二冊, 「BASIC 遊戲程式集(二) (1984年1月出版」, 郭飛龍 編譯, 慈恩書局總經銷), 第六章, 生命遊戲, 所以來練習一下吧! 來用 FORTH 撰寫一次這個電腦科學歷史上非常有名的遊戲吧!

HipstamaticPhoto-543855928.786905.png

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

話說今年 2018年農曆過年將至的時候, 年末大清掃的時候清出了兩本電腦書. 「BASIC 遊戲程式集」. 這兩本書是 1983年6月出版, 由慈恩書局所出版發行經銷. 郭飛龍先生編譯. 一共出了兩本, 分1, 2兩冊!

看到這本好舊的 BASIC 電腦書, 翻了翻, 熟悉的 BASIC 語言, 頓時回到當時國中生的回憶. 當時應該是國二吧, Apple ][ 的年代, 當時一鍵一鍵的 key-in 進程式碼, 然後在電腦上執行, 那種很神奇的感覺讓人沈迷. 雖然這兩本程式都是以文字畫面為主的, 但是透過簡單的 BASIC 還是可以寫出蠻有趣的遊戲程式的!

而當時的 BASIC 老實說, 程式裡面都用 GOTO 來亂跳, 缺乏結構化程式的語法, 其實程式是很難閱讀的. 但每天還是抱著這幾本書努力研究, 看看人家怎麼寫的. 國中生活除了唸書外的難忘回憶.

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

來篇 FORTH 程式語言跟曆法的一些計算的紀錄吧! 這個我的 blog, 當初規劃就想放一些 FORTH 程式語言的一些心得的, 連分類都設好在那裡好久囉! 但是, 真的沒時間呀! (攤手  

心血來潮, 雖然不看好這種冷門的語言會有什麼造訪率, 但還是來個第一篇打破鴨蛋吧!

 

FORTH 程式語言:

文章標籤

ohiyooo2 發表在 痞客邦 留言(0) 人氣()