Я пытаюсь показать 30-фазный сдвиг при 50 Гц.
Ниже приведен код, который я использовал:
import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft,ifft,fftshift
pi = np.pi
A =0.5
f = 50
phase = 50
fs = 32*f
t = np.arange(0, 0.5-1/fs, 1/fs)#start, stop, steps
phi = phase*pi/180 #convert phase in degree into radians
x = A*np.sin(2*pi*f*t+phi)
fig1, ax = plt.subplots(nrows=1, ncols=1) #create figure handle
ax.plot(t,x)
ax.set_title('Voltage Reference Signal')
ax.set_xlabel('Time [s]')
ax.set_ylabel('Voltage [V]')
fig1.show()
N= 512
X = 1/N*fftshift(fft(x,N))
f_bin = fs/N
sampleIndex = np.arange(-N/2,N/2)#start,stop
f =sampleIndex*f_bin
fig2,ax = plt.subplots(nrows =1, ncols=1)
ax.plot(f, abs(X))
ax.set_xlabel('Frequency [Hz]')
ax.set_xlim(-100,100)
ax.set_ylabel('|X(k)|')
fig2.show()
print (X[0:5])# testing purposes
A = X[0:5].real#print(A)
B = X[0:5].imag#print(B)
phase_test = np.arctan2(B,A)*180/pi
phase = np.arctan2(X.imag,X.real)*180/pi
fig3,ax = plt.subplots (nrows =1,ncols =1)
ax.plot(f, phase)
ax.set_title('FFT Phase Shift for Vref with Noise')
ax.set_xlabel('Frequency [Hz]')
ax.set_xlim(-200,200)
ax.set_ylabel('Phase Shift')
fig3.show()
X2 = X
threshold =max(abs(X))/100000
y = abs(X2)
if y<threshold :
X2 =0
phase =np.arctan2(X2.imag,X2.real)*180/pi
fig4, ax = plt.subplots(nrows=1,ncols =1)
ax.plot(f,np.angle(X2))
ax.set_title('FFT Phase Shift for Vref without Noise')
ax.set_xlabel('Frequency[Hz]')
ax.set_xlim(-200,200)
ax.set_ylabel('Phase Shift')
fig4.show()
, который я написал со ссылкой на код MATLAB что делает то же самое (ссылка на сайт: Газовые волны фазы амплитуды ) Технический перевод с MATLAB на Python
Это часть кода MATLAB, как правильно преобразовать в Python .
threshold = max(abs(X))/10000
X2(abs(X) <threshold) =0
Я просто хочу получить чистый сдвиг фазы, как показано на веб-ссылке. Фазовый спектр без шума.