2013-11-27 4 views
0

surf 함수로 플롯하기 위해 스펙트럼 상관 함수를 구현하려고합니다. 필자가 읽은 논문에서 설명한대로 SCF의 아이디어를 이해한다고 생각하지만 Matlab에서 제 기능을 구현하는 데 문제가 있습니다. 나는이 지침에 따라 봤는데 :Matlab에서 신호의 FFT 이동

Pseudo-code

을 나는 대부분 제대로 데이터의 나의 조각을 이동하는 데 문제가 있습니다. 3 단계를 달성하는 쉬운 방법이 있습니까?

여기 내 코드에서 시도 내용은 다음과 같습니다

function [output] = spectral(x, N) 
    % This function does cyclostationary spectral analysis 
    % on a data set and returns some features 

    t = length(x); 
    samplesPerFrame = floor(t/N); 

    count = 1; 

    for alpha = -1:0.01:1 



     % Split up the samples into frames 
     % Have to leave some samples out if unevenly split 
     for i = 1:N+1 
      frange = ((i - 1) * samplesPerFrame + 1):(i * samplesPerFrame); 
      if i == N+1 
       break; 
      end 
      xFrame(i, :) = x(frange); 
      ts = [1:length(xFrame(i,:))]; 
      shiftLeft = fft(xFrame(i, :) .* exp(-1 * 2 * pi * 1i * (alpha/2) .* ts)); 
      shiftRight = fft(xFrame(i, :).* exp(2 * pi * 1i * (alpha/2) .* ts)); 

      S(i,:) = (1/samplesPerFrame) .* shiftLeft .* conj(shiftRight); 

     end 

     Savg(count, :) = mean(S, 1); 
     Ssmooth(count, :) = smooth(Savg(count,:), 'moving'); 
     count = count + 1; 
    end 
    output = Ssmooth; 
end 
+1

어떤 문제가 있었습니까? 지금까지 뭐 해봤 어? 우리에게 세부 사항을주지 않으면 당신을 도울 방법을 알 수 없습니다. – MrAzzaman

+0

좀 더 자세한 내용을 추가했습니다. 내 잘못이야. – Paul

답변

1

그것은 실제로 좋아 보인다.

circshift(fft(xFrame(i, :)),[1,a])shiftRight으로, circshift(fft(xFrame(i, :)),[1,-a])shiftLeft으로 설정해보십시오. 여기에서 유의하십시오 a은 정수이고, 이동하려는 xFrame(i, :)의 요소를 나타내며, Fs이 샘플링 속도 인 주파수 도메인에서 Fs*a에 해당합니다.

+0

xFrame (i, :)의 fft를 원 클릭 이동으로 이동한다는 의미입니까? – Paul

+0

예 업데이트 됨, thx – lennon310

0

시도하는 스펙트럼 상관 추정 방법은 스펙트럼 상관 추정 또는 TSM의 시간 평활화 방법이라고합니다. 알파 = 0과 같은 사소한 경우를 제외하고 게시 한 코드는 정답을 제공 할 수 없습니다. 그 이유는 각 프레임에 대한 주기적주기를 복잡한 위상 요소로 조정해야 각 데이터 블록이 그 이전 버전의 지연된 버전.

가 광고를 교체 할 경우

S (I,^= (1/samplesPerFrame) * * shiftLeft 접속사 (shiftRight)..; . 두 라인

S (I,^= (1/samplesPerFrame)와

shiftLeft * * 접속사 (shiftRight).;

S (i, :) = exp (-1i * 2 * pi * alpha * i * samplesPerFrame);

당신은 SCF를 추정 할 수 있습니다. 원래 코드와 수정 된 코드를 1/10의 비트 전송률 (BPSK) 신호에 적용하여이를 확인했습니다. 이 경우 알파 이상의 루프에있는 알파 값 중 하나가 실제 사이클 빈도 1/10과 정확히 일치합니다. 수정 된 코드 만 비트 속도주기 주파수에 대해 올바른 SCF를 제공합니다.

자세한 내용과 예는 내 블로그 cyclostationary.wordpress.com을 참조하십시오. 특히, TSM에 대한 게시물은 http://cyclostationary.blog/2015/12/18/csp-estimators-the-time-smoothing-method입니다. (이 링크를 5/2/17에 수정했습니다.)