我有一个信号,希望在以下情况下进行复制:
1) 从零点开始向上变化
2) 复制一定数量的点(例如8000个)
3) 复制完8000个点后,继续追加点,直到找到一个向下的零交叉部分。
我可以找到零交叉点,但是我无法确定何时有向上或向下的零交叉。此外,我还遇到了在8000个点之后添加下一个点集的问题(所以问题# 1和问题#3粗体字中我遇到了问题)。
请注意:请记住,我使用的信号是音频信号,因此它不会像简单的方程那样好。
我附上了测试代码和图片。我正在使用Matlab / Octave。
1) 从零点开始向上变化
2) 复制一定数量的点(例如8000个)
3) 复制完8000个点后,继续追加点,直到找到一个向下的零交叉部分。
我可以找到零交叉点,但是我无法确定何时有向上或向下的零交叉。此外,我还遇到了在8000个点之后添加下一个点集的问题(所以问题# 1和问题#3粗体字中我遇到了问题)。
请注意:请记住,我使用的信号是音频信号,因此它不会像简单的方程那样好。
我附上了测试代码和图片。我正在使用Matlab / Octave。
clear all, clc, tic, clf;
n=16000
t=linspace(0,2*pi,n);
y=cos(6*t)+sin(4*t);
%find zero crossings
t1=y(1:n-1);
t2=y(2:n);
tt=t1.*t2;
indx=find(tt<0)
%1) start at first zero crossing going positive
%2) get 8000 pts
%3) and after the 8000 points continue appending points until a zero crossing going down section is found
new_y=y(indx(1,1):8000); %start at zero section found get 8000 pts
subplot(2,1,1);plot(y);title('Original Signal')
subplot(2,1,2);plot(new_y);title('New signal')
n
,那么您可以这样做:x = sign(t(n-1)) - sign(t(n)); if x>0; add 8000 pts; elseif x==0; append a point; elseif x<0; stop adding points;end
。 - craigimdiff(sign([-2 0 2]))
将建议存在两个零交叉点而不是一个。消除这些交叉点的一种方法是对原始向量进行逐个元素的“与”操作 -diff(sign(t)) & t(2:end)
或保留交叉点的方向,(diff(sign(t)) & t(2:end)) .* sign(t(2:end))
。 - Graeme