2017-04-15 23 views
1

전에 DSP.SE에서이 질문을했습니다. 그러나 제 질문에는 관심이 없습니다. 어쩌면 신호 처리와 관련이 없을 수도 있습니다.오디오 신호에서 로컬 제로를 얻는 좋은 방법이 있습니까?

이산 오디오 신호를 세그먼트로 나누어 통계 처리 및 분석해야했습니다. 따라서 지역 평균이 고정 된 세그먼트가 내 사례에 매우 도움이됩니다. 세그먼트의 길이는 미리 정의되어 있습니다 (예 : 샘플.

나는 여러 가지를 시도했다. I는 세그먼트들로 오디오 신호를 분할 reshape() 함수를 사용하여, 다음과 같은 각 세그먼트를 통해 산출 할 각 seg(:,k)에서 x(k) 감산

L = 512;        % Length of segment 
N = floor(length(audio(:,1))/L);  % Number of segments 
seg = reshape(audio(1:N*L,1), L, N); % Reshape into LxN sized matrix 
x = mean(seg);       % Calculate mean of each column 

각 로컬 평균 제로 만들 것, 또 그 때 세그먼트의 오디오 신호를 많이 왜곡 것을 다시 합류했다.

그래서, 해닝 윈도우의 평균은 각각 seg(:,k)에서 2*x(k)*hann(L)을 substracting 거의 0.5 때문에 것은 내가 노력 제일 먼저이었다. 그러나 이번에는 (해닝 윈도우의 평균을 과 거의 동일하게 만들기 위해)은 각 세그먼트 자체에서 중간 점의 이웃을 왜곡합니다.

enter image description here

그리고, I는 작은 해닝 윈도우가 아닌 직접 곱하여 각 seg(:,k)에서 (아래 그림 참조) 이러한 을 감산 회선을 사용했다.

enter image description here

이 마지막 단계는 더 나은 결과를 제공, 아직 세그먼트가 작은 경우는 여전히 매우 유용하지 않습니다. 나는이 사이트에서 다양한 문제에 대해 많은 놀라운 접근법을 보았습니다. 그래서 영리한 방법이나 오디오 신호를 덜 왜곡시키는 제로 로컬 수단을 얻는 기존의 방법이 있는지 궁금합니다. 나는이 속성이 EMD과 같은 일부 분해에 유용하다는 것을 읽었습니다. 어쩌면 그런 분해가 필요한가요?

+0

아마도 당신은 지역의 평균, 과정을 빼기해야 다음 다시 함께 세그먼트를 결합하기 전에 다시 다시 로컬 평균을 추가합니다. 세그먼트를 다시 겹치거나 (예 : 50 %) 다시 가입 할 때 한 세그먼트에서 다른 세그먼트로 사라질 수도 있습니다. – mikado

+0

@mikado 지역 정보를 다시 추가하지 않겠습니다. 블라인드 처리를 위해이 작업이 필요합니다. 각 세그먼트의 지역 평균을 0으로 만드는 동안 오디오 파일의 왜곡을 줄이는 좋은 방법을 찾고 있습니다. 그래도 고마워. – kdrtkl

답변

1
당신은 이동 평균 필터를 사용하려고 할 수 있습니다

: 당신은 평균 필터의 간격을 변경하여 조정 필터를 할 수

x = cumsum(rand(15*512, 1)-0.5); % generate a random input signal 
mean_filter = 1/512 * ones(1, 512); % generate a mean filter 
mean = filtfilt(mean_filter, 1, x); % filtfilt is used instead of filter to obtain a symmetric moving average. 

% plot the result 
figure 
subplot(2,1,1) 
plot(x); 
hold on 
plot(mean); 
subplot(2,1,2) 
plot(x - mean); 

합니다. 작은 간격을 사용하면 각 간격 내부의 평균값이 낮아 지지만 신호에서도 낮은 주파수가 필터링됩니다.

enter image description here

+0

matlab에서 오디오 신호로 솔루션을 시도했지만 각 세그먼트의 로컬 평균을 0으로 만들지 않았습니다. 이 세그먼트의 지역 평균의 최대 값은 ** 0.035 **이었고 솔루션은 ** 0.021 **이어야합니다. 그러나 제로에 가까운 veeery가 필요합니다.나는'filtfilt()'필터에 대해 몰랐다. 그래서 대답 해 주셔서 감사합니다. 당신은 내 +1 :) – kdrtkl

+0

내가 튜닝 옵션을 추가, 나는 그것이 당신에게 적합한 지 모르겠다. 행운을 빕니다. – m7913d

+1

또한이 방법을 처음에는 사용하고 질문에 설명 된 방법을 사용해도됩니다. 이렇게하면 직접 메서드를 적용하는 것보다 덜 왜곡이 발생합니다. – m7913d