2013年2月20日 星期三

[課程] (101下)訊號與系統


課程老師: 蘇文鈺
Email: alvinsu@mail.ncku.edu.tw

課程助教: 陳奇鴻、許玲绮
Email: signalsystem13@gmail.com

====

+6/14公告行事曆!!
6/19請還沒跟老師談過的組別於此周全部完成!!!!
6/26最後一周上課。
7/3 所有組別進行demo,同樣時間同樣地點(4282)!! 請不要忘記!! 
+7/3 投影片概要範例  
請各位在報告結束後,將"投影片"、"程式碼"、"結果"以壓縮檔的形式寄到信箱。
信件標題是"Project_groupX_學號A學號B"請不要記錯!!

+7/4公告: 明天(7/5)下午 一點半 4204 尚未報告的組別請記得前來!!

====
+ 2/20 課程大綱說明
           練習題目Lab0 
連結:
   MATLAB安裝教學
   網路版安裝說明
   VPN教學

* LAB0 參考程式 (2/20更新)
(參考程式不是正確解答,只是提供一個概念。
一個問題的解法有很多種。
所以請不要拘泥於這些程式碼,
試著挑戰看看用自己的想法解決問題吧 !)

本次練習題目只是先讓各位能對Matlab有初步的認識
所以請不用緊張 : )

----

+2/27 基礎Matlab教學
           練習題目Lab1

*LAB1 參考程式(3/4更新)
(對於取樣頻率這個名詞可能還是要稍微有點概念歐!)

另外,本周(3/6)就開始有正式上課內容囉
請大家準備好課本,或是筆記本
為期中筆試做準備XD

----

+3/6 課程投影片CH1 (4/7更新)
        課程投影片CH2 (4/24更新)
        課程投影片CH3 (5/22更新)
        課程投影片CH4 (6/5更新)
        練習題目Lab2

*LAB2 參考程式 (1) (2) (3/10更新)
(這次參考程式有兩個。分別是有使用square的寫法與
不用square的寫法。給大家參考看看囉!)

----

+3/13 練習題目Lab3  *LAB3 參考程式
(本次題目大家在做積分微分動作時,請不要忘記 ΔH 與 fs 之間的關係
否則很容易算錯值。此外在程式的部分,如果有兩層的迴圈還是希望
大家能用不同的變數做運算,否則很容易有意想不到的bug產生)   (++3/29更新
----

+3/20 練習題目Lab4

*LAB4 參考程式

----

+3/27 練習題目Lab5

*LAB5 參考程式

----

+4/10 練習題目Lab6
音檔 : 011PFNOM_60.wav

*LAB6 參考程式
+6/20 檢討
1. 很多人對於interp1的使用方法不是很清楚,或是用得不好。
這個function可以直接對一整個陣列做處理,所以若是用迴圈一個一個值去算會非常花時間
2. 使用迴圈的時候範圍盡量使用變數而不是直接寫死值。這樣如果助教手邊的檔案跟同學的檔案length剛好差一的話就容易出錯囉
3. 題目中所說的C值,事實上是一個決定對訊號做壓縮/延展的處理。所以在實行上會搭配interp1而得到較快的處理方法。但有些同學在這裡誤把C當作sclalr的運算,所以得到的答案看起來好像可以,實際上是不合理的。
4. 有些人的訊號看起來像是被截斷了,這是因為你們在設定範圍的時候沒有把最大長度先設定好。以本範例來說,延遲時間最多3秒,那麼重新組合的訊號長度就會變成  length(signal)+3*fs ;或訊號會被延展成原始訊號的兩倍, 那麼長度應為length(signal)*2 。另外,把 f (n-a(i)*fs)的式子直接照打進code裡,然後為了處理n在<fs的情形就選擇直接捨棄。這樣子的作法事實上並不正確。

請大家務必了解自己的程式碼!!
----

+4/17 公告: 本周上機考臨時取消! 請大家告訴大家!!
+4/17 練習題目Lab7
本周正常上課。
+4/19 公告: 期中上機考日期訂在 5/1。
另外,期中筆試會在第三章結束後進行。  請大家好好準備!!
*聲音檔
此聲音檔的partial table

+6/21 LAB7 參考程式 envelope副程式
+6/22 檢討
1. 此題目的ab小題主要是讓大家知道"一個訊號可以由很多個不同頻率的sin波組合而成"。所以Xk(t)=Ak*sin(kw0t+pi/2), k=1,...,20 就是分別產生20個不同頻率(由變數 k 主導)、相同長度(長度由變數 t 主導)的波,再乘上振幅的強度(由變數 Ak 主導)。
接著,再以  Y(t)= exp(-t/T)*sum(Xk(t)) 式子則可以控制組合起來的波形(即使用sum)的衰減速度(由變數T,time constant主導)。如果你們去plot(exp(-t/T))就可以發現,當t = T時他的振幅恰好衰減一半(也就是一般所說的"半衰期"),所以想要得到越快衰減的波形就把T設定的越小即可。
2. c小題則是延伸前面的概念:"我要如何組合不同頻率的sin波才能得到一個類似於吉他的聲音呢?" 所以我們提供了吉他聲音組成的一些資訊,主要是其主要組成頻率其能量、還有頻率之間的強度比例關係。由於這裡所提供的"能量"資訊的單位是dB,但是對應到前面的式子,Ak代表的是"訊號振幅的強度",我們沒辦法直接用dB的值去回推要多大強度。所以我們透過"頻率之間的強度比例關係"這個欄位來反推:"兩頻率的能量若差了6dB,則強度應差了0.5倍"。所以當你任意決定了A1的值之後就可以往後面推出所有Ak應該有的值。接著另一個重點是,sin式子裡不需要變數k了!! 因為你的"主要組成頻率"已經告訴你"由這些頻率就可以合出吉他的聲音"。不需要像前面小題,因為只知道freq = 220Hz,後面需要自己補上其2倍頻、3倍頻...這樣。


最後再提一個大家容易犯的錯,就是w0 = 2*pi*f。有些同學會直接拿主要組成頻率當w就丟下去算了,這樣是不對的歐!

----

+4/24 練習題目Lab8
+6/22 LAB8 參考程式
+6/27 檢討
這次作業就是要實作出這個系統,讓各位觀察輸入與輸出訊號的關係。主要有兩種作法,第一種就是每個元件都分開做;第二種則是直接key入最後提供的公式。雖然這兩種做出來的答案會不一樣,但這是code的問題。所以這題兩種寫法都算對,但在此提醒大家希望日後解system的時候能盡量用最後的一行式子寫比較正確。(硬要說起來,就是因為單個解會有問題才希望盡量能避免這種情形發生)

另外,有些同學會把y(t)同時放在等式的兩邊。雖然是直接把課本的式子照寫但這樣寫是錯的!!!因為y(t)放在等式右邊的話,每次在做微分/積分的時候,他都會先抓到一開始設定的y值(通常是0)下去做運算,而不是運算後的值去做運算。所以正確的作法應該要讓y(t)只放在等式的左邊才對!!(很麻煩對吧,明明就是完全一樣的公式,也不能單個處理也不能照寫一定要整理到最後y(t) = ....才有正確的結果聽起來其實很不make sense,但是這就是程式無法處理的事情。所以以後遇到解system的問題的時候各位應該就知道哪邊是有可能出問題的地方囉!)
----

+5/1 期中考 題目 = 練習題目Lab9
+6/30 期中考 參考程式
+6/30 檢討
這個題目我相信很多人都很混亂,就連助教也沒能馬上搞懂(好遜Q艸Q。所以在這裡我把幾個會有問題的地方整理一下。

Q: 這個題目,為什麼可以用"單個元件"的寫法,LAB8才說這樣會出錯不是嗎?
A: 因為這個system並不是"feedback system",也就是他的輸出不會再回過頭來影響結果。所以你要用"單個元件"寫也行,整個整理成一行"微分方程"去求解也可以,用direct formI, II也可。

Q: 為什麼同樣的式子,整理一下換個寫法怎麼就不對了 ?
A: 目前我所知道的"整理一下換個寫法"有三種不對:
     1. 解電路元件的順序 => 因為換了順序所以出錯主要是因為有些東西還沒算出來就被拿去算下一個東西。此時還沒算出來的x(i)所放的是初始值,所以會錯。
     2. 把積分轉寫成微分 => 對於所有有微分積分在裏頭的system阿~在寫程式的時候都強烈建議轉成積分的做法!!!
     舉個例子,積分式  "i = (1/L)*∫ΔVdt" 寫成code => i(t) = i(t-1) +(V(t-1)-V1(t-1))*H/L
     但是換成微分  形如 "ΔV = L*di/dt" 寫成code => V(t)-V1(t) = (i(t)-i(t-1)) *L/H
     注意到了嗎 ? 一來是這兩個式子沒辦法相等(時間單位差了 '1' !!),不過那要選哪個才對呢? 原則上如LAB8檢討所說,不要將還沒算出來的東西放在等式的右邊,所以會選積分式;二來是就算我們先算出 i(t),也不能用底下的微分式子(實際寫過就知道了,這樣寫不會照理論上去跑)。很遺憾,助教的水準無法解答這兩件事的原因。只能告訴你們,這樣寫不會得到預期的結果。
     3. 非上述情形 => 那只剩下你code寫錯了(比如(t), (t-1) 或 fs)。

*電桿: "電位差"導致"電流變化"。所以當前時刻的電位差會產生新的電流值 => 轉成code的話,i(t+1) <==  ΔV(t),which means 先有V(t) , V1(t), 才有 i(t+1)
  電容: 通過"電流"產生"電位差變化"。意即當前時刻的電流會產生新的電位差值 => 轉成code的話,ΔV(t+1) <== i(t),which means 先有i(t) 才能算出V(t)
用這樣的方式來說明,這樣大家應該比較好理解為什麼要用積分式了吧。因為積分式的form就長的形如上面所述的概念,且同時也解釋了不要將還沒算出來的東西放在等式的右邊這件事情!!

以上,希望大家能把搭配範例程式把這個部分搞懂。下次解電路就不會再遇到同樣的問題了!!

----

+5/8 公告:
下周(5/17)晚上七~十點 4282 上機補考。
下下周(5/22)課堂 期中筆試 。 範圍: Ch1~3

----

+5/15 練習題目Lab10
+7/6 LAB10 參考程式
+5/17 期中補考 題目
+7/9 期中補考 參考程式

+5/19 期中筆試訂在5/22,範圍為Ch1~3,考試時間為兩小時,請好好準備!!
另外! 可以open notebook但不能訊息交流!!!! 也不可以open book!!! 這樣提示有清楚了嗎XD 
+7/7 檢討
基本上這一題是投影片中有範例的,所以對於求解H(s)可能大家普遍會選用兩種方式來實行: a. 使用polyval函式處理,再用mag , phase(或是用angle)求得答案;b. 直接對s將每個w代數進去,並且用sqrt, imag/real 求解。原則上這兩種方法都可以,但是大家很容易在b方法出錯: 就是w帶1~10000! 錯在哪呢? 其實就是因為S可以當作是一種座標軸的轉換,(就像從時間軸轉成頻率軸,S事實上也是一種座標軸,想要更深入了解的話請參考下學期吳宗憲老師所開設的"數位系統處理"一課,對此座標會有較多的解釋)這個基底呢~基本上是吃w(角頻率,前面有學過可將有角度的東西轉成複數座標(實數+虛數part)),所以在迴圈裏頭應該是要跑1i~10000i才對!!另外還有一個錯誤很常發生,就是大家會直接拿分母得到的結果告訴我說"這就是角度"。ㄜ..sorry這樣還不是,如果參閱第三章投影片(p.56)就可以發現角度應該是分母得到的結果的負數!!

這是H的部分。接著說說大家都搞錯的部分,也就是第三小題。剛才提到,S是一種座標軸。在這個座標軸上面的system的輸入輸出的關係應該是Y(S) = H(S)*X(S)。(這裡的*代表"相乘")可是這個關係式並不能寫成Y(t) = H(t)*X(t)這樣,他不是單純的變數變換而已。考慮到座標軸再轉回以時間為基底的時候,關係式應改成: y(t) = h(t)*x(t)(這裡的*代表的是"convolution",也就是"旋積")。所以實作的方法可以有兩種:
1.第三章投影片p.58的作法,整理完後可以S與t混著使用(就等於這個公式同時在處理座標軸轉換的動作)。但是這種方法可能要對自己帶入的變數的值要很清楚,不然一下子就搞不清楚現在在處理t還是S了。所以我比較推薦第二種做法
2. 已知H(s)與x(t) => 則透過ilaplace將H(s)轉換成h(t),再與x(t)做convolution得到y(t) => laplace(y(t))
即可得到Y(s);或者將x(t)轉換成X(s)再直接與H(s)相乘也可以!
----

+5/29 練習題目Lab11
+7/8 LAB11 參考程式
+7/9 檢討: 就是解電路,這題大家幾乎都做對,所以觀念上應該是沒問題的。有錯的人可以參考看看範例程式就可以知道自己哪個元件的順序寫錯了!!

----

+6/4 聲音訊號處理軟體AB
+6/5 練習題目Lab12
+6/19 LAB12 參考程式


----

+6/19 練習題目Lab13
----

+6/11公告!!!明天端午放假。

----

+6/26 練習題目 Lab14
----

+ 平時作業成績 (置底 3/10更新)
+ 分組名單及簡介 (置底7/9更新)

----

+7/9 各組project


====

以後對課程有任何問題都可以在這篇討論