스펙트로 그램으로 신호를 처리 한 후 FFT 프레임에서 로컬 최대 값을 추출하려고합니다.matlab을 사용하여 스펙트로 그램으로 처리 한 후 FFT 프레임에서 로컬 최대 값을 추출합니다.
전화 사용자가 약 팔 길이 스마트 폰을 잡고 자신의 모든 폐 볼륨에서 호흡하고, 강제 내쉬고 :
는 특히, 나는 wav
파일에있는 오디오 파일을 가지고 있고 다음 절차에 수집 있다고 말했다 전체 폐 부피가 제거 될 때까지 전화기의 마이크가 호기를 기록하고 데이터를 wav 파일에 저장합니다.
우선, I는 (프레임 간의 50 % 겹침)는 30ms 프레임으로 오디오 버퍼 :
는 그때는 다음 절차 스펙트로와 오디오를 처리한다. 그런 다음 각 프레임을 해밍 창을 사용하여 창에 표시하고|FFT|db
을 취하여 신호의 크기 스펙트로 그램을 생성합니다.
[X, FS] = audioread('Rec_002.wav');
info = audioinfo('Rec_002.wav');
window = (30*0.001/info.Duration)*info.TotalSamples;
[s,f,t,ps]=spectrogram(X, window, [], [], FS);
Rec_002.wav 내 오디오 파일입니다 : 내가 MATLAB을 사용하는 것을 어떻게 여기
이다. 스펙트로 그램으로 신호를 처리 한 후 슬라이딩 윈도우를 통해 계산 된 각 프레임의 로컬 최대 값을 사용하여 공명을 추출합니다. 그런 다음 전역 최대 값의 20 %보다 큰 로컬 최대 값이 저장됩니다. 다음은
은 스펙트로 그램은 위의 데이터를 사용할 때처럼 보이는 방법을 보여줍니다 Spectrogram image이 정상적으로은 지금까지
After extracting resonaces from spectrogram image
스펙트로
에서 추출 후 모습 공진을 보여줍니다, 나는 출력 중 하나를 사용 인수s
- 단시간 푸리에 변환으로 로컬 최대 값 추출. 내 목표를 달성하기 위해 전력 스펙트럼 밀도 (PSD) -
local_max=max(abs(s));
threshold=0.2*max(local_max,[],2);
local_max=local(:,local_max>threashold);
질문은 나는 그것이 s
을 사용하는 것이 맞습니다 또는 내가 ps
를 사용할지 여부를 확실하지 오전입니다 :
여기 내 코드입니다.
누구든지 내게 알려 줄 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.
그래서 'ps'를 사용하면 가장 높은 그래디언트를 추출합니다. 로컬 최대 값을 추출하려면 대신's'을 사용해야합니다. 그런데 스펙트로 그램 처리와 관련하여 로컬 최대 값을 추출하는 것은 특별한 의미가 있습니다.내가 종이에서 읽었 기 때문에 저자가 왜 지역 최대를 추출하려고하는지 이해하려고 노력하고 있습니다. – wqlin
또한, 제 질문을 업데이트 했으므로 자유 시간을 가졌습니까? 감사. – wqlin
단시간 FT 인 스펙트로 그램을 사용하는 이유는 입력 신호가 고정적이 아니므로 주파수 내용이 시간에 따라 변하는 것입니다. 따라서 공진 주파수, 즉 가장 큰 진폭을 가진 주파수를 각 시간 창에서 찾는 데 관심이있는 경우 로컬 최대 S가 필요합니다. –