gpt4 book ai didi

matlab - 在 MATLAB 中从信号中提取 EEG 分量

转载 作者:太空宇宙 更新时间:2023-11-03 19:58:08 24 4
gpt4 key购买 nike

我在 MATLAB 中有一个简单的 EEG 信号,如下图所示。而我想要的是根据下表提取脑电图的成分。

  • Delta - 高达 4 Hz;
  • Theta - 4 -> 8 赫兹
  • 阿尔法 - 8 -> 13 赫兹
  • 测试版 - 13 -> 30 赫兹
  • Gamma - 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);

有什么解决问题的建议吗?

感谢大家

最佳答案

一种更简单的方法可能是简单地采用 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 中的频域有几个不同的范围:DC 偏移(常数),即 0 频率;正频率范围,这是(对于长度为 N 的原始信号)从 1 到 N/2 的条目;负频率范围是从 N/2 到 N-1 的条目;请注意,这不是打字错误,最高频率(N/2 处的频率)是重复的,并且正负频率的值相同。 (有些人使用 fftshift 来将其显示为人类可能绘制的,但这实际上只是为了外观/理解。)

至于要删除哪些频率,你必须自己弄清楚,但我可以给你一个提示。最高频率(在频率位置 N/2)将对应于您的系统可表示的最高频率,即 fs/2,其中 fs 是您的采样率。您可以相应地缩放以确定要否定哪些。

如果您没有正确地否定相应的负频率,您将在反向 fft 上得到一个虚数信号。

最后一个评论。这种方法只有在您有幸提前获得所有信号时才有效,因为您需要对整个信号使用 DFT。如果您想实时执行此操作,则需要像以前一样创建某种过滤器。

关于matlab - 在 MATLAB 中从信号中提取 EEG 分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901927/

24 4 0
文章推荐: html - 为什么具有宽度的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com