Ric*_*ota 17 matlab signal-processing spectrogram
我是MATLAB的初学者,我应该对EEG信号进行频谱分析,绘制功率谱密度和频谱图.我的信号是10几秒长,一个采样频率160 Hz,总共1600 samples有一些关于如何在MATLAB中找到函数参数的问题,包括:
pwelch (x, window, noverlap, nfft, fs);
spectrogram (x, window, noverlap, F, fs);
Run Code Online (Sandbox Code Playgroud)
那么我的问题是在哪里找到参数的值window,noverlap我不知道它们的用途.
abc*_*bcd 81
为了理解窗口函数及其用法,我们首先看一下当你采用有限长度样本的DFT时会发生什么.在离散傅立叶变换的定义中隐含的假设是,您正在考虑的信号的有限长度是周期性的.
考虑一个正弦波,采样使得捕获一个完整的周期.当信号被复制时,您可以看到它作为不间断信号周期性地继续.得到的DFT只有一个非零分量,并且处于正弦波的频率.

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

这种频谱泄漏通过旁瓣发生.要了解更多相关信息,您还应该阅读sinc函数及其傅里叶变换(矩形函数).有限采样序列可以看作无限序列乘以矩形函数.发生的泄漏与sinc函数的旁瓣有关(sinc和矩形属于自对偶空间并且彼此为F.Ts).这在上面链接的光谱泄漏物品I中有更详细的解释.
窗口功能
窗函数用于信号处理,以最小化光谱泄漏的影响.基本上,窗函数的作用是它在末端逐渐变细有限长度序列,因此当平铺时,它具有周期性结构而没有不连续性,因此光谱泄漏较少.
一些常见的Windows是汉宁,汉,布莱克曼,布莱克曼-哈里斯,凯泽-贝塞尔,等等.你可以从维基链接更多关于它们念起来相应的MATLAB命令是hann,hamming,blackman,blackmanharris和kaiser.这是不同窗口的一小部分示例:

您可能想知道为什么有这么多不同的窗口函数.原因是因为它们中的每一个具有非常不同的光谱特性并且具有不同的主瓣宽度和旁瓣振幅.没有免费午餐这样的东西:如果你想要良好的频率分辨率(主瓣很薄),你的旁瓣会变大,反之亦然.你不能两者兼得.通常,窗口功能的选择取决于具体的需求,并且总是归结为妥协.这是一篇非常好的文章,讨论使用窗口函数,你一定要仔细阅读它.
现在,当您使用窗口函数时,锥形末端的信息较少.因此,解决这个问题的一种方法是使用具有重叠的滑动窗口,如下所示.这个想法是,当它们放在一起时,它们尽可能地接近原始序列(即,底行应尽可能接近平坦值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)或者ceil(W/2)如果W可以取奇数值.这只是一个整数.NFFT 是FFT长度fs是数据向量的采样频率.你可以把它留空,MATLAB用标准化频率和时间轴将数字绘制成简单的数据块索引.如果输入,MATLAB会相应地缩放轴.您还可以获得可选输出,例如时间向量和频率向量以及计算的功率谱,以用于其他计算或者您需要以不同方式设置样式.有关详细信息,请参阅文档.
这是一个例子,1秒的线性啁啾信号,从20 Hz到400 Hz,以1000 Hz采样.两个窗函数被使用,Hanning并且Blackman-Harris,使用和不重叠.窗口长度为50个样本,并且在使用时重叠50%.每个图中的图都缩放到相同的80dB范围.

由于重叠,您可以注意到数字(上下)的差异.如果使用重叠,则可以获得更清晰的估计.你还可以观察我前面提到的主瓣宽度和旁瓣幅度之间的权衡.汉宁有一个较薄的主瓣(沿斜线对角线突出的线条),导致更好的频率分辨率,但有外泄漏,从外面明亮的颜色看.另一方面,布莱克威尔 - 哈里斯(Blackwell-Harris)有一个较胖的主瓣(较粗的对角线),但光谱泄漏较少,由均匀的低(蓝色)外部区域证明.
上述两种方法都是对信号进行操作的短时方法.信号的非平稳性(其中统计是时间的函数,Say mean,以及其他统计数据,是时间的函数)意味着您只能假设信号的统计信息在短时间内是恒定的.没有办法到达这样一段时间(信号的统计数据是恒定的),因此它主要是猜测工作和微调.
假设您上面提到的信号是非静止的(哪些是EEG信号).还假设它仅静止大约10ms左右.要可靠地测量统计数据PSD or energy,您需要一次测量10ms这些统计数据.窗口函数是您将信号与信号相乘以隔离信号的10ms,您将在其上计算PSD等.所以现在您需要遍历信号的长度.您需要一个移位窗口(一次窗口扫描整个信号10ms).重叠窗口可以更准确地估计统计数据.
您可以这样想象:
1.取信号的前10ms.
2.使用窗口函数对其进行窗口化.
3.仅在此10ms部分计算统计数据.
4.将窗口移动5ms(假设重叠长度).
5.再次触发信号.
6.再次计算统计数据.
7.移动整个信号长度.
有许多不同类型的窗口函数 - Blackman, Hanning, Hamming, Rectangular.那个以及窗口和重叠的长度实际上取决于您拥有的应用程序以及信号本身的频率特性.
例如,在语音处理中(信号是非静止的并且窗口被大量使用),窗口函数最常用的选择是汉明/汉宁长度10ms (320 samples at 16 kHz sampling) with an overlap of 80 samples (25% of window length).这工作得相当好.您可以将此作为应用程序的起点,然后使用不同的值对其进行微调.
您可能还想查看MATLAB中的以下函数:
1.2 hamming
.hanning
我希望你知道你可以在命令行上使用help命令在MATLAB中调用大量的帮助.MATLAB是最好的文档软件之一.使用help命令pwelch还可以提取窗口大小和重叠的定义.那也应该帮助你.
我不知道是否所有这些信息.帮助你或不帮助你,但看着这个问题,我觉得你可能需要一些帮助来理解窗口和重叠是什么.
HTH,
Sriram.