Góc pha Python

Kỹ thuật đơn giản nhất trong trường hợp của bạn là chỉ cần tính toán tương quan $r$ của các tín hiệu không có nghĩa, sau đó lấy độ lệch pha là $\phi=\arccos[r/\pi]$ nếu các tín hiệu là sóng hài, i. e. sóng hình sin đơn tần

Một cách khác để làm điều này là với chức năng tương quan chéo. Ý tưởng là tính toán mối tương quan giữa một tín hiệu và tín hiệu thứ hai bị trễ. Khi số lượng độ trễ gần nhất với sự thay đổi pha, bạn sẽ nhận được mối tương quan tối đa. Ưu điểm của kỹ thuật này là nó không phụ thuộc vào hình dạng tín hiệu của bạn, trong khi phương pháp đầu tiên là tốt nhất cho tín hiệu hài

Tại sao điều này nên làm việc cho bạn? . tín hiệu 56MHz. Với 20000 mẫu cung cấp cho bạn hàng trăm sóng đầy đủ được đo, điều đó có nghĩa là trung bình của các tín hiệu sẽ rất gần với giá trị trung bình và các sóng một phần ở đầu và cuối mẫu của bạn sẽ không quan trọng. Do đó, sau khi loại bỏ ý nghĩa của các tín hiệu, mối tương quan chỉ đơn giản là rút gọn thành phương trình sau. $$r\approx\frac{\int_0^{2\pi}sin[x]sin[x+\phi]}{\int_0^{2\pi}sin[x]^2}=\cos[\phi]

Đây là một đoạn mã Python để chứng minh cách thức hoạt động của nó đối với tỷ lệ nhiễu/tín hiệu 10%

nhập numpy dưới dạng np nhập toán

# create fake data
nsr = 1e-1
r = np.random.normal[size=[20000,2]] * nsr
phdiff = math.pi * np.random.uniform[]
print['true phase diff [radians]:', phdiff, '\t[degrees]:', phdiff / [2 * math.pi] * 360]
omega = 13.56e6
t = np.arange[20000] / 500e6
rdata = np.zeros[[len[t], 2]]
ph0 = 2 * math.pi * np.random.uniform[]
rdata[:,0] = np.sin[2 * math.pi * omega * t + ph0]
rdata[:,1] = np.sin[2 * math.pi * omega * t + phdiff + ph0]
rdata = rdata + r

# scale
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler[]
scaler.fit[rdata]
data = scaler.transform[rdata]

import matplotlib.pyplot as plt
plt.figure[]
plt.plot[data[1:100,:]]
plt.show[]

# phase difference determination
plt.figure[figsize=[4,4]]
plt.title['Phase diagram']
plt.scatter[data[1:100,0],data[1:100,1]]
plt.show[]

c = np.cov[np.transpose[data]]
print['cov: ', c]
phi = np.arccos[c[0,1] ]
print['phase estimate [radians]: ', phi, '[degrees]: ', phi / math.pi * 180]

đầu ra

true phase diff [radians]: 1.049746982742775    [degrees]: 60.146071667753475

cov:  [[1.00005    0.48973754]
 [0.48973754 1.00005   ]]
phase estimate [radians]:  1.059007630672643 [degrees]:  60.67666770969148

Đây là một đoạn mã để chứng minh nó có thể hoạt động như thế nào

from statsmodels.tsa.stattools import ccf
xc = ccf[data[:,0], data[:,1]]
plt.figure[]
angle = t * omega * 2 * math.pi

n = math.ceil[fs / omega]
plt.plot[angle[:n], xc[:n]]
plt.show[]
print[angle]

maxa = max[np.abs[xc[:int[n/2]]]]
maxangle = angle[np.abs[xc]==maxa]
print['phase shift [radians]: ',maxangle]

đầu ra

phase shift [radians]:  [2.3855998]

Câu trả lời ban đầu của tôi với PCA, nhưng nó phức tạp hơn. Bạn có thể chạy PCA trên các tín hiệu đã chuẩn hóa, khi đó tỷ lệ của các phương sai được giải thích sẽ chứa thông tin về độ lệch pha của các tín hiệu

Số phức là số chứa phần thực và phần phức, ví dụ ‘2+3j’. Chúng ta có thể sử dụng số phức trong python bằng cách sử dụng mô-đun 'cmath' chứa các hàm toán học cho số phức. Chúng ta có thể tạo một số phức bằng cách gán trực tiếp hoặc sử dụng hàm complex[]. Số phức lấy hai số thực và ảo làm đối số và gán nó cho phần thực và phần phức của số phức. Thí dụ. -

#Direct Assignment using real numbers
a=2+3j
print[a]

#Using the complex function
b=complex[2,3]
print[b]

đầu ra

2+3j
2+3j

Cả hai phương pháp đều cho chúng ta cùng một số phức

Thuộc tính và hàm cho số phức Python

a = 2+3j
print['Real Part of the complex number = ', a.real]
print['Imaginary Part of the complex number = ', a.imag]
print['Complex conjugate of the complex number = ', a.conjugate[]]

đầu ra

Real Part of the complex number = 2
Imaginary Part of the complex number = 3
Complex conjugate of the complex number = 2-3j

Chúng ta cũng có thể thực hiện các phép toán khác nhau trên các số phức như cộng, trừ, v.v.

Note: We can not perform comparison operations like ‘’ on complex numbers.

Pha của một số phức

Pha của một số phức bằng góc giữa phần ảo [được biểu thị bằng một vectơ] và phần thực của số phức. Nó có thể được tính toán bằng cách sử dụng thuộc tính 'pha' của mô-đun 'cmath' hoặc sử dụng 'math'. atan2[]’ từ mô-đun ‘math’.
______50 lấy số phức làm đối số trong khi phép toán. hàm atan2 lấy phần ảo và phần thực của số phức làm đối số tương ứng. Cả hai hàm đều trả về pha của số phức tính bằng radian. Do đó, chúng ta có thể sử dụng mô-đun NumPy để chuyển đổi giá trị này thành độ.

import cmath, math, numpy

a=2+3j

phase = cmath.phase[a]
print['Phase of the complex number 2+3j is = ', phase]

#phase in degrees
print['Phase in Degrees = ', numpy.degrees[phase]]

#using math.atan2[] function
print['Phase using math.atan2[] function = ', math.atan2[3, 2]]

đầu ra

true phase diff [radians]: 1.049746982742775    [degrees]: 60.146071667753475

cov:  [[1.00005    0.48973754]
 [0.48973754 1.00005   ]]
phase estimate [radians]:  1.059007630672643 [degrees]:  60.67666770969148
0

Dạng cực và hình chữ nhật của một số phức trong Python

Chúng ta có thể chuyển đổi một số phức thành tọa độ cực của nó bằng cách sử dụng hàm polar[]. Nó lấy số phức làm đối số và trả về một cặp giá trị [r, ph] trong đó r là mô đun[abs[a]] và ph[pha[a]] là góc pha của số phức 'a' đó

Cmath trong Python là gì?

Mô-đun này cung cấp quyền truy cập vào các hàm toán học cho các số phức. Các hàm trong mô-đun này chấp nhận số nguyên, số dấu phẩy động hoặc số phức làm đối số

Python có thể xử lý các số phức không?

Không chỉ số thực, Python còn có thể xử lý số phức và các hàm liên quan bằng tệp “cmath” . Số phức được sử dụng trong nhiều ứng dụng liên quan đến toán học và python cung cấp các công cụ hữu ích để xử lý và thao tác với chúng.

Loại phức tạp trong Python là gì?

Hàm Python phức[] . returns a complex number by specifying a real number and an imaginary number.

Chủ Đề