2020/11/09

類比訊號

典型的類比訊號稱為弦波 Sinusoids,弦波的數學模型,可表示成複數指數系統。最後介紹相量 Phasor 的定義,同時討論與證明相量加法規則 Phasor Addition Rule

類比訊號 analog signals 可定義為:隨著時間改變的連續訊號,用函數表示為 \(x=f(t)\),其中 t 為時間,x 是隨著時間改變的連續訊號

弦波 sinusoids

可用餘弦函數定義為 \(x(t)= A cos (ωt+ϕ)\) 或 \(x(t)=A cos(2 \pi ft+ϕ)\)

其中 A 為振幅 Amplitude,ω 為角頻率 Angular Frequency,f 為頻率,ϕ 為相位移 Phase Shift,且 \(ω = 2 \pi f\)

具有週期性 \(T=\frac{1}{f}\)

ω 為角頻率,單位是 弧度/秒 (Radians/Second) ,\(ω = 2 \pi f = \frac{2 \pi}{T}\)

頻率的單位是 次數/秒 (Cycles/Second) 或 Hz

相位移的單位是 弧度 (Radians)

import numpy as np
import matplotlib.pyplot as plt

def sinusoids(amplitude, frequency, phase_shift, plotpos):
    t = np.linspace( 0, 2, 1000, endpoint = False ) # 定義時間陣列
    x = amplitude * np.cos( 2 * np.pi * frequency * t + phase_shift ) # 產生弦波

    plt.subplot(plotpos)
    # plt.ylim(-4,4)

    plt.plot( t, x )                                # 繪圖
    plt.xlabel( 't (second)' )
    plt.ylabel( 'Amplitude' )

# 振幅 = 1, 2, 4
plt.figure( 1 )
# 1*cos(2*pi*2*t)
sinusoids(1, 2, 0, '131')
# 2*cos(2*pi*2*t)
sinusoids(2, 2, 0, '132')
# 4*cos(2*pi*2*t)
sinusoids(4, 2, 0, '133')

# 頻率 = 1,2,4
plt.figure( 2 )
# 1*cos(2*pi*1*t)
sinusoids(1, 1, 0, '131')
# 1*cos(2*pi*2*t)
sinusoids(1, 2, 0, '132')
# 1*cos(2*pi*4*t)
sinusoids(1, 4, 0, '133')


# 相位移 = 0, pi/4, pi/2
plt.figure( 3 )
# 1*cos(2*pi*1*t)
sinusoids(1, 1, 0, '131')
# 1*cos(2*pi*2*t)
sinusoids(1, 1, np.pi/4, '132')
# 1*cos(2*pi*4*t)
sinusoids(1, 1, np.pi/2, '133')

plt.show( )

ex: \(x(t)=Acos(2 \pi ft+ϕ)\)

振幅 A = 1,2,4

頻率 f = 2

相位移 ϕ = 0

結果:當 A 越大,音量越大

ex: \(x(t)=Acos(2 \pi ft+ϕ)\)

振幅 A = 1

頻率 f = 1,2,4

相位移 ϕ = 0

結果:當 f 越大,音頻越高,每秒震盪次數越大

ex: \(x(t)=Acos(2 \pi ft+ϕ)\)

振幅 A = 1

頻率 f = 1

相位移 ϕ = 0, π/4, π/2

結果:弦波會向左移動 0, π/4, π/2,若 ϕ 為負值,則是向右移,稱為時間延遲 (Time Delay)。相位移不會改變波形

複數 complex number

定義為 \(z=a+bj\) ,其中 a 為實部 real part, b 為虛部 imaginary part,\(j=\sqrt{-1}\) 為虛數的單位

  • 複數可用複數平面 complex plane 表示

  • 極座標 Polar Coordinate System 的方式表示

\(z = |z|(cosθ + j sinθ)\) ,其中

\(|z|=\sqrt{a^2+b^2}\),稱為複數的強度 (magnitude)

\(θ = tan^{-1}(b/a)\) ,稱為複數的幅角 (argument) 或相位角 (Phase Angle)

note: arctan 的值域為 \((-\frac{\pi}{2}, \frac{\pi}{2})\),第二、三象限的角度,無法直接用 arctan 計算

  • 根據尤拉公式(Euler's Equation) \(e^{jθ} = cos θ + j sinθ\),複數也可表示為極座標表示法

    \(z=|z|e^{jθ}\)

ex: 複數 \(z=3+4j\) ,求強度 magnitude,相位角 Phase Angle

import numpy as np

# z = - 3 + 4j                          # 定義複數
z = complex(3,4)
magnitude = abs( z )                # 計算強度(Magnitude)
theta = np.angle( z ) * 180 / np.pi # 計算相位角(Phase Angle)

print( "z =", z )
print( "Magnitude =", magnitude )
print( "Phase Angle =", theta )
$ python complex_number.py
z = (3+4j)
Magnitude = 5.0
Phase Angle = 53.13010235415598

強度 magnitude

\(|z|=\sqrt{3^2+4^2} = 5\)

相位角

\(θ = tan^{-1}(4/3) = 52.13^{\circ}\)


複數的運算

  • \(j=\sqrt{-1}, j^2 = -1\)

  • 加法

    \((a+bj)+(c+dj) = (a+c)+(b+d)j\)

  • 減法

    \((a+bj)-(c+dj) = (a-c)+(b-d)j\)

  • 乘法

    \((a+bj)(c+dj) = (ac-bd)+(bc+ad)j\)

  • 除法

    \(\frac{a+bj}{c+dj} = \frac{(a+bj)(c-dj)}{(c+dj)(c-dj)} = \frac{(ac+bd)+(bc-ad)j}{c^2+d^2}\)

  • 反尤拉公式

    \(cosθ = \frac{e^{jθ}+e^{-jθ}}{2}, sinθ= \frac{e^{jθ}-e^{-jθ}}{2j}\)


ex: 用複數證明三角函數的和角公式

\(cos(α+β) = Re\{cos(α+β) + jsin(α+β)\} \\ = Re\{e^{j(α+β)}\} \\ = Re\{e^{jα}+e^{jβ}\} \\ = Re\{(cosα+jsinα) \cdot (cosβ+jsinβ)\} \\ = Re\{(cosα \cdot cosβ - sinα \cdot sinβ) + j (sinα \cdot cosβ+cosα \cdot sinβ)\}\)

因此

\(cos(α+β) = cosα \cdot cosβ - sinα \cdot sinβ\)

\(sin(α+β) = sinα \cdot cosβ+cosα \cdot sinβ\)


複數指數訊號

complex exponential signals 定義為

\(z(t) = A e^{j(ωt+ϕ)}\) ,其中 A 是振幅 amplitude,(ωt+ϕ) 是相位角 Phase Angle

根據弦波定義 \(x(t)=A cos(ωt+ϕ)\) 與尤拉公式 \(e^{jθ} = cosθ+jsinθ\)

\(z(t) = A e^{j(ωt+ϕ)} = A cos(ωt+ϕ)+A \cdot jsin(ωt+ϕ)\)

因此 \(x(t) = Re\{z(t)\}\) 弦波,是複數指數訊號 z(t) 的實部

相量

相量 Phasor 定義為 \(X= A e^{jϕ}\),其中 A 是振幅 amplitude,ϕ 是相位移 phase shift

根據複數指數訊號的定義

\(z(t) = A e^{j(ωt+ϕ)} = Ae^{jωt} \cdot e^{jϕ} = Ae^{jϕ} \cdot e^{jωt}\)

因此定義 \(X=Ae^{jϕ}\),就是 Phasor


ex: 求弦波 \(x(t)=10 cos(2 \pi t+\pi /4)\) 的 phasor

因為 A =10, f=1, ϕ=π/4

phasor = \(Ae^{jϕ} = 10e^{j\pi/4} = 10 \cdot (cos\frac{\pi}{4}+jsin\frac{\pi}{4}) = 5\sqrt{2}+5\sqrt{2}j\)


Phasor 就是複數平面上的向量 vector


ex: 兩個頻率相同的弦波相加的結果,頻率不變

\(x_1(t) = 3 cos(2 \pi 10 t + \pi/4)\)

\(x_2(t) = 4 cos(2 \pi 10 t + 3\pi/4)\)

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace( 0, 1, 1000, endpoint = False )         # 定義時間陣列
x1 = 3 * np.cos( 2 * np.pi * 10 * t + np.pi / 4 )       # 第一個弦波
x2 = 4 * np.cos( 2 * np.pi * 10 * t + 3 * np.pi / 4 )   # 第二個弦波
x3 = x1 + x2                                            # 弦波相加

plt.plot( t, x1, '--', label = 'x1(t)' )                # 繪圖
plt.plot( t, x2, '--', label = 'x2(t)' )
plt.plot( t, x3, '-', label = 'x3(t)' )

plt.legend( loc = 'upper right' )
plt.xlabel( 't (second)' )
plt.ylabel( 'Amplitude' )
plt.axis( [ 0, 1, -6, 6 ] )

plt.show( )

相量加法規則

相量加法規則:有 N 個弦波,角頻率都是 \(ω_0\),振幅與相位移分別為 \(A_k, ϕ_k, k=1,2,...N\),則

\(\sum_{k=1}^{N}A_kcos(ω_0t+ϕ_k) = Acos(ω_0t+ϕ)\)

換句話說,若有 N 個弦波,角頻率 \(ω_0\) (或頻率 \(f_0\)) 都相同,則相加後的弦波,角頻率 (或頻率) 會維持不變

證明:用複數的運算規則

\(\sum_{k=1}^{N}A_kcos(ω_0t+ϕ_k) = \sum_{k=1}^{N}Re\{A_ke^{j(ω_0t+ϕ_k)}\} \\ = Re\{ \sum_{k=1}^{N} A_ke^{j(ω_0t+ϕ_k)}\} \\ = Re\{ \sum_{k=1}^{N} A_ke^{jϕ_k} \cdot e^{jω_0t}\} \\ = Re\{ (\sum_{k=1}^{N} A_ke^{jϕ_k}) \cdot e^{jω_0t}\} \\ = Re\{ Ae^{jϕ} \cdot e^{jω_0t}\} \\ = Re\{ Ae^{j(ω_0t+ϕ)}\} \\ = Acos(ω_0t+ϕ)\)

以上推導過程要滿足 \(\sum_{k=1}^{N} A_ke^{jϕ_k} = Ae^{jϕ} \)

也就是 N 個弦波相加後結果,振幅 A 與 相位移 ϕ ,可根據個弦波的 Phasors,取其總和來決定


ex: 有兩個弦波,計算加總後 \(x_3(t)=x_1(t)+x_2(t)\) 的振幅及相位移

\(x_1(t) = 3 cos(2 \pi 10 t + \pi/4)\)

\(x_2(t) = 4 cos(2 \pi 10 t + 3\pi/4)\)

先計算兩個弦波的 phasors

\(A_1e^{jϕ_1} = 3 e^{j \pi/4} = 3 cos(\frac{\pi}{4}) + j sin(\frac{\pi}{4})\)

\(A_2e^{jϕ_1} = 4 e^{j 3 \pi/4} = 4 cos(\frac{3\pi}{4}) + j sin(\frac{3\pi}{4})\)

相加後的 phasor (複數加法)

\(Ae^{jϕ} = (3 cos(\frac{\pi}{4})+4 cos(\frac{3\pi}{4}) ) + j(sin(\frac{\pi}{4})+sin(\frac{3\pi}{4})) \\ = -\frac{1}{\sqrt{2}} + j \frac{7}{\sqrt{2}}\)

轉換為極座標 \(z = |z| (cosθ+jsinθ)\) \( z=a+bj, |z| = \sqrt{a^2+b^2}, θ = tan^{-1}(b/a)\)

\(A=|z| = 5\)

\(ϕ = \pi - tan^{-1}(7) = 1.7127\) note: 第二象限的 arctan

因此 \(x_3(t) = 5 cos(2 \pi 10 t+1.7127)\)

import numpy as np

phasor1 = complex( 3 * np.cos( np.pi / 4 ), 3 * np.sin( np.pi / 4 ) )
phasor2 = complex( 4 * np.cos( 3 * np.pi / 4 ), 4 * np.sin( 3 * np.pi / 4 ) )
phasor = phasor1 + phasor2

A = abs( phasor )                   
phi = np.angle( phasor ) 

print( "Phasor1 =", phasor1 )
print( "Phasor2 =", phasor2 )
print( "Phasor =", phasor )
print( "Amplitude =", A )
print( "Phase Angle =", phi )

執行結果

Phasor1 = (2.121320343559643+2.1213203435596424j)
Phasor2 = (-2.82842712474619+2.8284271247461903j)
Phasor = (-0.707106781186547+4.949747468305833j)
Amplitude = 5.0
Phase Angle = 1.7126933813990604

References

數位訊號處理:Python程式實作(附範例光碟)(第二版)

沒有留言:

張貼留言