使用MATLAB在脑电信号上进行FFT

时间:2014-04-19 07:41:07

标签: matlab fft dft

我从NEXUS 10 mark 2设备获得了5分钟的原始eeg,它在matlab中输出为1 x 76800行向量。据我所知,采样频率选择为256赫兹,因此它总共给出了76800个采样点。没有我在这个原始eeg信号上进行N点FFT。由于N只能是2的幂,我从RAW EGG中提取65536(2 ^ 16)个采样点,即从76800点我已经采用65536.现在我无法对此向量执行fft(65536个采样点) 请任何人都可以指导..我是初学者.. 我到目前为止已经尝试过了

       x=raw(1,1:65536); %raw eeg contain 76800 points , 65536 points are taken 
                         from this
       N=length(x);
       fs=256;
        ts=1/fs;
        tmax=(N-1)*ts;
        t=0:ts:tmax;
        plot(t,x);  % plot time domain

        f=-fs/2:fs/(N-1):fs/2;
        fftval=fft(x);                                                              
        plot(f,ffval); % plot freq domain

我不知道所遵循的步骤是否正确.....我无法理解堆栈溢出中的许多帖子我已经完成了...请帮助..我不想在很多情况下使用EEGLAB POSTS.PLEASE HELP

2 个答案:

答案 0 :(得分:0)

768000是一个非常好的FFT大小。它考虑了小素数:2 ^ 11 * 3 * 5 ^ 3

在我的笔记本电脑上,这需要大约15毫秒。

有点常见的误解是FFT只能是2的幂。对于混合基FFT,情况并非如此。

答案 1 :(得分:0)

我认为代码可能是这样的:

load('eeg_4m.mat')
fs=2048;
x=val(1,:);
N=length(x);
ts=1/fs;
tmax=(N-1)*ts;
t=0:ts:tmax;
plot(t,x);  % plot time domain

nfft = 2^( nextpow2(length(x)) );
df = fs/nfft;
f = 0:df:fs/2;
X = fft(x,nfft);
X = X(1:nfft/2+1);
figure; plot(f,abs(X)); axis([0,50,0,10e6]); % plot freq domain