我有一个EMG信号,想要得到在定义的频率空间中振幅的平均值。我试着做FFT,但是我得不到一个有振幅和频率的向量。我是Matlab的新手-请帮助我。
发布于 2014-02-05 17:02:15
下面是如何从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通常被分成不同的数据窗口。对这些窗口中的每个窗口和平均窗口执行FFT。
与使用快速傅立叶变换函数相比,您可能需要考虑使用Matlab信号处理工具箱中的pwelch函数。它允许您设置窗口大小、窗口的重叠量等。
或者,您可以使用David Halliday编写的非常流行的Neurospec Matlab工具箱。它有一个PDF,描述了你可以使用的所有函数和示例。它有额外的功能(例如,一致性),但如果你愿意,你可以忽略它,简单地提取光谱数据。
https://stackoverflow.com/questions/20489734
复制相似问题