算法更新更新
This commit is contained in:
parent
418b6e6ee1
commit
d97c3e8731
|
|
@ -0,0 +1,54 @@
|
||||||
|
# -*- encoding:utf-8 -*-
|
||||||
|
|
||||||
|
'''
|
||||||
|
@Author : dingjiawen
|
||||||
|
@Date : 2023/6/13 21:32
|
||||||
|
@Usage :
|
||||||
|
@Desc : FFT的工具类
|
||||||
|
'''
|
||||||
|
import numpy as np
|
||||||
|
import tensorflow as tf
|
||||||
|
|
||||||
|
'''
|
||||||
|
freq_value: 可以是时域通过np.fft.fft转换而来
|
||||||
|
'''
|
||||||
|
def ifft(freq_value):
|
||||||
|
# 幅值
|
||||||
|
amp = np.abs(freq_value / len(freq_value))
|
||||||
|
# 相角
|
||||||
|
angle = np.angle(freq_value)
|
||||||
|
length = len(amp)
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for t in range(length):
|
||||||
|
wk = 2 * np.pi * np.arange(length) / length
|
||||||
|
cur = np.sum(amp * np.cos(wk * t + angle))
|
||||||
|
result.append(cur)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def fft(time_value):
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
array = np.array([-0.029078494757,
|
||||||
|
-0.33095228672,
|
||||||
|
-0.12124221772,
|
||||||
|
0.553512275219,
|
||||||
|
-0.158036053181,
|
||||||
|
0.268739402294,
|
||||||
|
-0.638222515583,
|
||||||
|
0.233140587807,
|
||||||
|
-0.173265621066,
|
||||||
|
0.467218101025,
|
||||||
|
-0.372010827065,
|
||||||
|
-0.136630430818,
|
||||||
|
0.343256533146,
|
||||||
|
0.008932195604])
|
||||||
|
|
||||||
|
print(tf.signal.fft(array))
|
||||||
|
array_fft = np.fft.fft(array)
|
||||||
|
|
||||||
|
# print(ifft(array))
|
||||||
|
print(array_fft)
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
#-*- encoding:utf-8 -*-
|
||||||
|
|
||||||
|
'''
|
||||||
|
@Author : dingjiawen
|
||||||
|
@Date : 2023/6/13 19:42
|
||||||
|
@Usage :
|
||||||
|
@Desc :
|
||||||
|
'''
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
# -*- encoding:utf-8 -*-
|
||||||
|
|
||||||
|
'''
|
||||||
|
@Author : dingjiawen
|
||||||
|
@Date : 2023/6/13 19:42
|
||||||
|
@Usage :
|
||||||
|
@Desc :测试一下FFT和IFFT公式计算
|
||||||
|
'''
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
array = np.array([-0.029078494757,
|
||||||
|
-0.33095228672,
|
||||||
|
-0.12124221772,
|
||||||
|
0.553512275219,
|
||||||
|
-0.158036053181,
|
||||||
|
0.268739402294,
|
||||||
|
-0.638222515583,
|
||||||
|
0.233140587807,
|
||||||
|
-0.173265621066,
|
||||||
|
0.467218101025,
|
||||||
|
-0.372010827065,
|
||||||
|
-0.136630430818,
|
||||||
|
0.343256533146,
|
||||||
|
0.008932195604])
|
||||||
|
|
||||||
|
array_fft = np.fft.rfft(array)
|
||||||
|
|
||||||
|
# 幅值
|
||||||
|
amp = np.abs(np.fft.fft(array) / len(array))
|
||||||
|
# 相角
|
||||||
|
angle = np.angle(np.fft.fft(array))
|
||||||
|
# 时部
|
||||||
|
real = np.real(np.fft.rfft(array) * 2 / len(array))
|
||||||
|
# 虚部
|
||||||
|
imag = np.imag(np.fft.rfft(array) * 2 / len(array))
|
||||||
|
#
|
||||||
|
angle1 = np.arctan(imag / real)
|
||||||
|
|
||||||
|
print(angle)
|
||||||
|
print(angle1)
|
||||||
|
# result = []
|
||||||
|
# (num,) = amp.shape
|
||||||
|
# (total,) = array.shape
|
||||||
|
# for j in range(total):
|
||||||
|
# wk = 2 * np.pi * np.arange(num) / num
|
||||||
|
# cur = np.sum(amp * np.cos(wk * j + angle))
|
||||||
|
# result.append(cur)
|
||||||
|
#
|
||||||
|
# print(result)
|
||||||
|
# print(array)
|
||||||
|
# # print(array_fft)
|
||||||
|
#
|
||||||
|
# plt.subplot(2, 1, 1)
|
||||||
|
# plt.plot(result)
|
||||||
|
# plt.subplot(2, 1, 2)
|
||||||
|
# plt.plot(array)
|
||||||
|
# plt.show()
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
#-*- encoding:utf-8 -*-
|
||||||
|
|
||||||
|
'''
|
||||||
|
@Author : dingjiawen
|
||||||
|
@Date : 2023/6/13 19:42
|
||||||
|
@Usage :
|
||||||
|
@Desc :
|
||||||
|
'''
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
# -*- encoding:utf-8 -*-
|
||||||
|
|
||||||
|
'''
|
||||||
|
@Author : dingjiawen
|
||||||
|
@Date : 2023/6/13 21:15
|
||||||
|
@Usage :
|
||||||
|
@Desc : 时频域损失
|
||||||
|
'''
|
||||||
|
|
||||||
|
import tensorflow as tf
|
||||||
|
import tensorflow.keras.backend as K
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class FTMSE(tf.keras.losses.Loss):
|
||||||
|
def call(self, y_true, y_pred):
|
||||||
|
y_true = tf.cast(y_true, tf.float64)
|
||||||
|
y_pred = tf.cast(y_pred, tf.float64)
|
||||||
|
|
||||||
|
# 需要转为复数形式
|
||||||
|
yt_fft = tf.signal.fft(tf.cast(y_true,tf.complex64))
|
||||||
|
yp_fft = tf.signal.fft(tf.cast(y_pred,tf.complex64))
|
||||||
|
|
||||||
|
# 幅值
|
||||||
|
amp = tf.abs(yt_fft / len(yt_fft))
|
||||||
|
# 相角
|
||||||
|
angle = tf.angle(freq_value)
|
||||||
|
|
||||||
|
|
||||||
|
time_loss = tf.reduce_mean(tf.abs(y_true - y_pred))
|
||||||
|
|
||||||
|
freq_loss = tf.reduce_mean(tf.abs(yt_fft - yp_fft))
|
||||||
|
|
||||||
|
ftLoss = time_loss+freq_loss
|
||||||
|
return ftLoss
|
||||||
Loading…
Reference in New Issue