5

次の場合にコピーしたいシグナルがあります。

1) ゼロクロスで開始し、正になります

2) セット数のポイント (8000 など) をコピーする

3) 8000 ポイントがコピーされた後、ゼロ クロッシング ダウン セクションが見つかるまでポイントを追加し続けます。

ゼロ クロッシングを見つけることはできますが、ゼロ クロッシングが正になるタイミングやゼロ クロッシングが負になるタイミングを判断する方法を知るのに問題があります。また、最後の 8000 ポイントの後にポイントの次のセクションを追加することにも問題があります (質問#1と太字の質問#3 に問題があります)。

注:私が使用している信号はオーディオ信号であるため、単純な方程式ほど良くないことに注意してください.

テストコードと画像を添付しました。私はmatlab/オクターブを使用しています

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')

ここに画像の説明を入力

4

4 に答える 4

15

これを試して:

x = diff(sign(y));
indx_up = find(x>0);
indx_down = find(x<0);

これにより、交差点とその方向がわかります。サンプルを追加するループでは、現在のポイントと最後のポイントについて x をテストするだけです。ゼロなら続けます。陽性の場合は、8000 ポイントを追加してテストに戻ります。マイナスならやめます。

編集: 最初のコード行のタイプミスを修正しました。

于 2013-05-03T20:41:09.117 に答える
1

他の誰かが同様の質問をした場合のテストコードは次のとおりです

%zero crossing testing  (find zero upward, copy fs 4000, find next zero upward.
clear all, clc, tic, clf;
n=16000
t=linspace(0,2*pi,n);
y=cos (6*t)+sin(4*t);

find_zero = diff(sign(y));
indx_up = find(find_zero>0); %find all upward going zeros
indx_down = find(find_zero<0); %find all downward going zeros
new_y=[];

fs_range_wanted=indx_up(1,1)+4000; %starts from first zero adds sample size wanted
new_y=[y(indx_up(1,1):fs_range_wanted)]; %may have to minus 1
ii=0;
while (find_zero(1,fs_range_wanted+ii)  ~= 2);  %do while not going dwn and append 
    ii=ii+1
    y_pt_loc=fs_range_wanted+ii %what is the location of the point
    new_y = [new_y, y(1,fs_range_wanted+ii)]; %append points
end


subplot(3,1,1);plot(y);title('Original Signal')
subplot(3,1,2);plot(new_y);title('New signal')
subplot(3,1,3);plot(find_zero);title('Zeros-Pos-Neg')

ここに画像の説明を入力

于 2013-05-04T11:43:25.413 に答える
0
function[t,s]=zerocorss(x,m)
    if nargin<2
      m='b';
    end

    s=x>0;

    k=s(2:end)-s(1:end-1)

  if any(m=='p')
      f=find(k>0);
  elseif (m=='n')
      f=find(k<0);
  else
      f=find(k~=0);
  end

  s=x(f+1)-x(f);
  f=f-x(f)./s;

  if ~nargout
      n=length(x);
      subplot(2,1,1),plot(1:n,x,'x',t,zerocorss(length(x)/1),'o');
      subplot(2,1,2),stem(t,s);
  end
end
于 2016-08-13T12:47:25.187 に答える