t-cat 发表于 2010-3-24 22:27

关于音速感知脑电用MATLAB画时频图

本帖最后由 wdhd 于 2016-9-20 13:32 编辑

  标准刺激是由5个相同鼓点音组成的单调等间隔序列。
  拍音是K-8bit2,音高C5,音长85ms;间隔长度为300,600,900ms。(现在只做600的)偏差刺激在标准刺激的基础上,仅对第4个IOI间隔进行10%的增减,分别对应提前、延后两类偏差刺激,序列尾音为本次实验目标音。





  function =Macc_Average(Xmax,Xmin,fmax,fmin,Scales,Dataname)
  fmax=50
  fmin=20
  SampFreq = 1000;
  step=0.001;
  Datalen=3600
  Xmax=199 =Macc_Average(Xmax,Xmin,fmax,fmin,Scales,Dataname)。。。。
  。。。。
  以上红字部分不完整,肯定有不对的地方,大概是这样子的,请高手改一下。多谢呀
  以下是老师给的正确的主程序,蓝色部分的DATA不知怎么调进来。。。。求高手详解
  signalnum = Datalen; % ERP 的数据长度
  SampFreq = 1000; %采样率
  step=0.001; % 中心频率fc的步长 0.001*SampFreq=1Hz
  fmax = fmax/SampFreq; % 最高分析频率(归一化频率;1 对应SampFreq的值,0.2对应0.2*SampFreq)
  fmin = fmin/SampFreq; % 最低分析频率(归一化频率) 0.06*SampFreq=60Hz, 0.001*SampFreq=1Hz
  totalscal = ceil((fmax-fmin)/step)+1; % 所取尺度的数目, 调用ceil的目的是防止计算误差导致小数部分无限接近1而不等于1,这样FreqBins = linspace(fmin,fmax,totalscal); 就会出现少一个的误差
  serialnumb = 1:signalnum;
  serialtime = serialnumb/SampFreq*1000;
  stimulatetime = serialtime - 1/SampFreq*1000 - 200; % 转换为刺激的记录时间,起点为刺激前200ms(每1个点对应 1/SampFreq*1000=1ms ), i.e.: -100 -99 -98 ....... 3400
  % fb = 5; % 取cmorfb-fc小波进行实验,带宽参数为fb
  % fc = 2; % 中心频率fc
  % wavename = 'cmor5-2';
  fb = 1; % 取cmorfb-fc小波进行实验,带宽参数为fb
  fc = 0.5; % 中心频率fc
  wavename = 'cmor1-0.5';
  FreqBins = linspace(fmin,fmax,totalscal); % 将频率轴在分析范围内等间隔划分
  Scales = fc./ FreqBins; % 计算相应的尺度参数
  RealFreqBins = FreqBins * SampFreq; % 尺度所对应的实际频率,% 转换为实际频率,维数:1 X totalscal , % i.e.: 20 21 22 ....... 49 50
  coefs=cwt(Dataname,Scales,wavename); %小波变换
  f=scal2frq(scal,wavename,1/fs); %将尺度转换为频率
  imagesc(stimulatetime,f,abs(coefs)); %绘制色谱图
  figure
  pcolor(stimulatetime,RealFreqBins,abs((coefs).^2));
  colormap jet;
  shading interp;
  colorbar;
  axis();
  [ 本帖最后由 t-cat 于 2010-3-24 22:30 编辑 ]

页: [1]
查看完整版本: 关于音速感知脑电用MATLAB画时频图