2011-05-05 82 views
4

我在MATLAB中有一個簡單的腦電信號,如下圖所示。我想要的是根據下表提取EEG的組件。從MATLAB中的信號中提取腦電信號

  • Delta - 高達4 Hz;
  • 西塔 - 4 - > 8赫茲
  • 阿爾法 - 8 - > 13赫茲
  • β - 13 - > 30赫茲
  • γ - 30 - > 100赫茲

在第一嘗試爲了解決這個問題,我試圖用MATLAB中的'fdatool'來構建一個帶通濾波器來提取組件'theta'信號,但沒有成功。

沿着附加的'fdatool'獲得的過濾器的代碼。

function Hd = filt_teta 
%FILTROPARA TETA Returns a discrete-time filter object. 

% 
% M-File generated by MATLAB(R) 7.9 and the Signal Processing Toolbox 6.12. 
% 
% Generated on: 05-May-2011 16:41:40 
% 

% Butterworth Bandpass filter designed using FDESIGN.BANDPASS. 

% All frequency values are in Hz. 
Fs = 48000; % Sampling Frequency 

Fstop1 = 3;   % First Stopband Frequency 
Fpass1 = 4;   % First Passband Frequency 
Fpass2 = 7;   % Second Passband Frequency 
Fstop2 = 8;   % Second Stopband Frequency 
Astop1 = 80;   % First Stopband Attenuation (dB) 
Apass = 1;   % Passband Ripple (dB) 
Astop2 = 80;   % Second Stopband Attenuation (dB) 
match = 'stopband'; % Band to match exactly 

% Construct an FDESIGN object and call its BUTTER method. 
h = fdesign.bandpass(Fstop1, Fpass1, Fpass2, Fstop2, Astop1, Apass, ... 
         Astop2, Fs); 
Hd = design(h, 'butter', 'MatchExactly', match); 

任何建議如何我可以解決這個問題?

感謝所有

回答

1

如果過濾器沒有對他們有任何限制關於它們的長度,選擇過濾器尖銳的邊緣。如果我在你的鞋子裏,我會建立不同的濾波器(低通和高通),並在傅立葉變換中處理結果,以查看任何高頻或低頻與頻率範圍混雜在一起。 1)構建低通,提取增量 2)構建theta alpha通道的帶通 3)構建高通濾波器,提取gamma。

+0

嗨Hephaestus,謝謝你的回答!對於過濾器邊緣的銳化意味着什麼?也許減少阻帶頻率的值? – 2011-05-05 18:06:27

+1

您使用Fstop1 = 3; ,但您的信號範圍爲0至4 kHz。因此,你會在邊緣丟失一些信號。例如,我會選擇3.98。它使濾波器更大。但是,精度會更好,差異可能會很大。 – Hephaestus 2011-05-05 18:09:15

4

一種更簡單的方法可能是簡單地將FFT和零頻率以外的頻率分量轉換爲您可能感興趣的特定範圍,然後進行反FFT以回到時域。

Keep in mind that you'll have to zero out the positive frequency and negative frequency to maintain that the signal in the frequency domain is conjugate symmetric about the 0 frequency.如果你不這樣做,你將在計算逆FFT時得到一個複雜的信號。例如,下面的代碼在時域中產生兩個正弦曲線,一個相應的DFT(用FFT計算),然後刪除其中一個峯值。

t = 0:0.01:0.999; 
x = sin(t*2*pi*4) + cos(t*2*pi*8); 
subplot(2,2,1); 
plot(x) 
title('time domain') 
subplot(2,2,2); 
xf = fft(x); 
plot(abs(xf)) 
title('frequency domain'); 
subplot(2,2,3); 
xf(9) = 0; xf(93) = 0; % manual removal of the higher frequency 
plot(abs(xf)); 
title('freq. domain (higher frequency removed)'); 
subplot(2,2,4); 
plot(ifft(xf)); 
title('Time domain (with one frequency removed)') 

一些事情要注意。 DFT中的頻域具有幾個不同的範圍:0頻率的DC偏移(常數) (對於長度爲N的原始信號)從1到N/2的條目的正頻率範圍;負頻率範圍是從N/2到N-1的條目;請注意,這不是拼寫錯誤,最高頻率(N/2處的頻率)是重複的,對於正頻率和負頻率都是相同的值。 (有些人使用fftshift來表明這是人爲設計的,但這僅僅是爲了看起來/理解。)

至於要刪除哪些頻率,您必須自己弄清楚,但我可以給你一個提示。最高頻率(頻率位置N/2)將與系統可表示的最高頻率相對應,即fs/2,其中fs是您的採樣率。你可以根據比例來確定哪些是否定的。

如果你沒有正確地否定相應的負頻率,你將得到一個虛fft信號。

最後一條評論。這種方法只有在您能夠提前獲得所有信號時纔有用,因爲您需要在整個信號上使用DFT。如果您想實時執行此操作,則需要按照以前的操作創建某種過濾器。

+0

嗨克里斯答,謝謝你的回答!你可以給我一些片段的指導原則MATLAB代碼我怎樣才能'除了特定範圍以外的頻率分量'?我不太熟悉FFT和信號處理:S – 2011-05-05 22:29:33