오디오 디지털 신호 처리 오디오 DSP(Digital Signal Processing)는 복잡하고 전문적인 주제입니다.이 기사에서는 오디오에서 특정 주파수 신호를 실시간으로 분석하고 식별하는 방법을 소개합니다.해당 코드는 브라우저에서 실행됩니다.html5 웹 버전(휴대용 ), 환경에서 특정 주파수의 소리, 소음, 악기의 음높이를 식별하는 데 사용할 수 있습니다.
온라인 테스트: FFT 주파수 영역 분석 ECharts 스펙트럼 곡선
900Hz 주파수에서의 모스부호 사운드 스펙트럼 곡선이 이 글의 주요 분석 대상입니다.글 말미를 참조하여 LOVE에 해당하는 코드 오디오 파일을 생성한 후 파일을 위의 온라인 테스트 페이지로 드래그하여 이를 얻으십시오. 그림:
기타 6 오픈 스트링 오디오 스펙트럼 곡선:
1. 웹 페이지의 오디오 데이터 소스
H5 웹 페이지에서 오디오 데이터를 얻는 방법에는 최소한 세 가지가 있습니다.
xhr
네트워크 요청( ,fetch
) 을 통해 오디오 파일의 바이너리 콘텐츠 다운로드input[type=file]
파일을 선택하여 사용 중인FileReader
파일을 읽어서 바이너리 콘텐츠 획득- 브라우저의 인터페이스를 통해
getUserMedia
장치의 마이크에 액세스 하고 오디오 바이너리 콘텐츠를 녹음합니다.
PCM
다른 오디오 형식은 압축 인코딩 방법이 다릅니다.파일의 오디오 데이터를 얻으려면 다음 처리 단계 로 진행하기 전에 오디오 샘플링 데이터( )를 얻기 위해 오디오 파일을 디코딩해야 합니다. 파일 형식은 다음과 같습니다 .wav
. 디코딩이 간단하고 일반적으로 wav 헤더 + pcm 데이터 조합으로 구성되며 wav 헤더를 직접 제거하여 디코딩을 완료합니다. 다른 파일은 직접 32비트 pcm으로 디코딩한 다음 AudioContext
다른 방법으로 16비트 pcm으로 변환할 수 있습니다.decodeAudioData
최신 브라우저 WebRTC
의 기능 지원 덕분에 웹 페이지는 풍부한 오디오 및 비디오 상호 작용을 달성할 수 있으며 웹 페이지 녹음, 환경에서 실시간 사운드 수집을 실현하여 pcm 데이터를 얻을 수 있습니다. GitHub Recorder 는 기능이 풍부한 오픈 소스입니다. 편리하게 기록 데이터를 실시간으로 처리할 수 있는 H5 웹 페이지 기록용 라이브러리.
2. FFT: 시간 영역에서 주파수 영역으로
오디오 샘플링 데이터( )를 얻은 PCM
후 값의 크기에 따라 데이터를 직접 그려 오디오의 시간 영역 파형인 사운드 파형을 얻을 수 있습니다. 가로축은 시간이고 세로축은 샘플링입니다. 예를 들어 크기는 Audition
아래 그림에 표시되어 있습니다(이 오디오 파일 생성에 대해서는 이 문서의 끝 부분 참조).
시간 영역 파형에서 특정 시점의 소리가 있는지, 소리의 크기는 직관적으로 알 수 있지만 그 소리가 우리에게 필요한 신호인지 다른 잡음인지는 알 수 없습니다. 디지털 신호 분석의 핵심은 FFT, 고속 푸리에 변환입니다.
단일 시간 영역 파형은 FFT를 통해 서로 다른 주파수의 N개 파형으로 분해될 수 있으며 시간 영역 신호는 주파수 영역 신호로 변환됩니다.N은 fftSize의 크기에 따라 달라집니다.예를 들어 주파수 성분을 얻을 수 있습니다. ;에서 주파수를 매우 fftSize=1024
직관적으로 느낄 수 있습니다 . 도메인 신호의 강도 분포는 아래 그림과 같이 900Hz 신호가 매우 밝습니다(이 오디오 파일을 생성하는 방법은 이 문서의 끝 부분 참조).512
Audition
H5 js 버전의 FFT 구현을 위한 많은 오픈 소스 코드가 있거나 브라우저 AudioContext
에서 제공하는 인터페이스를 직접 사용하여 주파수 도메인 데이터 변환을 수행할 수 있습니다 createAnalyser
. Recorder 라이브러리는 사용할 수 있는 두 가지 FFT 구현을 제공합니다 extensions/lib.fft.js
. dsp.lib.fft_exact.js
위의 온라인으로 이 두 파일은 테스트에서 볼 수 있습니다.
js 버전의 FFT 변환 작업도 비교적 간단합니다. Audition
이 기사에서 사용하는 오디오 파일, 웹 페이지에서 변환 후 얻은 주파수 도메인 데이터를 중첩하고 함께 그려서 처음에 첫 번째 모스 부호 사운드 스펙트럼 곡선을 얻습니다. 기사 , 신호는 매우 분명합니다.
3. 신호의 특성 분석
글 서두의 "900Hz 주파수 모스부호 사운드 스펙트럼 그래프"를 예로 들면 스펙트럼 분석을 통해 신호가 가장 강한 주파수 피크를 직관적으로 볼 수 있고, 에너지가 매우 집중되어 있으며, 주파수 값이 주변에 흩어져 있음을 알 수 있습니다. 900Hz, 즉 이 오디오에서 신호의 주요 주파수는 약 900Hz이며, 이는 실제로 이 모스 부호를 생성하는 데 사용되는 900Hz 주파수와 일치합니다.
분석은 주 주파수를 얻었습니다.이 주 주파수의 파형 곡선에만 주목하면 모스 부호 법칙과 일치하는 특성을 직관적으로 볼 수 있습니다. 짧은 지속 시간은 드롭 (.)이고 긴 지속 시간은 는 클릭(-)이다. , 클릭의 길이는 틱의 3배, 틱 사이의 간격은 1틱의 길이, 문자 사이의 간격은 3틱의 길이(간격의 길이) 단어 사이는 7틱 이상입니다.)
넷째, 신호 식별 및 추출
신호의 특성을 분석한 후 코드를 작성하여 신호를 식별하고 추출하는 방법이 있는데, 여전히 위의 그림을 예로 들어 그 안에 포함된 모스 부호를 추출해 보자.
(1) 다른 저에너지 값을 필터링하고 에너지 집중에서 몇 개의 주파수만 유지합니다.
(2) 프로그램 코드에서 이러한 주파수를 종합적으로 분석하여 판단하고 이전 주파수와 크게 다르지 않은 주파수를 각 피크에 대한 유효 피크로 간주하고(이는 클러터 간섭을 효과적으로 제거할 수 있음) 곡선은 얻은
(3) 곡선의 값의 크기에 따라 작은 값은 모두 0으로 간주하고 높은 값은 보류하고 마지막으로 피크가 있는 간헐적인 직사각형파로 변환하면 모스부호인 di(.) da(-)를 인식한다.
Q: 신호를 직접 판단하기 위해 PCM 볼륨을 사용하지 않는 이유는 무엇입니까?
A: 최종 구형파는 기록된 샘플에 상대적으로 큰 배경 잡음 간섭이 없기 때문에 시간 영역의 파형 포락선과 크게 다르지 않습니다. 잡음 간섭이 없는 경우 PCM 샘플링 값(또는 It 신호를 추출하는 것도 가능하지만 상대적으로 큰 간섭(끝의 노이즈)의 경우 시간 영역에서 올바른 신호인지 여부를 구분하기 어렵고 주파수 영역에서 분리된 파형이 더 좋습니다. 원래 신호를 반영합니다.
소리의 주파수를 기준으로 어떤 신호인지 판단하려면 주파수 영역으로 돌려서 식별하고 처리해야 하는데, 예를 들어 악기의 음높이는 시간 영역에서 전혀 식별할 수 없습니다.
부록
- 녹음기는 html5 녹음에 사용됩니다: https://github.com/xiangyuecn/Recorder , 오디오 데이터를 얻기 위해 웹 페이지에서 실시간 녹음.
- 흥미로운 모스 부호: 작은 프로그램, WeChat 버전 및 Byte Douyin 버전,
LOVE
텍스트를 모스 부호로 변환하고 재생, 위에서 사용된 모스 부호 오디오 녹음, 코드 번역 기능 내장, 실시간 오디오 녹음 및 분석 가능 코드, 이 기사에 요약된 내용은 오디오를 코드로 인식하는 데 사용되는 원리입니다.
【위에】