【问题标题】:How to convert a 1D signal to 2D signal?如何将一维信号转换为二维信号?
【发布时间】:2020-08-06 14:05:46
【问题描述】:

我有一个 1 维信号(EEG 信号),我想将其转换为 2D 信号,以便将其用作 CNN 模型的输入。我可以使用傅里叶变换来做到这一点吗?

【问题讨论】:

  • 您好,请尝试提供有关您的问题、您尝试过的内容以及所需的输入/输出的更多详细信息
  • 尝试构建一个接受一维输入的 CNN。你会比随机添加一个新的、无意义的维度要好得多。
  • @CrisLuengo 我试过了,但精度不够好,我考虑过使用 2d 输入
  • 我支持 Cris Luengo 的声明。使用一维卷积层。如果你的准确率很差,你可能应该通过添加额外的卷积层或类似的东西来提高你的模型复杂度。

标签: python conv-neural-network signal-processing fft medical-imaging


【解决方案1】:

在这里 x 而不是 np.linspace 使用您的数据点 (1D) 数组。您的 2D 将由 (x,freq) 组成

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5, 100)
y = np.sin(2 * np.pi * x)

## fourier transform
f = np.fft.fft(y)
## sample frequencies
freq = np.fft.fftfreq(len(y))
plt.plot(freq, abs(f) ** 2)
plt.show()

print( "Shape of singal array : {}".format(x.shape))

print( "Shape of frequency array : {}".format(freq.shape))

new_2D_array = np.vstack((x, freq)).T
print(new_2D_array)

【讨论】:

  • 数据点是什么意思? (我的输入信号是EEG医疗信号)
  • 对不起,我不太了解医学术语,但您的脑电图信号是一维数组,对吗?如果是,则进行傅里叶变换得到频率,从而得到信号+频率。
  • 检查我所做的编辑。当我指的是数据点时,我指的是由 EEG 中的值组成的一维数组。您对这些点执行傅立叶变换。然后你结合原始脑电阵列+频率阵列,制作一个二维阵列。
  • 即使脑电图是医学的,它也需要由值组成,我会考虑幅度或其他。所以你得到 EEG_signal = [1,2,3,4,5,etc] -> 1D ,新数组 new_2d_array = [[1,F(1)], [2,F(2)] ...] 因此2D。
  • 我不想这样做,因为新维度没有空间关系。 OP想用CNN,把f(i)和y(i)平均起来是什么意思?
【解决方案2】:

您可能正在寻找“频谱图”:https://en.wikipedia.org/wiki/Spectrogram 这是幅度与时间和频率的二维图。

您可以通过对信号的连续重叠部分应用短时傅里叶变换来实现。

Scipy 有一些方法可以为您做到这一点:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.stft.html https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.spectrogram.html

频率的数量与窗口大小成正比(上述文档中的 nperseg)。您需要为 EEG 确定合适的频率分辨率才能进行设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多