【问题标题】:Matlab power spectrum analysisMatlab功率谱分析
【发布时间】:2016-07-28 12:54:51
【问题描述】:

我想用我自己的脑电图数据重现这张图片。 据我了解,这是对过滤数据进行的功率谱分析。

我使用直流放大器(低:直流;高:200)以 1000Hz 的采样率记录了脑电信号。我的数据是:68(电极)x 185080(数据点)。

我尝试使用以下代码:http://uk.mathworks.com/help/signal/ug/psd-estimate-using-fft.html

 Fs = 1000;
 t = 0:1/Fs:1-1/Fs;
 x = Data;
 %x = cos(2*pi*100*t) + randn(size(t));

 N = length(x);
 xdft = fft(x);
 xdft = xdft(1:N/2+1);
 psdx = (1/(Fs*N)) * abs(xdft).^2;
 psdx(2:end-1) = 2*psdx(2:end-1);
 freq = 0:Fs/length(x):Fs/2;
 plot(freq,10*log10(psdx))
 grid on
 title('Periodogram Using FFT')
 xlabel('Frequency (Hz)')
 ylabel('Power/Frequency (dB/Hz)')

但这是我得到的:

我正在努力理解如何进行,以便像第一张图像一样获得对我的 EEG 信号的分析。任何帮助将不胜感激。

【问题讨论】:

  • @willpower2727 该链接是我用来获取代码的链接。
  • 你有DSP工具箱吗?
  • @willpower2727 不,我没有。
  • 无需过多考虑代码,您的结果似乎只显示了一堆噪音 - 即您是否正确记录了您的 EEG 信号?即使没有将 FFT 转换为功率谱(顺便说一句,这很容易,只是对您的 FFT 进行一些操作,一般形状应该看起来相同),您的结果看起来不正确,这与代码无关.你能确认你的输入是正确的吗?
  • @GameOfThrows 是的,我想我确实正确记录了 EEG 信号。这是几分钟的休息状态。但是,我注意到电极是 68(包括 EKG 和 EMG),我实际上并没有使用。

标签: matlab plot spectrum frequency-analysis


【解决方案1】:

这是一个简单的示例,说明如何在不使用 DSP 工具箱的情况下从头开始使用 fft 进行 PSD:

%this does not include any filtering

x = [0:0.01:pi];
y = sin(100*x);
nfft = 2^nextpow2(length(y));
Fs = 100;

psd1 = abs(fft(y,nfft)).^2/length(y)/Fs;%compute the PSD and normalize

plot([0:50/(length(psd1)/2):50],psd1(1:length(psd1)/2+1))
xlabel('Frequency (Hz)');
ylabel('PSD');
grid on
title('PSD from FFT');

结果:

如果此方法的结果与您发布的内容相似,那么我认为其他人关于您的数据存在问题的 cmets 可能是有效的。

【讨论】:

  • 好问题,我的变量“x”就像时间,但它实际上只是用来构建类似于您的“数据”变量的“y”。
  • 我只用 x 来构建 y,y 是 Data 去的地方
  • 如果我使用 Data 而不是 y 会出现错误:Error using fft Requested 262144x185080 (361.5GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a long time and cause MATLAB to become unresponsive. See array size limit or preference panel for more information.
  • 数据为 68 x 185080 单张
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多