Matlab 对齐右移波形(动作电位)
我的代码很难按照最小峰值点对齐右移波形。在左移中,我复制期望最小点和波形左侧给定点之间的索引差,然后在对齐波形后删除这些额外点。然而,同样的技术不适用于右移的。任何帮助都将不胜感激!输入(VAL)是任意n x 97矩阵Matlab 对齐右移波形(动作电位),matlab,alignment,waveform,Matlab,Alignment,Waveform,我的代码很难按照最小峰值点对齐右移波形。在左移中,我复制期望最小点和波形左侧给定点之间的索引差,然后在对齐波形后删除这些额外点。然而,同样的技术不适用于右移的。任何帮助都将不胜感激!输入(VAL)是任意n x 97矩阵 function [vals] = align_wvs(wvs) %Align_wvs - Align waveforms to minimum point % %align_wvs(wvs) % %wvs - matrix of waveforms % %Returns 'va
function [vals] = align_wvs(wvs)
%Align_wvs - Align waveforms to minimum point
%
%align_wvs(wvs)
%
%wvs - matrix of waveforms
%
%Returns 'vals' - newly aligned matrix of waveforms
wvfrms = (wvs*10^6); %convert to microvolts
wvfrms = wvfrms(:,all(~isnan(wvfrms)));
min_pt = min(wvfrms(:)); %find minimum point in wvs
[~,col] = find(wvfrms==min_pt); %find index of min poin
if numel(col)>1
col = col(1);
end
%and that of other wvfrms
vals = zeros(size(wvfrms)); %matrix of size wvfrms, vals
for i = 1:size(vals,1) %for length of input
vals(i,:) = wvfrms(i,:); %copy og wvfrm into vals
nums = vals(i,:); %get second copy
ind_min = min(nums);
[~,colmin] = find(nums==ind_min);
diff_col = col-colmin;
if (diff_col~=0) %if difference is not = 0
if (diff_col>0) %if wvfrm is shifted to the left
inds = nums(1:diff_col); %copy first n values of nums, where n is diff_rows
new_length = length(nums)+length(inds); %extend wvfrm by amount ind
new_vals = zeros(1,new_length); %create new array of size new_length
new_vals(1:(diff_col)) = inds; %add inds to begining of new array
new_vals(diff_col+1:end) = nums; %add nums to rest of array
new_vals(1:(diff_col)) = [];%delete diff_rows-1 values from end
vals(i,:) = new_vals; %add to values
else %if wvfrm is shifted to the right
inds = nums(end+(diff_col+1):end); %copy last n values of nums, where n is diff_rows
new_length = length(nums)+length(inds); %extend wvfrm by amount ind
new_vals = zeros(1,new_length); %create new array of size new_length
new_vals(end+(diff_col+1):end) = inds;%add inds to end of new array
new_vals(1:(end+(diff_col))) = nums;%add nums to rest of array
new_vals(1:(diff_col*-1)) = []; %delete diff_rows-1 values from begining
vals(i,:) = new_vals; %add to values
end
end
end
结束
- 列表项
if (diff_col~=0)
if (diff_col>0)
vals(i,:) = [zeros(1,diff_col) nums(1:(end-diff_col))];
else
vals(i,:) = [nums((-diff_col+1):end) zeros(1,-diff_col)];
end
end
看起来,当有很多波形时,由于某种原因它不起作用。你知道为什么会这样吗?我在上面附上了一个例子什么是所需的输出,它与您所附的图像有什么不同?它应该在峰值对齐,而图中所示的波形看起来非常失真。我无法仅基于图像再现问题,需要一个简单的可再现测试用例来继续(例如2x97或更小的输入矩阵不能正确对齐)。