오디오 신호 재구성부터 Spectrogram


19

50 % 겹치는 해밍 창을 사용하여 크기 스펙트로 그램을 추출한 노래 세트가 있습니다. 스펙트로 그램을 추출한 후 PCA (Principal Components Analysis)를 사용하여 차원 축소를 수행했습니다. 더 낮은 차원으로 줄인 후, 나는 더 작은 차원에서 스펙트로 그램을 재구성했습니다. 따라서 이제 원래 스펙트로 그램과 재구성 된 스펙트로 그램간에 약간의 오류가 있습니다. 이 스펙트로 그램을 다시 오디오 신호로 변환하고 재생하여 더 낮은 차원에서 재구성 할 때 오디오 사운드가 어떻게 작동하는지 알 수 있습니다.

Matlab에 사용 가능한 기능이 있습니까? 크기 스펙트로 그램을 오디오 신호로 변환하는 방법 ??


2
당신은 정말로 STFT와 역 STFT를 원합니다. "스펙트로 그램"은 STFT 크기의 히트 맵의 이름 일 뿐이며 크기만으로는 신호를 재구성하기에 충분하지 않습니다. mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/…를 보십시오. ?
endolith

4
@endolith의 의견을 확장하기 위해 STFT에서 스펙터 그램으로 갈 때 누락되는 것은 신호의 주파수 도메인 표현의 핵심 구성 요소 인 위상 정보입니다.
Bjorn Roche

원래 오디오 신호를 재구성하려면 진폭과 STFT 위상이 모두 필요합니다. 그러나 실제로 오디오 기능을 구축하려면 | S | 복소수의 진폭이 사용되며 위상 정보는 폐기됩니다. M으로 계산 된 멜 스펙트로 그램에서 PCA를 수행했으며 , 멜 필터 뱅크 곱셈 행렬입니다. 그래서 주어진 오디오 신호를 어떻게 재구성 합니까? PCA 이후 X에 대한 근사치? XX=log(M|S|)X^
user76170

@endolith : mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/에 제공 한 링크를 사용해 보았습니다 ... 위상 및 진폭 정보를 모두 사용했습니다 ( 위의 함수에 대한 입력으로 복잡한 ). 이것을 사용하여 신호를 재생하려고 시도했으며 고르지 않게 들렸습니다. 왜 이런 일이 발생합니까? 그런 다음 원래 신호와 위의 역 STFT 절차에서 얻은 신호 사이의 표준을 계산했으며 3.46 * 10 ^ 3의 큰 값을 보여주었습니다. 왜 이런 일이 일어 납니까? S
user76170

@ user76170 : 고르지 못한 이유는 STFT가 신호를 프레임으로 잘라 내고 때로는 겹치므로, 구성한 것과 같은 방식으로 신호를 해체해야하거나 각 프레임마다 불연속성이 있기 때문입니다. 해당 링크에서 STFT 및 ISTFT 기능을 사용 했습니까? 당신은 문제가 무엇인지 볼 수 있도록 고르지 신호의 파형에.
endolith

답변:


15

스펙트로 그램이 겹치는 윈도우 로부터 단시간 푸리에 변환의 크기로 계산 된 경우, 스펙트로 그램은 암시 적으로 일부 위상 정보를 포함합니다.

다음 반복 작업이 수행됩니다.

xn+1=istft(Sexp(iangle(stft(xn))))

stft 도난S 는 스펙트로 그램이고, 는 순방향 푸리에 변환이고, 는 반 짧은 시간 푸리에 변환입니다.stftisft


@edouard에서 직접 의견을 말하고 싶지만 평판이 충분하지 않습니다. 누구든지 그의 대답에서 무엇인지 알고 있습니까? 또한 x 0을 어떻게 초기화 합니까? 그냥 무작위? 가요 X N 반복에서 완전한 재구성 신호 N 또는 단지 N 번째 의 계수 X ? 감사. ix0엑스엑스
PR

1
@PR 단위 허수, . 1
Peter K.

3

나는 올바른 일을하고있는 @edouard의 대답을 이해하기가 약간 힘들었습니다. /signals//a/3410/9031 과 비교하여 재구성을 구현하는 데 사용했습니다.

참고 허수이고, X n은 상기 재구성 된 신호이고, N 반복. 오디오 신호 길이의 랜덤 벡터 인 x 0 으로 시작하십시오 . 나를 위해 몇 번의 반복으로 충분하게 들리는 결과를 얻었습니다. 그럼에도 불구하고 원래 신호에 대한 절대 오차는 상당히 높았습니다. 또한, 재구성 된 신호로부터 생성 된 생성 된 스펙트로 그램은 비록 일반적으로 동일한 구조를 나타내지 만, 상당히 다른 크기를 가졌다.나는엑스엑스0


2

재구성 된 스펙트로 그램 대 원본 스펙트로 그램을 사용하여 크기 응답이 한 스펙트로 그램을 다른 스펙트로 그램으로 변환하는 필터를 설계 할 수 있습니다. 그런 다음이 필터를 원래 시간 도메인 데이터 또는 중첩 추가 / 저장 빠른 회선 필터링을 위해 원래 FFT에 적용 할 수 있습니다.


@ hotpaw2 : 귀하의 답변을 이해하지 못했습니다. 왜 하나의 스펙트로 그램을 다른 스펙트로 그램으로 변환하고 싶습니까? 스펙트로 그램 매트릭스가 주어진 오디오 신호를 재구성하고 싶습니다 . 한 스펙트로 그램에서 다른 스펙트로 그램으로 변환하는 필터와 오버랩 추가 / 저장 빠른 컨볼 루션 필터링의 요구 사항은 무엇입니까? 에서 오디오를 재구성하고 싶습니다 | S | PCA가 얼마나 효과적인지 알 수 있습니다. 그래서 두 개의 클립, 한 원래의 오디오 신호, 낮은 차원에서 재구성 다른 일을 할 수있다라고 | S | |에스||에스||에스^|
user76170

2
스펙트로 그램 매트릭스는 손실이 있으므로 재구성에 사용할 수 없습니다. 그러나 원하는 스펙트로 그램을 생성하기 위해 변환을 리버스 엔지니어링 할 수있는 경우 원래의 비 손실 손실 시간 도메인 데이터 또는 원래의 복잡한 결과 FFT에 적용 할 수 있습니다.
hotpaw2

에스|에스||에스|

1
@ user76170 길고 짧은 것은 신호를 재구성하기 전에 복잡한 STFT가 필요하다는 것입니다. STFT 크기 만 있다면 충분하지 않습니다. 이 규칙에는 예외가 있지만 일반적으로 규모뿐만 아니라 복잡한 STFT가 필요합니다.
Tarin Ziyaee

|에스||에스^|

-1

계산 복잡성이 걱정되지 않으면 Griffin-Lim 알고리즘을 사용하여 스펙트로 그램에서 오디오 신호를 반전하십시오.


답변을 조금 확장 해 주시겠습니까? 아마도 알고리즘에 대한 대표적인 논문이나 링크를 추가하고 그것이 어떻게이 질문과 관련이 있는지에 대한 간단한 설명을 추가 할 것입니다 (?)
A_A

질문을 올바르게 이해하면 간단히 원래 위상 정보를 사용하지 않고 스펙트로 그램에서 오디오 신호를 재구성하려고합니다. 그리핀-림 알고리즘은 입력으로서 스펙트로 그램 매트릭스를 요구하며 반복적으로 위상을 재구성합니다. 당신은 종이를 참조 할 수 있습니다 ieeexplore.ieee.org/document/1164317
Jitendra Dhiman

알려 주셔서 감사합니다. 이 점을 명확히하기 위해. 이 응답이 내 검토 대기열에 "낮은 품질"로 표시되었습니다. "검토"와 관련하여 내가 가지고있는 옵션에는 "개선"에 대한 의견 제공이 포함됩니다. 이 답변이 DSP.SE에서 일반적으로 발생하는 답변과 일치하기 위해서는 Griffin Lim 알고리즘에 조금 들어가서 OP가 요구하는 것과 어떻게 관련이 있는지 보여야합니다. 향후 수정 사항은 답변에 직접 적용 할 수 있습니다. 이것의 요점은 특히 "나"를 만족시키기위한 것이 아니라, 질문에 대한 의미있는 답변을 제시하는 것입니다
A_A

원래 FFT 정보가없는 경우 최상의 답변은 여기 (Griffin-Lim 사용)입니다. timsainb.github.io/…
Artemi Krymski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.