You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

SignalTest.cs 4.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Tensorflow.NumPy;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using Tensorflow;
  7. using static Tensorflow.Binding;
  8. using Buffer = Tensorflow.Buffer;
  9. using TensorFlowNET.Keras.UnitTest;
  10. namespace TensorFlowNET.UnitTest.Basics
  11. {
  12. [TestClass]
  13. public class SignalTest : EagerModeTestBase
  14. {
  15. [TestMethod]
  16. public void fft()
  17. {
  18. double[] d_real = new double[] { 1.0, 2.0, 3.0, 4.0 };
  19. double[] d_imag = new double[] { -1.0, -3.0, 5.0, 7.0 };
  20. Tensor t_real = tf.constant(d_real, dtype: TF_DataType.TF_DOUBLE);
  21. Tensor t_imag = tf.constant(d_imag, dtype: TF_DataType.TF_DOUBLE);
  22. Tensor t_complex = tf.complex(t_real, t_imag);
  23. Tensor t_frequency_domain = tf.signal.fft(t_complex);
  24. Tensor f_time_domain = tf.signal.ifft(t_frequency_domain);
  25. Tensor t_real_result = tf.math.real(f_time_domain);
  26. Tensor t_imag_result = tf.math.imag(f_time_domain);
  27. NDArray n_real_result = t_real_result.numpy();
  28. NDArray n_imag_result = t_imag_result.numpy();
  29. double[] d_real_result = n_real_result.ToArray<double>();
  30. double[] d_imag_result = n_imag_result.ToArray<double>();
  31. Assert.IsTrue(base.Equal(d_real_result, d_real));
  32. Assert.IsTrue(base.Equal(d_imag_result, d_imag));
  33. }
  34. [TestMethod]
  35. public void fft2d()
  36. {
  37. double[] d_real = new double[] { 1.0, 2.0, 3.0, 4.0 };
  38. double[] d_imag = new double[] { -1.0, -3.0, 5.0, 7.0 };
  39. Tensor t_real = tf.constant(d_real, dtype: TF_DataType.TF_DOUBLE);
  40. Tensor t_imag = tf.constant(d_imag, dtype: TF_DataType.TF_DOUBLE);
  41. Tensor t_complex = tf.complex(t_real, t_imag);
  42. Tensor t_complex_2d = tf.reshape(t_complex,new int[] { 2, 2 });
  43. Tensor t_frequency_domain_2d = tf.signal.fft2d(t_complex_2d);
  44. Tensor t_time_domain_2d = tf.signal.ifft2d(t_frequency_domain_2d);
  45. Tensor t_time_domain = tf.reshape(t_time_domain_2d, new int[] { 4 });
  46. Tensor t_real_result = tf.math.real(t_time_domain);
  47. Tensor t_imag_result = tf.math.imag(t_time_domain);
  48. NDArray n_real_result = t_real_result.numpy();
  49. NDArray n_imag_result = t_imag_result.numpy();
  50. double[] d_real_result = n_real_result.ToArray<double>();
  51. double[] d_imag_result = n_imag_result.ToArray<double>();
  52. Assert.IsTrue(base.Equal(d_real_result, d_real));
  53. Assert.IsTrue(base.Equal(d_imag_result, d_imag));
  54. }
  55. [TestMethod]
  56. public void fft3d()
  57. {
  58. double[] d_real = new double[] { 1.0, 2.0, 3.0, 4.0, -3.0, -2.0, -1.0, -4.0 };
  59. double[] d_imag = new double[] { -1.0, -3.0, 5.0, 7.0, 6.0, 4.0, 2.0, 0.0};
  60. Tensor t_real = tf.constant(d_real, dtype: TF_DataType.TF_DOUBLE);
  61. Tensor t_imag = tf.constant(d_imag, dtype: TF_DataType.TF_DOUBLE);
  62. Tensor t_complex = tf.complex(t_real, t_imag);
  63. Tensor t_complex_3d = tf.reshape(t_complex, new int[] { 2, 2, 2 });
  64. Tensor t_frequency_domain_3d = tf.signal.fft2d(t_complex_3d);
  65. Tensor t_time_domain_3d = tf.signal.ifft2d(t_frequency_domain_3d);
  66. Tensor t_time_domain = tf.reshape(t_time_domain_3d, new int[] { 8 });
  67. Tensor t_real_result = tf.math.real(t_time_domain);
  68. Tensor t_imag_result = tf.math.imag(t_time_domain);
  69. NDArray n_real_result = t_real_result.numpy();
  70. NDArray n_imag_result = t_imag_result.numpy();
  71. double[] d_real_result = n_real_result.ToArray<double>();
  72. double[] d_imag_result = n_imag_result.ToArray<double>();
  73. Assert.IsTrue(base.Equal(d_real_result, d_real));
  74. Assert.IsTrue(base.Equal(d_imag_result, d_imag));
  75. }
  76. }
  77. }