EMG信号中的平均幅度值

时间:2013-12-10 08:45:20

标签: matlab signal-processing

我有一个EMG信号,想要在定义的频率空间中获得幅度的平均值。我尝试制作FFT,但我没有得到幅度和频率的矢量。我是Matlab的新手 - 请帮忙。

1 个答案:

答案 0 :(得分:1)

以下是如何从Matlab中的fft函数获得功率(即幅度)和频率:

fs = 1024; % sampling rate of signal
time = 1; % time in sec of simulated signal
xn = randn (fs*time,1); % creating random signal
nfft = time*fs; % size of window on which to perform FFT
Y = fft (xn, nfft); 
% Convert value to obtain the power of the signal at 
% each frequency
Pyy = Y .* conj(Y) / nfft;
% Create a frequency axis for ploting
fy = fs/nfft * (0:(nfft/2) -1);

plot (fy, Pyy(1:nfft/2))
ylabel ('power (AU)^2') % arbitrary units
xlabel ('frequency (Hz)')
xlim ([0 512])

但是,请记住,EMG不是静止信号。在对EMG信号进行频谱分析时,我们试图逼近真实频谱。这就是为什么EMG通常被分隔成数据窗口的原因。在这些窗口中的每一个上执行FFT并求平均值。

您可能需要考虑在Matlab信号处理工具箱中使用pwelch函数,而不是使用fft函数。它允许您设置窗口大小,窗口重叠量等。

或者你可以使用David Halliday编写的非常流行的Neurospec Matlab工具箱。它有一个PDF,描述了您可以使用的所有功能和示例。它具有附加功能(例如,一致性),但如果您愿意,可以忽略它并简单地提取光谱数据。