MATLAB篇|时序数据模拟生成

本文目的是介绍如何模拟实际数据中具有特征的时间序列数据。基于本文提供的模拟数据方法为以后阐述不同时频分析方法提供数据支撑。

均匀且正态分布的白噪声

可以通过函数rand(均匀分布)和randn(通常为Gaussian分布)生成噪声。这些函数的输入指定所得矩阵的大小。

>> Yu = rand(1000,1);Yn = randn(1000,1);
>> subplot(223),hist(Yu,200);title('Distribution of uniform noise');xlabel('Amplitude bins');ylabel('Counts');
>> subplot(224),hist(Yn,200);title('Distribution of random noise');xlabel('Amplitude bins');ylabel('Counts');
>> subplot(211),plot(Yn),hold on,plot(Yu,'r');

其中,hist()函数中200表示间隔数(bins)数量。
subplot()函数:在matplotlib下,一个Figure对象可以包含多个子图(Axes),可以使用subplot()快速绘制,其调用形式如下
subplot(numRows, numCols, plotNum)
图表的整个绘图区域被分成numRows行和numCols列,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。
所以subplot(211)即表示2行1列,第1个子图。

bins=200时:
MATLAB篇|时序数据模拟生成_第1张图片

bins=10时:
MATLAB篇|时序数据模拟生成_第2张图片

粉红噪声

对于红噪声(也称为布朗噪声)来说,频率和功率的关系是:

P = K / f 2 P=K/f^2 P=K/f2
这里, K = e k K=e^k K=ek, k k k代表直线的截距。频率平方的关系其实可以更一般化的表示为指数 β :

P = K / f β P=K/f^β P=K/fβ
β = 0 β=0 β=0 的时候,所有频率分量的功率都是一个常数,也就是白噪声。 当$ β=2 $的时候,是红噪声。当 β 在0~2以内的时候,叫做粉红噪声(pink noise)。粉红噪声即指频率结构不均匀的噪声,通常功率随频率增加而降低。有几种计算粉红噪声的方法。一种是应用消失的频率滤波器。

>> wn = randn(10000,1); %white noise
>> wnX = fft(wn); % fast fourier transform
>> pn = real(ifft(wnX .* linspace(-1,1,length(wnX))'.^2))*2;
>> subplot(221)
>> plot(wn), hold on,plot(pn,'r'),xlabel('Time (a.u.)'),ylabel('Amplitude (a.u.)'),legend({'white','pink'});
>> subplot(222)
>> plot(wn,pn,'.');xlabel('Amplitude white noise');ylabel('Amplitude pinkified noise')
>> subplot(212)
>> plot(abs(fft(wn))), hold on;plot(abs(fft(pn)),'r');legend({'white';'pink'});xlabel('Frequency (a.u.)'), ylabel('Amplitude')
>> 

MATLAB篇|时序数据模拟生成_第3张图片

其中plot(linspace(-1,1,length(wnX))'.^2)绘图如下:
MATLAB篇|时序数据模拟生成_第4张图片

欢迎关注微信公众号《脑技术训练营》,方便更好的交流,谢谢!
MATLAB篇|时序数据模拟生成_第5张图片

你可能感兴趣的:(脑科学技术学习)