2011-10-12 1 views
1

나는 데이터 집합 Sig Matlab에서 크기가 65536 x 192 있습니다.Matlab dwt 지정된 치수를 통해

%pre-allocate ect.. 
for i=1:65536 
    F(i,:) = fft(Sig(i,:)); 
end 

아니면 치수를 지정하고 for 루프없이 할 수있는 : 나는 두 번째 차원을 따라 한 차원 FFT을 원하는 경우에, 나는 루프를 할 수있는 하나

F = fft(Sig,[],2); 

내 데이터 세트의 경우 약 20 배 빠릅니다.

이산 웨이블릿 변환 (dwt)과 비슷한 것을 찾았지만 찾을 수 없습니다. 그래서 누군가가 할 수있는 방법을 알고 있는지 궁금 해서요 dwt Matlab의 지정된 차원에 걸쳐? 또는 for 루프를 사용해야합니까?

+0

첫 번째 시도는 그냥 조 변경하는 것이었지만 'dwt'는 항상 2D 입력에 대한 1D 결과를 반환합니다. –

답변

0

나는 당신이 웨이블릿 도구 상자에서 함수를 사용하는 가정 : http://www.mathworks.co.uk/help/toolbox/wavelet/ref/dwt.html

문서 배열에 작용 설명하지 않는 것, 그래서 아마 지원 아니에요. 배열을 입력 할 수있는 경우 첫 번째가 아닌 단일 차원에서 작동하거나 모양을 무시하고 벡터로 처리합니다.

+0

이것이 올바른 대답 인 것 같아서 받아 들일 것이지만 너무 유용하지는 않습니다. 그래서 도움이되지 않습니다. upvote : p (단지 0 표의 투표 결과가 2 개 이상 나오면 골드 배지를받습니다!)) – Ghaul

+0

:) 죄송합니다. 나는 더 나은 것을 말하고 싶다. 저는 Wavelet Toolbox가 1D 데이터에서는'dwt'를, 2D 데이터에서는'dwt2' 만 사용할 것으로 예상합니다. R2010b에서'gpuArray' 버전의'fft'와 똑같은 문제가있었습니다 만, 다시 시도 할 기회가 없었습니다. – Nzbuu

2

루프 FFT 예제에서 선을 조작 한 것 같습니다. Matlab은 Column-major order을 사용합니다. 성능의 차이를 설명 할 수 있습니다. 열에서 작업하는 경우 성능이 동일합니까? 올바른 설명 인 경우 dwt을 사용할 수 있습니다.

+0

열에서 작동하면 속도가 6 배 향상되었지만 * for * 루프는 여전히 직접 코드보다 훨씬 느립니다. 따라서 지정된 차원에 걸쳐 * dwt *가 여전히 바람직합니다. MATLAB의 열 - 주요 순서에 대한 팁 주셔서 감사합니다, 몰랐어! – Ghaul

+0

열에 저장되도록 결과를 변경 했습니까? –

+2

MATLAB 메모리 액세스에 대한 자세한 내용은 http://www.mathworks.co.uk/company/newsletters/news_notes/june07/patterns.html을 참조하십시오. – Nzbuu

1

성능이 정말로 필요한 경우 해결책은 원하는 방식으로 C 이산 웨이브 렛 변환 라이브러리를 호출하는 자체 MEX를 수행하는 것입니다.

+0

그래, 그렇게 생각해. 내가 할 시간이 있다면, 파일 교환에 코드를 넣을 것이다. – Ghaul

+0

그게 좋을거야! 당신은 아마 이것을 필요로하는 유일한 사람이 아닙니다. –