發表文章

目前顯示的是有「DSP」標籤的文章

DSP筆記2_傅立葉轉換於頻譜分析的應用筆記

圖片
  關於「譜」 https://www.youtube.com/watch?v=F2Yl7N2uQWs 關於譜的觀念可以從光學領域追朔,以前學過當一束光經過三稜鏡,會根據光的波長(週期)被分解為紅橙黃綠藍....等色彩,也稱作(可見光)光譜。 對於訊號而言,頻譜分析也就是所謂借助傅立葉變化,類似三稜鏡一般將訊號轉換到頻率域,藉此去解析出構成原始訊號不同頻率成分。而描述頻率分量的曲線就稱作訊號的頻譜。 如圖中所示,原始波形訊號經由傅立葉分解出三條不同訊號波長的偕波集合。而此時若我們從這張圖的時間軸的朝向去看,波長的倒數也就是頻率,可去看不同頻率上的幅值。 傅立葉這位法國數學家,當時提出「任何時間函數都可分解為若干正弦訊號的總和」。 正弦函數是構成訊號的描述基本單元 以下這三個參數通常就能用於區分不同正弦訊號的Identifier,更可以理解為訊號的資訊載體。 A 振幅,反映訊號的強度(顯著程度) ω 頻率,衡量單位時間內訊號均勻重複的次數 Φ 相位,衡量時間延遲或時間偏移,可提供我們訊號於全局時間軸上出現時刻。 每個參數皆能乘載反映訊號產生原本質特徵的識別資訊 像是以下這個週期性波形,僅依靠肉眼觀察。我們無法很明確得知其數學模型。 無法得知該波形的準確頻率。若只依靠時域資訊,我們對複雜模式分析能力有限。 這也是為何需要將其分解為正弦訊號的原因。 因為我們人類對正弦訊號的特性比較熟悉。 傅立葉變換的核心是根據頻率,將原始訊號分解為若干正弦訊號的總和。 比方下面左側原始波形,經過傅立葉轉換分解後,得知可以用4個正弦訊號合成這個波形。 所以可以檢測到四個頻率成分 若要把這塊訊息用更簡潔呈現方式,可以透過繪製一個新的圖表。 橫軸以頻率而非時間作為自變數,縱軸以振幅來表示。 第一個正弦訊號在頻率對應位置是1,振幅為3。 第二個正弦訊號在頻率對應位置是7,振幅為1.5。 其他依此類推。 而相位參數則可以獨立呈現在另一張圖中 傅立葉函數以時域訊號作為輸入,輸出包含幅度和相位資訊的頻率函數。 當我們有能力拆解出頻譜資訊後可以做捨麼用途? 在工業領域中,可以想像遇到類似區分齒輪箱振動訊號原始波形,若從原始時域訊號難以發現問題,但從頻譜則可以清楚看到主要振動頻率,從而延伸做像是按傳動關係進一步推定振動源或故障異常分析等應用。 要從給定時域訊號中提取傅立葉變化就兩步驟 Step1....

DSP筆記3_使用matplotlib練習繪製連續時間訊號子圖做訊號不同頻率比較

圖片
  測試程式 import numpy as np import matplotlib.pyplot as plt t = np.arange( 0 , 1 , 0.01 ) xt1 = np.cos( 2 *np.pi* 3 *t) xt2 = np.cos( 2 *np.pi* 5 *t) xt3 = np.cos( 2 *np.pi* 7 *t) xt4 = np.cos( 2 *np.pi* 9 *t) #subplot(row,column,繪製圖表個數) plt.subplot( 4 , 1 , 1 ) plt.plot(t,xt1) plt.subplot( 4 , 1 , 2 ) plt.plot(t,xt2) plt.subplot( 4 , 1 , 3 ) plt.plot(t,xt3) plt.subplot( 4 , 1 , 4 ) plt.plot(t,xt4) plt.show()

DSP筆記2_使用 NumPy練習繪製連續時間訊號正弦波(Sine)_餘弦波(Cosine)_跟離散時間訊號繪製_stem用法

圖片
  連續時間正弦波-數位取樣訊號 從 0 秒取樣到 0.999 秒,每隔:0.001秒取一個樣本。 plt.plot(t, xt)會把點連起來,像連續波形。 程式碼 import numpy as np import matplotlib.pyplot as plt t = np.arange( 0 , 1 , 0.001 ) #print(t) xt = np.sin( 2 *np.pi* 3 *t) plt.plot(t, xt) plt.title( "Sine Wave" ) plt.xlabel( "Time" ) plt.ylabel( "Amplitude" ) plt.show() xt = np.cos( 2 *np.pi* 3 *t) plt.plot(t, xt) plt.title( "Cosine Wave" ) plt.xlabel( "Time" ) plt.ylabel( "Amplitude" ) plt.show() 正弦波最標準的數學式通常寫成: 符號 A : 振幅 Amplitude f : 頻率 Frequency ,每秒完成幾個週期。 t : 時間 Time  ϕ : 初始相位 Phase 2πf : 角頻率,圓的一整圈是:360度,而在數學上通常不用度數,而使用「弧度 radian」。 36 0 ∘= 2π radians 對照式子可推得各參數分別如下 振幅=1 訊號頻率=3 Hz ,代表一秒鐘有 3 個週期。由於時間剛好介於一秒,因此會看到三個完整的正弦波 初始相位=0 角頻率=6π rad/s t = 0~0.999 秒 而餘弦波也依樣畫葫蘆。 若固定在一個 3 Hz 正弦波,於不同取樣間隔下,離散取樣點會有什麼差異。 左側是用0.001間隔密度採樣。也就是在一秒鐘內對 3 Hz 正弦波取 1000 點。 右側則用0.01間隔密度採樣,取樣間隔變大了 10 倍。每秒只取 100 個樣本。 stem() 很常用來表示離散時間訊號,每一根垂直線代表「一個取樣值」。 程式碼 import numpy as np import matplotlib.pyplot as p...

DSP筆記1_使用 NumPy自帶的fft做_觀察fft結果、ifft後的訊號波形圖、頻率對應相位

圖片
https://www.sintef.no/en/expert-list/digital/sustainable-communication-technologies/signal-processing-and-machine-learning/ 在Python當中我們可使用 FFT 函式,將時域訊號轉換成頻域訊號。 例如使用 NumPy自帶的: import numpy.fft as fft 而另一套scipy引入方式則是用 import scipy.fftpack as scifft fft功能:主要就是把時間序列訊號做FFT,獲得其幾個頻率、振福和初始相位。 ifft功能:也就是把複數值序列做傅立葉逆變化,獲得複數值的訊號,取其實部,是時頻訊號。可以寫出訊號的余弦函數的結構式。 以下就DSP幾個術語做個介紹 訊號頻率: 指訊號本身週期性變化的速度,通常使用 f 表示,單位為赫茲(Hz)。 例如,一秒鐘重複 10 次的訊號,其頻率為 10 Hz。 取樣頻率: 指每秒鐘對連續訊號取樣的次數,通常使用 Fs 表示,單位也是 Hz。 表示每秒取得 100 個取樣點。 奈奎斯(Nyquist-Shannon sampling theorem)取樣定理: 為了正確還原訊號,取樣頻率至少必須大於訊號最高頻率的兩倍。 舉例:像是人類聽力範圍坐落於20赫茲-20000赫茲(20kHz) 根據奈奎斯取樣定理,fs > 2 fH 也就是 fs > 2 * 20kHz 目前網際網路流傳的音樂檔mp3,其取樣頻率也通常是設在44kHz、48kHz。 實際應用通常會選擇比兩倍更高的取樣頻率,以降低混疊現象。 FFT 頻譜幅值: fft_magnitude = np.abs(np.fft.fft(signal, n=NFFT)) np.abs() 用來計算 FFT 複數結果的絕對值,也就是頻譜的幅值。 振幅(頻)譜(amplitude spectrum): 透過傅立葉變換(Fourier Transform)將時域訊號轉成頻域後,取其絕對值或強度大小而得到的結果。 能量訊號: 若訊號振幅的絕對值平方,在整個時間範圍 (−∞,+∞) 內的積分為有限值,則稱為能量訊號。 常見例子包括有限時間的方波訊號、三角形訊號、脈衝訊號、暫態訊號、非週期性的確定訊號,以及非隨機訊號。 能量頻譜:...