2

我想在一组信号上使用 pwelch,我有一些问题。

首先,假设我们有 32 个(EEG)信号,持续时间为 30 秒。采样频率是fs=256样本/秒,因此每个信号的长度为 7680。我想用pwelch它来估计这些信号的功率谱密度(PSD)。

问题 1: 根据pwelch文档

pxx = pwelch(x) 返回使用 Welch 的重叠段平均估计器找到的输入信号 x 的功率谱密度 (PSD) 估计值 pxx。当 x 是向量时,它被视为单个通道。当 x 为矩阵时,每列独立计算 PSD,并将其存储在 pxx 的对应列中。

但是,如果调用pwelch如下

% ch_signals: 7680x32; one channel signal per each column
[pxx,f] = pwelch(ch_signals);

结果pxx是 size 1025x1,而不是1025x32我所期望的,因为文档指出,如果 x 是矩阵,则 PSD 会为每一列独立计算并存储在 pxx 的相应列中。

问题 2: 假设我克服了这个问题,并且我独立计算了每个信号的 PSD(通过应用于pwelch的每一列ch_signals),我想知道这样做的最佳方法是什么。假设该信号是一个 30 秒的信号,具有采样频率fs=256,我应该如何调用pwelch(使用什么参数?)以使 PSD 有意义?

问题 3:如果我需要将 32 个信号中的每一个拆分为窗口并将 pwech 应用于每个窗口,那么最好的方法是什么?假设我想将每个 30 秒的信号分成 3 秒的窗口,重叠 2 秒。我应该如何调用pwelch这些窗口中的每一个?

4

1 回答 1

1

这是一个例子,就像你的情况一样,

结果表明,该算法指示的信号频率恰到好处。

矩阵的每一列y都是一个正弦曲线来检查它是如何工作的。

窗口为 3 秒,重叠 2 秒,

Fs = 256;                       
T = 1/Fs;                    
t = (0:30*Fs-1)*T;           
y = sin(2 * pi * repmat(linspace(1,100,32)',1,length(t)).*repmat(t,32,1))';
for i = 1 : 32
[pxx(:,i), freq] = pwelch(y(:,i),3*Fs,2*Fs,[],Fs); %#ok
end
plot(freq,pxx);
xlabel('Frequency (Hz)'); 
ylabel('Spectral Density (Hz^{-1})');

在此处输入图像描述

于 2016-02-20T21:20:47.923 回答