2017/11/8

3dB頻寬

在討論運算放大器(OPAMP)(Operational Amplifier)時,我們常常會提到3dB頻寬,
但是到底什麼是3dB頻寬,又為什麼這很重要呢?


我們知道非理想放大器的gain都會隨著頻寬增大而往下降,
所以我們需要去定義一個頻率的範圍來認定這個放大器是不是個「好」的放大器,
這個頻率被定義為:
輸出功率降至最大功率的一半時的頻率(half-power frequency)(又稱截止頻率, cutoff frequency)


為什麼是3dB呢?
因為通常大家使用分貝度量放大器的頻率響應(gain)(Magnitude),而分貝使用的是以十為底的對數尺度(logarithmic scale),它可以清楚的表示非常大的數量變化。
使用log的另外好處是當把放大器串連的時候,可以直接用各部件的增益相加而不用相乘(log(A × B) = log(A) + log(B) )


什麼是對數尺度?
根據wikipedia:
對數尺度(logarithmic scale)是一個非線性的測量尺度,用在數量有較大範圍的差異時。像芮氏地震震級、聲學中的音量、光學中的光強度、及溶液的PH值等。
對數尺度是以數量級為基礎,不是一般的線性尺度,因此每個刻度之間的商為一定值。
若資料有以下特性時,用對數尺度來表示會比較方便:
  • 資料有數量級的差異時,顯示對數可以同時顯示很大的資料和很小的資料。
  • 資料有指數增長或冪定律的特性時,有對數尺度可以將曲線變為直線表示。

而我們在頻率響應的圖通常都是半對數圖,也就是只有一個座標軸(縱座標)用對數方式表示

以功率來算增益的話:
L = 10*log10(Po/Pin)
當 Po/Pin = 0.5 時:
L = 10*log10(0.5) = -3

以電壓來算增益的話: 
L = 20*log10(Vo/Vin)
因為P=V^2/R,當Po/Pin = 0.5時, Vo/Vin = sqrt(1/2) = 0.707
L= 20*log10(0.707) = -3


在這裡我們可以觀察到一件事:
功率比為2,約為三分貝(更精確地說是103/10或1.9953,與2相比較有0.24%的誤差)


所以-3dB這個數字就是這樣算出來的。
換句話說,如果想要找到截止頻率(cutoff frequency),就可以去找頻率響應中的-3dB gain point


「3db」的圖片搜尋結果

2017/11/4

控制理論的應用範例

以下節錄自:
When-should-one-use-control-theory, QUORA
What-are-some-widely-used-applications-of-control-theory-outside-engineering, QUORA
Is-control-theory-still-used-widely-in-electrical-engineering-What-about-embedded-systems-and-digital-analog-circuits, QUORA


翻譯是自己翻的,如有錯誤請不吝指教。
----------------------------------------------------------------
By Pulkit Nahata


控制工程是一個跨學科的領域而且不被限制在特定領域

作為一個電機工程的學生,你不能從一個有限的觀點來想像它
你會很驚訝地得知大部分主修/精通模型預測控制的是化學工程師

理論上的控制和實際上的控制有個不同,理論的目的是去給出一個在任何系統上普遍可應用的觀點,很多進階控制理論沒有任何實際的應用。PID控制則是隨處可見且用於百分之九十五的工業領域,在未來還是可以找得到應用。

你何時該開始學習控制理論:控制理論非常廣且大。有人完成他們的博士學位在特定的控制策略上,你不可能了解所有的控制理論(你不可能了解任何東西的所有事)

控制理論擁有廣大的應用,事實上是所有地方。首先建立一個數學背景,擁有一個特定背景後,尋找你的系統是甚麼以及有什麼特定的目的是你要達成的。使用你的系統接受且最好的策略

----------------------------------------------------------------
By Himanish Ganjoo,

I was working on the Gun Control System of the T-72 Main Battle Tanks. Obviously, I cannot meddle with the tank, so I designed a PID controller and added some compensators to the model of the tank gun movement, to mitigate the disturbances caused due to random accelerations of the tank and noise in signal transmission. I could then happily adjust the parameters of the PID controller to bring the time it would take a disturbance to die out to within 0.2 seconds.


a basic example - A chopper or DC-DC Converter
可以轉換DC電壓到另一個特定的DC電壓
在許多不同的系統當中,我們用有單電池供電,然而不同的零件需要使用不同大小的電壓,所以我們需要chopper
輸出電壓由一個特定開關脈波的運轉週期來控制,它被應用在其中一個電路中的開關


舉例,電壓轉換器可以把一個輸入電壓轉成更低的電壓,在這裡,Vout=D*Vin,D是運轉週期
現在,如果我知道我的Vin=30V 且想要Vout=24V,我會設定D=0.8,這樣我的輸出就被設定好了
如果我想要不管我的Vin是多少,Vout一直都被設在24V呢?我會需要去在各個時間測量我的輸入電壓,然後手動調整我的運轉週期去得到我想要的輸出電壓24V
我很懶惰,所以我做的是去建立一個控制回授來讓這個單調乏味的工作自動進行

我做的事情是:測量輸出電壓,並用一個我想要的電壓作為參考電壓去做比對,接著送出誤差訊號到可以轉換誤差到我脈波運轉週期的元件去得到我想要的輸出)  



由上圖你可以知道我是如何使用回授控制去控制我開關的波型。Transistor gate driver送出一個開關的脈波,運轉週期是由我的回授電路和補償器去控制

此外,你可能還會在你的第一堂控制理論課程上學到補償器設計的基本理論。你可以透過設計補償器去得到特定大小的穩定度以及改進響應。你可以對這些補償器做同樣的事,設計他們的轉移函數去改進頻率響應和unity-gain frequency







這就是我們在日常生活中使用控制理論的一個簡單例子。

2017/10/15

[AmebaRTL8195A] 玩玩網路功能

今天玩了一些範例:
CheckMac 可以印出Ameba8195的mac位址
ChackAP 可以連接附近的AP
ScanNetworks 可以掃描附近可以連接的AP

不過當USB斷線時,連接AP的狀態也會斷掉




在ScanNetworks裡面看到RSSI,查了資料以後發現在 wifi 和 802.11兩個關鍵字當中是個重要的參數呢

以下為資料節錄

--------------------------

From Metageek

What is RSSI and what does it mean for a WiFi network?

  • RSSI, or “Received Signal Strength Indicator”, is a measurement of how well your device can hear a signal from an access point or router. It’s a value that is useful for determining if you have enough signal to get a good wireless connection.
  • Note: Because an RSSI value is pulled from the client device’s WiFi card (hence “received” signal strength), it is not the same as transmit power from a router or AP.

From WIKI
  • the higher the RSSI number, the stronger the signal. Thus, when an RSSI value is represented in a negative form (e.g. −100), the closer the value is to 0, the stronger the received signal has been.



---------------------------
資料來源:

2017/7/9

clang簡介

昨天在練習c語言的時候,無聊的想查一下電腦的gcc版本是什麼,
使用的是 gcc --version 這個指令。
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.38)
Target: x86_64-apple-darwin16.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
一查才知道原來電腦裡裝的是另一個代替gcc的編譯器---clang

[ 關於clang ]
是一個C、C++、Objective-C和Objective-C++程式語言的編譯器前端。它採用了底層虛擬機(LLVM)作為其後端。它的目標是提供一個GNU編譯器套裝(GCC)的替代品。作者是克里斯·拉特納,在蘋果公司的贊助支援下進行開發,而原始碼授權是使用類BSD的伊利諾伊大學厄巴納-香檳分校開源碼許可。
Clang專案包括Clang前端和Clang靜態分析器等。

這個軟體專案在2005年由蘋果電腦發起,是LLVM編譯器工具集的前端(front-end),目的是輸出代碼對應的抽象語法樹(Abstract Syntax Tree, AST),並將程式碼編譯成LLVM Bitcode。接著在後端(back-end)使用LLVM編譯成平台相關的機器語言 。Clang支援C、C++、Objective C。
在Clang語言中,使用Stmt來代表statement。Clang程式碼的單元(unit)皆為語句(statement),語法樹的節點(node)類型就是Stmt。另外Clang的運算式(Expression)也是語句的一種,Clang使用Expr來代表Expression,Expr本身繼承自Stmt。節點之下有子節點列表(sub-node-list)。
Clang本身效能優異,其生成的AST所耗用掉的記憶體僅僅是GCC的20%左右。FreeBSD 10將Clang/LLVM作為預設編譯器。

[ 效能 ]
測試證明Clang編譯Objective-C代碼時速度為GCC的3倍,還能針對使用者發生的編譯錯誤準確地給出建議


來源 : wikipedia

-----------------------
註:
在stackexchange上面查到可以找出電腦gcc的指令(但不知是取自哪)
gcc -dumpversion | cut -f1,2,3 -d. 


我的是4.2.1 (改-fl後面的1,2,3可選擇顯示版本小數點數 如 -fl1 輸出為4)

2017/7/2

從「處理球」的觀點來談籃球能力

摘錄自 http://tw.basketball.biji.co/index.php?q=news&act=info&id=668&subtitle

有一些跑不快、跳不高甚至投籃不準的人,上場時間比那些又會跑又會飛的體能怪物來的多。照道理說這些人是無法存在那充滿碰撞與速度的籃球場上的,只是好像他們能夠憑藉著一些「什麼」而讓他們被需要,甚至不會在關鍵與不能出錯的倒數階段被教練換下來。關於這個「什麼」到底是什麼?「處理球」這三個字或許就是很好的一個答案。


籃球是一個比賽得分的運動,其次是數據,但是在這些光鮮亮麗的數字背後,處理球往往是被忽略的。
處理球指的是當一個籃球選手在籃球比賽時,接球前、接球時、接球後、甚至是在接到球的過程中的每一個決定與反應。此決定與反應的合理性與時間長短決定了這位選手處理球能力的好壞。
處裡球無法用現有的籃球統計數字來表示,就連我們認為是無私象徵的助攻數據,也不能說明處理球的能力。


2017/6/17

使用dd指令備份sd卡遇到問題[已解決]

今天想說來備份一下sd卡
結果沒想到會出現一個網路上也找不到解決辦法的問題

我輸入dd指令後出現了以下訊息:
sudo dd if=/dev/disk4 of=~/Desktop/170617_rpi3_backup.img bs=1m
dd: ~/Desktop/170617_rpi3_backup.img: No such file or directory  


不知道該怎麼辦啊...



-

[ 20170617 - 更新 ] 

把問題發到樹莓派的stackexchange之後,有人發現我的錯誤了:P
點此

原來使用sudo時,必須要輸入所謂的full path路徑才會被系統認可,不然就是要cd到目的路徑才可正常執行。
原因猜測是因為sudo代表最高使用者的權限,如果輸入~ (代表$HOME)的路徑,他會搞不清楚是哪個使用者吧。
 


2017/6/4

安裝binary檔案到osx/linux並使用其terminal指令

有時候我們在網路上找到的程式是binary檔而不是osx上常見的dmg,這時候就要將其移動到系統當中的一個特定地點 /usr/local/bin,osx/linux只會從這些資料夾查看可以使用的程式。

安裝方法:
將下載來的binary檔案移動到 /usr/local/bin 即可在terminal中使用其指令。

可以使用 mv 或者 cp 這兩個指令
用法:
mv [source] [destination]
cp [source] [destination]


說明:
When you type commands like ngrok in the terminal, Macs (and other Unix OSs) look for these programs in the folders specified in your PATH. The PATH is a list of folders that's specified by each user. To check your path, open the terminal and type: echo $PATH.
You'll see output that looks something like: /usr/local/bin:/usr/bin:/bin. This is a : separated list of folders.
So when you type ngrok in the terminal, your Mac will look for this executable in the following folders: /usr/local/bin, /usr/bin/ and /bin.


像我目前如果在terminal中輸入 echo $PATH 則會出現:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Library/TeX/texbin
代表這些地方都有存放可在terminal中執行指令的程式


各個path的比較:

  1. /bin (and /sbin) were intended for programs that needed to be on a small / partition before the larger /usr, etc. partitions were mounted. These days, it mostly serves as a standard location for key programs like /bin/sh, although the original intent may still be relevant for e.g. installations on small embedded devices.
  2. /sbin, as distinct from /bin, is for system management programs (not normally used by ordinary users) needed before /usr is mounted.
  3. /usr/bin is for distribution-managed normal user programs.
  4. There is a /usr/sbin with the same relationship to /usr/bin as /sbin has to /bin.
  5. /usr/local/bin is for normal user programs not managed by the distribution package manager, e.g. locally compiled packages. You should not install them into /usr/bin because future distribution upgrades may modify or delete them without warning.
  6. /usr/local/sbin, as you can probably guess at this point, is to /usr/local/bin as /usr/sbin to /usr/bin.

      In addition, there is also /opt which is for monolithic non-distribution packages, although before they were properly integrated various distributions put Gnome and KDE there. Generally you should reserve it for large, poorly behaved third party packages such as Oracle.





參考資料:
https://stackoverflow.com/questions/30188582/ngrok-command-not-found
https://unix.stackexchange.com/questions/8656/usr-bin-vs-usr-local-bin-on-linux 
https://linux.die.net/man/7/hier