diff --git a/TensorFlow_eaxmple/Model_train_test/RUL/FFTUtils.py b/TensorFlow_eaxmple/Model_train_test/RUL/FFTUtils.py new file mode 100644 index 0000000..1ed73a4 --- /dev/null +++ b/TensorFlow_eaxmple/Model_train_test/RUL/FFTUtils.py @@ -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) diff --git a/TensorFlow_eaxmple/Model_train_test/RUL/__init__.py b/TensorFlow_eaxmple/Model_train_test/RUL/__init__.py new file mode 100644 index 0000000..f0e85e4 --- /dev/null +++ b/TensorFlow_eaxmple/Model_train_test/RUL/__init__.py @@ -0,0 +1,8 @@ +#-*- encoding:utf-8 -*- + +''' +@Author : dingjiawen +@Date : 2023/6/13 19:42 +@Usage : +@Desc : +''' \ No newline at end of file diff --git a/TensorFlow_eaxmple/Model_train_test/RUL/test/FFTTest.py b/TensorFlow_eaxmple/Model_train_test/RUL/test/FFTTest.py new file mode 100644 index 0000000..c6d2f3c --- /dev/null +++ b/TensorFlow_eaxmple/Model_train_test/RUL/test/FFTTest.py @@ -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() diff --git a/TensorFlow_eaxmple/Model_train_test/RUL/test/__init__.py b/TensorFlow_eaxmple/Model_train_test/RUL/test/__init__.py new file mode 100644 index 0000000..f0e85e4 --- /dev/null +++ b/TensorFlow_eaxmple/Model_train_test/RUL/test/__init__.py @@ -0,0 +1,8 @@ +#-*- encoding:utf-8 -*- + +''' +@Author : dingjiawen +@Date : 2023/6/13 19:42 +@Usage : +@Desc : +''' \ No newline at end of file diff --git a/TensorFlow_eaxmple/Model_train_test/model/LossFunction/FTMSE.py b/TensorFlow_eaxmple/Model_train_test/model/LossFunction/FTMSE.py new file mode 100644 index 0000000..37ab123 --- /dev/null +++ b/TensorFlow_eaxmple/Model_train_test/model/LossFunction/FTMSE.py @@ -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