• 对于fmri的hrf血液动力学响应函数的一个很直观的解释-by 西南大学xulei教授


    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    clear all;clc;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % haemodynamic response function: BOLD signal has stereotyped shape every
    % time a stimulus hits it. We usually use the spm_hrf.m in SPM toolbox to
    % produce HRF. Here, we use the 29 vector to represent HRF from 0 s to
    % 28 s. In this simulation, we suppose TR=1 s.
    
    HRF = [0 0.004 0.043 0.121 0.188 0.211 0.193 0.153 0.108 0.069 0.038 0.016 0.001 -0.009 -0.015 -0.018 -0.019 -0.018 -0.015 -0.013 -0.010 -0.008 -0.006 -0.004 -0.003 -0.002 -0.001 -0.001 -0.001];
    % We will plot its shape with figure 1:
    figure(1)
    % here is the x-coordinates
    t = [0:28];
    plot(t,HRF,'d-');
    grid on;
    xlabel('Time (s)');
    ylabel('fMRI respond');
    title('haemodynamic response function (HRF)');
    
    

    结果:

      

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Suppose that our scan for 120 s, we will have 120 point (because TR = 1
    % s). If a stimulus onset at t=20 s, we can use a vector to represent this
    % stimulation.
    onset_1 = [zeros(1,19) 1 zeros(1,100)];
    % i.e. the whole vector is maked with 19 zeros, a single 1, and then 100
    % zeros. As we have the stimulus onset vector and HRF we can convolve them.
    % In Matlab, the command to convolve two vectors is "conv":
    conv_1 = conv(HRF,onset_1);
    % Let's plot the result in figure 2 
    figure(2);
    % This figure will have 2 rows of subplots.
    subplot(2,1,1);
    % "Stem" is a good function for showing discrete events:
    stem(onset_1);
    grid on;
    xlabel('Time (s)');
    ylabel('Stimulus onset');
    subplot(2,1,2);
    plot(conv_1,'rx-');
    grid on;
    xlabel('Time (s)');
    ylabel('fMRI signal');
    

    结果:

      

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Usually, we have repeat a task many times in a run. If three stimulus 
    % onsets at t=20, 50, 80 s, we also can use a vector to represent this
    % stimulation.
    onset_2 = [zeros(1,19) 1 zeros(1,29) 1 zeros(1,29) 1 zeros(1,20)];
    % Here we use the conv again:
    conv_2 = conv(HRF,onset_2);
    % Let's plot the result in figure 3 
    figure(3);
    % This figure will have 2 rows of subplots.
    subplot(2,1,1);
    % "Stem" is a good function for showing discrete events:
    stem(onset_2);
    grid on;
    xlabel('Time (s)');
    ylabel('Stimulus onset');
    subplot(2,1,2);
    plot(conv_2,'rx-');
    grid on;
    xlabel('Time (s)');
    ylabel('fMRI signal');
    

     结果:

     

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Now let's think about the fast event design. In this condition, we will
    % have many task during a short time. If three stimulus onsets at t=20, 25,
    % 30 s:
    onset_3 = [zeros(1,19) 1 zeros(1,4) 1 zeros(1,4) 1 zeros(1,70)];
    conv_3 = conv(HRF,onset_3);
    figure(4);
    subplot(2,1,1);
    stem(onset_3);
    grid on;
    xlabel('Time (s)');
    ylabel('Stimulus onset');
    subplot(2,1,2);
    plot(conv_3,'rx-');
    grid on;
    xlabel('Time (s)');
    ylabel('fMRI signal');
    

    结果:

    % The three events are so closed, the result signal is like a blocked
    % design. Such as:
    onset_4 = [zeros(1,19) ones(1,11) zeros(1,70)]*(3/11);
    conv_4 = conv(HRF,onset_4);
    figure(5);
    subplot(2,1,1);
    stem(onset_4);
    grid on;
    xlabel('Time (s)');
    ylabel('Stimulus onset');
    subplot(2,1,2);
    plot(conv_4,'rx-');
    % We will compare the result
    hold on; % plot more than one time on a figure
    plot(conv_3,'bx-');
    grid on;
    xlabel('Time (s)');
    ylabel('fMRI signal');
    

    结果:

      

  • 相关阅读:
    后台服务器经典面试题
    Java英语面试题(核心知识篇)
    Java常用英语汇总(面试必备)
    字符压缩编码
    外排序
    基数排序
    Windows Server 2008 R2 部署服务
    LINUX中常用操作命令
    我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
    CSDN-Code平台使用过程中的5点经验教训
  • 原文地址:https://www.cnblogs.com/haore147/p/3633515.html
Copyright © 2020-2023  润新知