在MATLAB中使用FFT对多个数据矩阵进行查找,以找出响应中的差异

时间:2010-01-29 15:43:41

标签: matlab fft

我有4个数据矩阵F1,F2,O1,O2。所有都是在1ms收集一秒钟的神经信号。与F2和O2同时收集F1和O1。我需要找出两个试验之间收集的数据有何不同,并且还要比较每个试验(F1和O1)的组成部分,以便注意到反应的差异。我是MATLAB的新手,但我相信我需要使用fft功能。我只是不确定从哪里开始,任何帮助都会受到很大的限制。

2 个答案:

答案 0 :(得分:2)

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

来自Matlab帮助的fft命令是: Y = fft(信号,n)

信号是F1或O1或F2或O2,应该是1000长的矢量。 n确定您的FFT有多少个样本。这实际上是多么精细地分割0 hz和1000 hz之间的频率值(你的采样率)。例如,如果选择n = 256,则Y将是256长矢量,其度量对应于频率(0 * 1000/256 hz,1 * 1000/256 hz,... 255 * 1000/256 hz)

Y将是复数值的向量。通常,您希望看到信号的强度或功率。您可以使用'abs()'来查找幅度。 myPSD = abs(Y)。接下来因为你的信号是真实信号,它们的fft对称约为采样率的一半(500hz)。因此,你应该只看上半场。这是一个查看上半部分的代码片段。

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

myPSD = 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); %选择你的

myPSD = 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)等。

希望有所帮助,

答案 1 :(得分:0)

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

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

如果要在同一轴上绘制数据,可以使用hold on命令绘制不同的线条颜色(例如:plot(x,y,'r')将绘制一条红线,'b' a蓝色等等 - 请参阅lineseries properties)并添加legend来标记图。