0

我有 4 个数据矩阵 F1、F2、O1、O2。所有这些都是以 1 毫秒的时间收集的神经信号。F1 和 O1 与 F2 和 O2 同时收集。我需要找出两个试验之间收集的数据有何不同,并比较每个试验的组成部分(F1 和 O1),以注意和反应的差异。我是 MATLAB 新手,但我相信我需要使用 fft 函数。我只是不确定从哪里开始,任何帮助都会非常受欢迎。

4

2 回答 2

2

根据您的采样率(每秒 1000 次),您将只能分析频率高达 500 赫兹的信号。任何具有较高分量的神经信号分量都将显示为较低分量的信号(除非您的设备具有高通滤波器等。)

Matlab 帮助中 fft 的命令是: Y = fft(signal, n)

信号是 F1 或 O1 或 F2 或 O2,应该是一个 1000 长的向量。n 确定您的 FFT 有多少样本。这本质上是您将频率值拆分为 0 赫兹和 1000 赫兹(您的采样率)之间的精细程度。例如,如果您选择 n =256,您的 Y 将是一个 256 长向量,其度量对应于频率 (0*1000/256 hz, 1*1000/256 hz, ... 255*1000/256 hz) .

Y 将是一个复数值向量。通常,您想查看信号的强度或功率。您可以使用“abs()”来查找幅度。我的PSD = abs(Y)。接下来,因为您的信号是真实信号,所以它们的 fft 对称于采样率的一半(500hz)。因此,您应该只看前半部分。这是查看前半部分的代码片段。

Y = fft(信号,n);% 选择你的 n

我的PSD = abs(Y);

myHalfPSD = myPSD(1:ceil(n/2))

myFreqValues = [0:1000/n:500-1000/n] % myHalfPSD 和 myFreqValues 都应该是 n/2 长

情节(myFreqValues,myHalfPSD)

通常,PSD 以对数刻度甚至分贝显示。所以你可以添加一行。

Y = fft(信号,n);% 选择你的 n

我的PSD = abs(Y);

myHalfPSD = myPSD(1:ceil(n/2))

myHalfDBPSD = 20*log(myHalfPSD)

myFreqValues = [0:1000/n:500-1000/n] % myHalfPSD 和 myFreqValues 都应该是 n/2 长

情节(myFreqValues,myHalfDBPSD)

如果您想一次绘制所有 4 个图形,您可能需要使用 subplot(4,1,1)、subplot(4,1,2) 等。

希望有帮助,

于 2010-01-31T04:01:28.107 回答
0

如果您尝试比较两个单独采集的频谱,那么 fft 是您要使用的工具。

Mathworks 有关于如何使用该函数的很好的文档fft,您可以将数据直接剪切并粘贴到他们提供的示例代码中。

如果你想在相同的轴上绘制数据,你可以使用hold on命令,绘制不同的线条颜色(例如:plot(x,y,'r')将绘制一条红线、'b'一条蓝线等 - 请参阅lineseries properties)并包含一个图例来标记图.

于 2010-01-29T18:51:40.330 回答