웹 페이지 js 버전 오디오 디지털 신호 처리: H5 녹음 + 특정 주파수 신호의 특징 분석 및 인식 추출

오디오 디지털 신호 처리 오디오 DSP(Digital Signal Processing)는 복잡하고 전문적인 주제입니다.이 기사에서는 오디오에서 특정 주파수 신호를 실시간으로 분석하고 식별하는 방법을 소개합니다.해당 코드는 브라우저에서 실행됩니다.html5 웹 버전(휴대용 ), 환경에서 특정 주파수의 소리, 소음, 악기의 음높이를 식별하는 데 사용할 수 있습니다.

온라인 테스트: FFT 주파수 영역 분석 ECharts 스펙트럼 곡선

900Hz 주파수에서의 모스부호 사운드 스펙트럼 곡선이 이 글의 주요 분석 대상입니다.글 말미를 참조하여 LOVE에 해당하는 코드 오디오 파일을 생성한 후 파일을 위의 온라인 테스트 페이지로 드래그하여 이를 얻으십시오. 그림:

기타 6 오픈 스트링 오디오 스펙트럼 곡선:

1. 웹 페이지의 오디오 데이터 소스

H5 웹 페이지에서 오디오 데이터를 얻는 방법에는 최소한 세 가지가 있습니다.

  1. xhr네트워크 요청( , fetch) 을 통해 오디오 파일의 바이너리 콘텐츠 다운로드
  2. input[type=file]파일을 선택하여 사용 중인 FileReader파일을 읽어서 바이너리 콘텐츠 획득
  3. 브라우저의 인터페이스를 통해 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 신호가 매우 밝습니다(이 오디오 파일을 생성하는 방법은 이 문서의 끝 부분 참조).512Audition

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텍스트를 모스 부호로 변환하고 재생, 위에서 사용된 모스 부호 오디오 녹음, 코드 번역 기능 내장, 실시간 오디오 녹음 및 분석 가능 코드, 이 기사에 요약된 내용은 오디오를 코드로 인식하는 데 사용되는 원리입니다.

【위에】

추천

출처blog.csdn.net/xiangyuecn/article/details/129241701