18

我是 MATLAB 的初学者,我应该对 EEG 信号进行频谱分析,绘制功率谱密度和频谱图。我的信号10长几秒,采样频率为160 Hz,一共是1600 samples,对如何在 MATLAB 中查找函数的参数有一些疑问,包括:

pwelch (x, window, noverlap, nfft, fs);

spectrogram (x, window, noverlap, F, fs);

然后我的问题是在哪里可以找到参数的值windownoverlap我不知道它们是做什么用的。

4

4 回答 4

83

要了解窗口函数及其使用,让我们首先看看对有限长度样本进行 DFT 时会发生什么。离散傅里叶变换的定义中隐含的假设是您正在考虑的信号的有限长度是周期性的。

考虑一个正弦波,采样使得捕获一个完整的周期。当信号被复制时,您可以看到它作为不间断信号周期性地继续。得到的 DFT 只有一个非零分量,即正弦波频率。

在此处输入图像描述

现在考虑一个具有不同周期的余弦波,采样后仅捕获部分周期。现在,如果您复制信号,您会看到信号中的不连续性,用红色标记。不再有平滑过渡,因此您将在其他频率出现泄漏,如下所示

在此处输入图像描述

这种频谱泄漏通过旁瓣发生。要了解更多信息,您还应该阅读sinc 函数及其傅里叶变换,矩形函数。有限采样序列可以看作是一个无限序列乘以矩形函数。发生的泄漏与 sinc 函数的旁瓣有关(sinc 和 rectangle 属于自对偶空间,互为 F.Ts)。这在我上面链接的频谱泄漏文章中有更详细的解释。

窗口函数

在信号处理中使用窗函数来最小化频谱泄漏的影响。基本上,窗函数的作用是它在末端逐渐减小有限长度序列,因此当平铺时,它具有没有不连续性的周期性结构,因此光谱泄漏更少。

一些常见的窗口是 Hanning、Hamming、Blackman、Blackman-Harris、Kaiser-Bessel 等。您可以从 wiki 链接了解更多关于它们的信息,相应的 MATLAB 命令是hannhamming、和。这是不同窗口的一个小示例:blackmanblackmanharriskaiser

在此处输入图像描述

您可能想知道为什么有这么多不同的窗口函数。原因是因为它们中的每一个都具有非常不同的频谱特性,并且具有不同的主瓣宽度和旁瓣幅度。天下没有免费的午餐:如果你想要好的频率分辨率(主瓣很薄),你的旁瓣会变大,反之亦然。你不能两者兼得。通常,窗口函数的选择取决于特定需求,并且总是归结为做出妥协。是一篇关于使用窗口函数的非常好的文章,您绝对应该阅读它。

现在,当您使用窗口函数时,锥形末端的信息较少。因此,解决此问题的一种方法是使用具有重叠的滑动窗口,如下所示。这个想法是,当它们放在一起时,它们会尽可能地接近原始序列(即,底行应该尽可能接近平坦值 1)。典型值在 33% 到 50% 之间变化,具体取决于应用。

在此处输入图像描述

使用 MATLAB 的频谱图

语法是spectrogram(x,window,overlap,NFFT,fs)

在哪里

  • x是你的整个数据向量
  • window是你的窗口函数。如果您只输入一个数字,比如说W(必须是整数),那么 MATLAB 会将您的数据分成多个W样本块,并从中形成频谱图。这等效于使用长度W样本的矩形窗口。如果您想使用不同的窗口,请提供hann(W)或您选择的任何窗口。
  • overlap是您需要重叠的样本数。所以,如果你需要 50% 的重叠,这个值应该是W/2. 使用floor(W/2)or ceil(W/2)ifW可以取奇数。这只是一个整数。
  • NFFT是 FFT 长度
  • fs是数据向量的采样频率。您可以将其留空,MATLAB 会根据归一化频率和时间轴将图形绘制为简单的数据块索引。如果您输入它,MATLAB 会相应地缩放轴。

您还可以获得可选的输出,例如时间向量和频率向量以及计算的功率谱,以用于其他计算,或者如果您需要以不同的方式设置绘图样式。有关更多信息,请参阅文档

这是一个示例,其中 1 秒的线性啁啾信号从 20 Hz 到 400 Hz,以 1000 Hz 采样。使用了两个窗口函数,HanningBlackman-Harris,有和没有重叠。使用时,窗口长度为 50 个样本,重叠率为 50%。在每个图中,这些图都被缩放到相同的 80dB 范围。

在此处输入图像描述

由于重叠,您可以注意到数字(上下)的差异。如果你使用重叠,你会得到一个更清晰的估计。您还可以观察到我之前提到的主瓣宽度和旁瓣幅度之间的权衡。Hanning 的主瓣更薄(沿倾斜对角线的突出线),导致更好的频率分辨率,但有泄漏的旁瓣,从外面的明亮色彩可以看出。另一方面,Blackwell-Harris 的主瓣较厚(对角线较粗),但光谱泄漏较少,这可以从均匀的低(蓝色)外部区域证明。

于 2011-05-04T19:24:42.207 回答
8

以上这两种方法都是对信号进行操作的短时间方法。信号的非平稳性(其中统计数据是时间的函数,比如说平均值,以及其他统计数据,是时间的函数)意味着您只能假设信号的统计数据在短时间内是恒定的。没有办法准确地到达这样一个时间段(信号的统计量是恒定的),因此它主要是猜测和微调。

假设您上面提到的信号是非平稳的(EEG 信号是)。还假设它仅静止约 10 毫秒左右。为了可靠地测量统计数据PSD or energy,您需要一次测量这些统计数据 10 毫秒。开窗函数是您将信号与信号相乘以隔离 10ms 的信号,您将在其上计算 PSD 等。所以现在您需要遍历信号的长度。您需要一个移动窗口(一次将整个信号窗口化 10 毫秒)。重叠窗口可以让您更可靠地估计统计数据。

你可以这样想象:
1. 取信号的前 10ms。
2. 用开窗功能开窗。
3. 仅计算这 10ms 部分的统计数据。
4. 将窗口移动 5ms(假设重叠长度)。
5. 再次窗口信号。
6. 再次计算统计。
7. 在整个信号长度上移动。

有许多不同类型的窗口函数 - Blackman, Hanning, Hamming, Rectangular. 那以及窗口的长度和重叠实际上取决于您拥有的应用程序和信号本身的频率特性。

例如,在语音处理中(信号是非平稳的,并且经常使用加窗),加窗函数最流行的选择是长度的 Hamming/Hanning 10ms (320 samples at 16 kHz sampling) with an overlap of 80 samples (25% of window length)。这工作得相当好。您可以将此作为应用程序的起点,然后使用不同的值对其进行微调。

您可能还想看看 MATLAB 中的以下函数:
1. hamming
2.hanning

我希望您知道您可以在 MATLAB 中使用命令行上的 help 命令调用大量帮助。MATLAB 是目前记录最好的软件之一。使用帮助命令pwelch还可以提取窗口大小和重叠的定义。那也应该对你有所帮助。

我不知道是否所有这些信息。不管你有没有帮助,但看看这个问题,我觉得你可能需要一点帮助来理解什么是窗口和重叠。

HTH,
斯里拉姆。

于 2011-05-04T18:09:15.940 回答
-1

对于最后一个参数 fs,即原始信号的频率速率,在您的情况下为 X,当您使用函数从音频数据中提取 X 时

[X,fs]=audioread('song.mp3')

你可能会从中得到 fs 。

于 2014-01-24T20:18:08.177 回答
-2

研究以下参数如何改变Sinc函数的性能:

  1. 系数的长度
  2. 以下窗口功能:
    • 布莱克曼哈里斯
    • 汉宁
    • 巴特利特
于 2013-12-28T20:32:51.140 回答