문제

CD에서 44kHz 오디오 스트림이 있으며 16 비트 PCM 샘플 배열로 표시됩니다. 11kHz 스트림으로 자르고 싶습니다. 어떻게해야하나요? 몇 년 전 엔지니어링 수업 시절부터 스트림이 더 이상 5500Hz 이상의 것을 정확하게 설명 할 수 없다는 것을 알고 있으므로 그 위의 모든 것을 잘라 내고 싶다고 생각합니다. 어떤 아이디어? 감사.

업데이트 : 일부 코드가 있습니다 이 페이지 간단한 알고리즘과 {1, 4, 12, 12, 4, 1}처럼 보이는 계수 배열을 사용하여 48kHz에서 8kHz로 변환됩니다. 나는 그것이 내가 필요한 것이라고 생각하지만 6x가 아닌 4 배의 경우 필요합니다. 이러한 상수가 어떻게 계산되는지 아십니까? 또한 16 바이트 샘플을 어쨌든 플로트로 변환하게되므로 품질이 전혀 도움이된다면 반바지가 아닌 플로트로 다운 샘플링을 할 수 있습니다.

도움이 되었습니까?

해결책

FIR 및 IIR 필터를 읽으십시오. 이들은 계수 배열을 사용하는 필터입니다.

"FIR 또는 IIR 필터 디자이너"에서 Google 검색을 수행하면 어려운 작업 (계수를 얻음)을 수행하는 많은 소프트웨어 및 온라인 applet을 찾을 수 있습니다.

편집하다:

이 페이지는 여기에 ( http://www-users.cs.york.ac.uk/~fisher/mkfilter/ ) 필터의 매개 변수를 입력하고 C- 코드를 사용할 준비가되어 있습니다 ...

다른 팁

당신은 신호에 저지대 필터링을 적용해야한다는 것이 옳습니다. 5500 Hz 이상의 신호는 다운 샘플링 된 신호에 있지만 다른 주파수로 '별칭'이 있으므로 다운 샘플링 전에 제거해야합니다.

플로트로 필터링을하는 것이 좋습니다. 고정 포인트 필터 알고리즘도 있지만 일반적으로 품질이 좋은 트레이드 오프가 있습니다. 플로트가 있다면 사용하십시오!

필터링을 위해 DFT를 사용하는 것은 일반적으로 과잉이며 DFT는 연속적인 프로세스가 아니라 버퍼에서 작동하기 때문에 더 복잡해집니다.

디지털 필터는 일반적으로 두 가지 맛으로 제공됩니다. 전나무와 IIR. '일반적으로 동일한 아이디어이지만 IIF 필터는 피드백 루프를 사용하여 훨씬 적은 계수로 더 가파른 응답을 달성합니다. 매우 가파른 필터 경사가 필요하기 때문에 다운 샘플링에 좋은 아이디어 일 수 있습니다.

다운 샘플링은 일종의 특별한 경우입니다. 4 개의 샘플 중 3 개를 버리기 때문에 계산할 필요가 없습니다. 이 필터라는 특수 클래스의 필터가 있습니다.

자세한 내용은 다상 IIR 또는 다상 FIR에 대한 인터넷 검색을 시도하십시오.

간단한 직관적 인 접근법이라는 통지 (다른 의견과 더불어) "4 개의 연속 샘플의 각 그룹을 평균 값으로 바꾸어 4 배로 다운 샘플링",, 최적은 아니지만 그럼에도 불구하고 사실이거나 개념적으로는 그렇지 않습니다. 평균화량은 저 패스 필터 (주파수의 Sinc에 해당하는 직사각형 창)에 정확하게 금액이 있기 때문입니다. 각 4 개의 샘플 중 하나를 복용하십시오 : 그것은 분명히 별명을 소개 할 것입니다.

그건 그렇고 : 일부 리샘플링 (오디오, 이미지 또는 무엇이든; 오디오 케이스의 예 : SOX)를 수행하는 모든 소프트웨어는이를 고려하고 자주 기본 저역 통과 필터를 선택할 수 있습니다.

"앨리어싱"을 피하기 위해 신호를 다운 샘플링하기 전에 로우 패스 필터를 적용해야합니다. 로우 패스 필터의 컷오프 주파수는 샘플 주파수의 절반 인 Nyquist 주파수보다 작아야합니다.

"Decimation"이라고 불리는 과정. 두 단계가 있습니다.

  1. 데이터에 저 패스 필터를 적용합니다 (귀하의 경우 PI / 4에서 끊어진 LPF).
  2. 다운 샘플링 (4 개의 샘플 중 1 개를 가져 오는 경우).

로우 패스 필터를 설계하고 적용하는 방법에는 여러 가지가 있습니다.

여기에서 시작할 수 있습니다.

http://en.wikipedia.org/wiki/filter_design

당신은 사용할 수 있습니다 libsamplerate 무거운 리프팅을합니다. Libsamplerate는 C API이며 필터 계수 계산을 관리합니다. 속도를 위해 품질을 거래 할 수 있도록 다양한 품질 필터에서 선택할 수 있습니다.

코드를 작성하지 않으려면 만 사용할 수 있습니다. 대담 샘플 속도 변환을 수행합니다. 강력한 GUI를 제공하며 샘플 속도 변환을 위해 libsamplerate를 사용합니다.

DFT를 적용하고 결과의 3/4를 자르고 역 DFT를 적용하려고합니다. 실제로 힘들어지지 않고 좋은 소리가 될지 알 수 없습니다.

가능한 "최상의"솔루션은 실제로 DFT이며, 주파수의 상단 3/4를 버리고 역 DFT를 수행하고 도메인은 하단 1/4로 제한됩니다. 상위 3/4를 버리는 것은이 경우 저역 통과 필터입니다. 2 개의 샘플의 전력에 패딩하면 속도 이점을 얻을 수 있습니다. FFT 패키지가 샘플을 저장하는 방법을 알고 있어야합니다. 복잡한 FFT (분석하기가 훨씬 쉽고 일반적으로 더 좋은 특성이있는 경우) 인 경우 주파수는 -22에서 22로 또는 0-44로 이동합니다. 첫 번째 경우에는 1/4 중간을 원합니다. 후자에서 가장 바깥 쪽 1/4.

샘플 값을 함께 평균하여 적절한 작업을 수행 할 수 있습니다. 순진한 방법은 샘플 4 x 4를 잡고 동일한 가중 평균 작업을 수행하지만 그리 좋지는 않습니다. 대신 "커널"기능을 사용하여 직관적이지 않은 방식으로 평균적으로 함께 사용하고 싶을 것입니다.

수학적으로, 저주파 대역 외부의 모든 것을 버리는 것은 주파수 공간의 박스 기능에 의한 곱셈입니다. (역) 푸리에 변환은 점별 곱셈을 함수의 (역) 푸리에 변환의 컨볼 루션으로 바꾸고 그 반대도 마찬가지입니다. 따라서 시간 영역에서 작업하려면 박스 기능의 (역) 푸리에 변환으로 컨볼 루션을 수행해야합니다. 이것은 "sinc"함수 (sin at)/at에 비례하는 것으로 밝혀졌습니다. 여기서 a는 주파수 공간에서 상자의 너비입니다. 따라서 4 번째 위치마다 (4의 계수로 다운 샘플링하기 때문에) 근처의 지점을 추가하여 DT가 해당 위치까지의 거리에있는 Sin (DT) / A DT를 곱할 수 있습니다. 얼마나 가까이? 글쎄, 그것은 당신이 얼마나 좋은 소리를 내기를 원하는지에 달려 있습니다. 예를 들어 첫 번째 0 이외의 모든 것을 무시하거나 다운 샘플링하는 비율로 포인트 수를 취하는 것이 일반적입니다.

마지막으로 샘플의 대부분을 버리고 Zeroth, 네 번째 등을 유지하는 소변이 부족한 (그러나 빠른) 방법이 있습니다.

솔직히 기억에 맞는 경우 DFT 경로를 사용하는 것이 좋습니다. 다른 사람들이 필터를 작성하기 위해 추천 한 소프트웨어 필터 패키지 중 하나를 사용하지 않는 경우.

나는 최근에왔다 Brutefir 당신이 관심있는 것 중 일부는 이미 무엇을 할 수 있습니까?

저역 통과 필터 (5500Hz 이상의 주파수 제거)를 적용한 다음 소멸을 적용해야합니다 (케이스에서 4 번째로 NTH 샘플을 남겨 둡니다).

Decimation의 경우, IIR 필터가 아닌 FIR이 일반적으로 사용됩니다. 이전 출력에 의존하지 않으므로 폐기 된 샘플에 대해서는 아무것도 계산할 필요가 없습니다. IIR은 일반적으로 입력과 출력 모두에 따라 달라 지므로 특정 유형의 IIR을 사용하지 않는 한 3/4를 폐기하기 전에 모든 출력 샘플을 계산해야합니다.

주제에 대한 소개 된 기사를 구글링했습니다. https://www.dspguru.com/dsp/faqs/multirate/decimation

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top