본문 바로가기

분류 전체보기158

ADAU1701(5) 레벨미터, DSP 회로그리기 오류 레벨미터 오디오하면 레벨미터(Level meter)가 있어야 겠죠, 레벨미터도 여러 종류가 있습니다. 대표적인것이 실효지 미터(RMS level meter)입니다. 입력 신호의 실효치를 미터로 보여주는 것입니다. 또다른 방법이 피크 미터(peak level meter)로 지속적으로 피크값을 보여 주는 방법입니다. FFT를 이용해서 주파수별로 신호의 크기를 보여주는 방법도 있습니다. 이글에서는 FFT 방식과 유사한 내용의 레벨 미터를 구현해 보겠습니다. Level meter Schematic 구성 저번 글의 내용에서 다음과 같이 내용을 변경합니다. 이때 레벨미터 안에 있는 스위치를 ON으로 해야 동작합니다. SigmaStudio에서 제공하는 레벨미터는 매우 다양합니다. 다른 글에서 간단한 레벨미터를 다뤄 .. 2021. 12. 20.
ADAU1701(4) Equalizer, Mute 제목 저번 글의 내용을 확장하고 변형해서 이퀄라이저를 만들고 음소거 기능 (mute)을 포함하도록 수정하겠습니다. 이퀄라이저는 Treble, Bass를 다시 HSF, LSF로 바꾸고 Peaking Filter를 추가하면 됩니다. 이런 이퀄라이저의 공식 명칭은 파라메트릭 이퀄라이저(Parmetric Equalizer, PEQ)라고 합니다. 이 글에서는 5개의 필터를 포함해서 PEQ5를 구성해 보겠습니다. Schematic 그리기 저번 글을 File->Save as를 통해 EQ1으로 프로젝트를 복사하겠습니다. 그리고 아래 그림과 같이 연결선을 먼저 삭제합니다. 볼륨도 지웁니다. 다른 볼륨을 사용할 것입니다. 음소거 기능을 추가합니다. 그리고 마우스 오른쪽 버튼을 이용해서 출력 포트 숫자를 늘립니다. (맨 아.. 2021. 12. 17.
ADAU1701(3) Treble, Bass, Volume DSP로 음질 제어와 음량 제어 오디오 신호처리를 하면서 Throw 다음으로 만들어 보는 것이 음량 제어(Gain Control)와 음질 제어(Sound Quality Control) 일 것입니다. 이 글에서는 ADAU1701로 음량 제어와 음질 제어를 해보겠습니다. 음량 제어 오디오의 출력 신호를 조정하는 내용을 음량 제어 중에서 특히 볼륨(Volume)이라고 부릅니다. 볼륨은 다른 디지털 필터와 연결되어 이득을 조정하는 것이 아니고 오로지 오디오 출력 신호를 조정할 목적으로 사용됩니다. 다른 글의 Throw 프로젝트를 불러와서 File->Save as로 적당한 이름으로 기록하면 쉽게 ADAU1701의 기본을 가져와서 확장하기 용이합니다. 이글에서는 EQ0라는 프로젝트로 기록했습니다. 그리고 아래와 같.. 2021. 12. 16.
ADAU1701(2) DSP 보드 준비와 Throw 실험 ADAU1701 보드 준비 - Throw 실험 이번 글에서는 ADAU1701의 보드를 처음에 어떻게 설치해서 사용해야 하는지 설명하겠습니다. 그리고 마음 급하신 분들을 위해서 입력 신호를 출력으로 그냥 내보내는 Throw를 구현해 보겠습니다. 좀 긴 내용입니다. SigmaStudio 설치 앞선 글에서 설명한 것과 같이 AnalogDevice에서 SigmaStudio를 구해서 설치합니다. 모든 프로그램이 그렇지만 SigmaStudio도 내용을 알면 사용하기 편리합니다. 지긋지긋한 코딩의 양도 확 줄어들고, 실제 DSP를 동작하고 조정하는 것도 가능합니다. 이를 위해서라도 USBi는 무조건 필요합니다. 설치가 하고 실행하면 아래와 같은 프로그램이 보입니다. 이제 시작입니다. 보드 준비 보드와 USBi를 먼저.. 2021. 12. 13.
ADAU1701(1) 프로젝트 준비 프로젝트 시작 실제에 적용이 가능하고 편리하게 접근이 가능한 DSP(Digital Signal Processor)는 아마도 아날로그디바이스가 만든 시그마(sigma) DSP일 겁니다. 이 DSP는 복잡한 펌웨어 과정이 없이도 오디오를 위한 신호처리가 가능합니다. 그래서 이를 활용하는 오디오 프로젝트를 여러개 만들어 보겠습니다. ADAU1701(2) 보드 준비 Throw 실험 ADAU1701(3) Treble, Bass, Volume ADAU1701(4) Equalizer, Mute ADAU1701(5) Level Meter, DSP 회로그리기 오류 ADAU1701(6) Supper Bass - 준비중 ADAU1701(7) Subwoofer - 준비중 https://github.com/gigasound/A.. 2021. 12. 9.
선행음 효과 선행음 효과 선행음 효과(precedence effect) 또는 하스 효과(Hass' effect)로 알려진 음향 효과는, 청취자가 여러 음원의 소리를 어떻게 알아듣는지 설명하는 효과입니다. 이는 매우 간단한 내용으로 여러 음원 중에서 먼저(선행) 들리는 소리의 음상(sound image)로 인지하는 효과를 말합니다. 선행음 효과는 음상 합성과 음상 분리에 대한 청취적인 특성을 잘 설명하고 있습니다. 음상의 합성 같은 소리를 내는 두 개의 스피커가 청취자에게 시간적으로 20ms 이내의 소리 차이로 들리도록 위치해 있다면 A의 스피커를 듣지만 A'가 혼합되어 사실상 A와 A'가 잘 구분되지 않습니다. 이때 A와 A'의 청취 레벨은 거의 같아야 합니다. 음상의 분리 시간적으로 20m보다 먼 거리 두 스피커가.. 2021. 11. 22.
스피커 구동 방식과 크로스 오버와 스피커 컨트롤러 스피커 구동 방식 스피커를 진동시키는 장치는 분명 파워 앰프(Power amplifier)입니다. 파워 앰프는 CD와 같은 오디오 신호 장치의 매우 작은 신호를 스피커를 구동하기 위해 큰 전력으로 증폭하는 전용장치입니다. 스피커는 한 개 또는 여러 개의 스피커 유닛(speaker uit)을 조합해서 만듭니다. 그런데 한 개의 스피커 유닛은 청취 대역 전체 주파수를 재생하는 데는 적합하지 않습니다. 대부분의 스피커 유닛은 중음 대역을 재생하는 데는 적합하지만, 고음 또는 저음을 재생하는 데는 다소 부족한 특성을 가집니다. 그래서 스피커를 2개 또는 3개를 사용해서 소리를 저음 부 또는 고음부로 분할해서 재생합니다. 이글에서는 다수의 스피커 유닛을 사용해서 소리를 재생하는 방법에 대해서 알아보겠습니다. 스피.. 2021. 11. 22.
c# 프로세스 동작시간 측정 프로세스 동작시간 측정 신호 처리과정에서 알고리즘이 효과적인 방법인지 알고 싶을때 특정 코드의 동작 시간을 측정하고 싶을 때가 있습니다. C#에서는 이를 위한 내용이 준비되어 있습니다. Stopwatch를 이용해서 sw.Start()와 sw.Stop()으로 실행 시간을 구합니다. 한번만 프로세스를 해서는 구하기 어렵기 때문에 cnt 만큼 반복한 후에 이를 평균내서 실행 결과를 측정합니다. 출력된 결과도 그때 그때 다른 값을 보입니다. 이건 어쩔수 없네요. 그래서 다수의 프로세서 사이의 동작 시간을 비교 측정하는 방법이 좋겠네요 using System.Diagnostics; pulic func(){ Stopwatch sw = new Stopwatch(); int cnt_size = 1000; sw.Star.. 2021. 11. 12.
오디오 필터(22)- 바이쿼드 필터의 주파수 응답 바이쿼드 필터의 주파수 응답 지난 글에서 바이쿼드 필터에 대해 설명한적이 있습니다. 지난 글에서는 바이쿼드 필터의 주파수 특성을 GNU Octave의 함수를 이용해서 검토했습니다. 이번에는 FFT나 Octave 함수를 사용하지 않고 바이쿼드 필터의 주파수 특성을 구하는 내용을 다루도록 하겠습니다. 바이쿼드 필터의 전달함수 바이쿼드 필터의 전달함수는 다음과 같이 정리됩니다. $$H(z)=\frac{b_0+b_1z^{-1}+b_2z^{-2}}{1+a_1z^{-1}+a_2z^{-2}}$$ z를 $j\omega$로 치환하면 디지털 필터 전달함수를 복소수 공간의 전달함수 로 변환이 됩니다. $$H(e^{j\omega})=\frac{b_0+b_1e^{-j\omega}+b_2e^{-j2\omega}}{1+a_1e^{.. 2021. 11. 11.
오디오 필터(21)-FIR 카이저 윈도우(Kaiser window) 카이저 윈도우로 FIR 필터 구하기 FIR 필터를 구하는 방법 중에 윈도우 방법에서 카이저 윈도우(Kaiser window) 함수를 만들어서 기존의 윈도우 함수 대신 사용하는 것입니다. 카이저 윈도우는 필터를 만들기 위한 설계요건에 따라 윈도우 형태가 변경되는 특징이 있습니다. 이는 마치 IIR 필터의 통과 필터를 설계하는 방법을 FIR 필터로 옮긴것 같습니다. 카이저 윈도우 구하기 카이저 윈도우는 구현되는 필터의 조건에 따라서 윈도우를 형성하는 파라미터를 구해줘야 합니다. 윈도우의 통과 대역 주파수 $f_{pass}$와 저지 대역 주파수 $f_{stop}$과 통과 대역의 리플(ripple) $\delta_{pass}$와 저지 대역의 리플 $\delta_{stop}$, 샘플 주파수 $f_s$를 설정합니다.. 2021. 11. 1.
오디오 필터(20)-콘보루션을 이용한 FIR 필터의 실행 콘보루션과 FIR 필터 FIR 필터의 계수를 구하는 방법으로 윈도우 방식과 주파수 샘플링 방식에 대해 설명한 적이 있습니다. IIR 필터를 실행한 것과 같이 이번에도 오디오 신호를 입력하고 FIR 필터를 통과해서 출력하는 방법을 알아보겠습니다. 먼저 FIR 필터 실행에 기반이 되는 콘보루션에 대해서도 알아보겠습니다. 콘보루션 콘보루션(convolution) 또는 합성곱은 하나의 신호 함수에 가중 함수를 곱해서 그 결과는 얻는 방법입니다. 기본적인 방법은 하나의 함수를 시간 반전하고 $\tau$ 만큼 시간 이동해서 이를 적분하는 것입니다. 이때 함수의 순서는 중요하지 않습니다. 어느 함수를 반전하던지 관계없습니다. $$(f\ast g)(t)=\int_{\tau = -\infty}^{\infty}f(\tau.. 2021. 10. 29.
오디오 필터(19)-주파수 샘플 방법으로 FIR 필터 구하기 주파수 샘플링 주파수 샘플링 방법으로 FIR 필터를 구하는 방법은 참으로 기막힌 기법입니다. 시간축에서 계속 변화하는 아날로그 신호를 샘플링으로 디지털 신호로 변화하는 방법이 있었습니다. 이 방법을 주파수 축에서 적용하는 해서 필터를 구하는 방법이 주파수 샘플링 방법입니다. 이 글에서는 주파수 샘플링 방법으로 원하는 특성의 필터를 쉽게 구하는 방법에 대해서 알아보겠습니다. 사실 이 방법이 실제로 필터를 구하기 더 쉽습니다. 먼저 주파수 축에서 구현될 필터 모양을 결정해야 합니다. 수식으로 해도 되고 실제 원하는 필터의 모양에서 필터의 크기에 관한 정보를 수집해야 합니다. 그리고 주파수 축에서 각주파수로 [0, 2$\pi$] 사이에 필터의 모양에 따라 N개의 샘플을 등간격으로 채취합니다. 이를 H(k)로 .. 2021. 10. 29.
오디오 필터(18) - 윈도우 방법을 이용한 FIR 필터 구하기 윈도우 방법을 이용한 FIR 필터 구하기 지난 글에서 이상적인 필터의 모양을 기반으로 필터 $h(n)$을 구하는 방법을 알아봤습니다. 그런데 $h(n)$은 시간이 -t이고 주파수가 $-\omega $인 조건까지 사용해야 하기 때문에 공학적으로 사용할 수 없습니다. 이를 비 인과성(non-causalty)라고 합니다. 비 인과성은 현재, 과거, 미래의 모든 신호가 필요합니다. -t와 $-\omega $는 미래의 정보입니다. 그런데 우리는 미래의 시간을 만들 수 없습니다. 그러니 인과성(causalty)만 고려해야 합니다. 즉 현재와 과거의 신호만으로 공학적으로 의미 있는 신호처리를 해야 합니다. 이 글에서는 지난 글의 비인과성 조건의 필터를 인과성 조건으로 변경해서 저역 통과 필터를 만들어 보겠습니다. S.. 2021. 10. 29.
오디오 필터(17)-FIR 필터 기반의 통과 필터 구하기 FIR 필터 구하기 FIR 필터는 다른글에서 다룬 신호의 궤환이 있는 IIR 필터와 다르게 궤환이 없이 유한한 필터 계수만으로 구현되는 필터로 선형 위상을 가지는 특징이 있습니다. 다만 IIR 필터 보다 연산량이 많은 단점이 있습니다. 이 글과 다른 글에서 FIR을 이용한 필터를 만들고 실행하는 방법을 알아보겠습니다. 이상적인 필터의 특징을 이용한 필터 계수 구하기 윈도우 방식을 이용한 FIR 필터 구하기 주파수 샘플링 방식을 이용한 FIR 필터 구하기 콘보루션으로 FIR 필터 실행하기 이상적인 필터 지난 글에서 이상적인 필터와 실제 구현 가능한 필터 형태에 대해 설명했습니다. FIR(finity impulse response) 필터는 이상적인 필터를 출발점으로 해서 구현 가능한 형태로 유도합니다. 유도.. 2021. 10. 29.
오디오 필터(16)-IIR 필터 실행, 오디오 볼륨 처리 IIR 필터 다루기 이전의 글에서 디지털 필터의 전달 함수를 위한 계수들을 구하는 방법을 알아봤습니다. 이때 디지털 필터 전달 함수의 형태에 따라 IIR 또는 FIR가 있으며 형태가 조금 다릅니다. 이에 관한 내용은 다른 글에서 다루겠습니다. 이글에서는 GNU Octave에서 오디오를 다루는 방법, 그리고 이를 이용해서 오디오의 볼륨을 조정하는 방법, 마지막으로 디지털 필터를 적용해서 오디오 신호를 처리하고 출력하는 방법을 알아보겠습니다. 유투브를 보시면 오디오 파일을 6초 정도로 짧게 만들어 실험에 사용하는 방법과 GNU Octave로 오디오 파일을 출력 하는 방법 까지 설명해 놨습니다. IIR 필터 실행 방법 IIR 필터는 다음과 같이 처리됩니다. 입력 신호를 받아서 필터 계수를 적용한 IIR 필터에.. 2021. 10. 29.
오디오 필터 실험(15)-원시 데이터 얻기 오디오 필터 실험 여러 글에서 디지털 필터의 계수를 구하는 방법을 알아봤습니다. 이 중에서 피킹 필터와 저역 통과 필터를 실제 오디오 신호에 적용해서 기록하는 과정을 몇 개의 글에 나눠서 설명하겠습니다. 그중에서 첫 번째 내용으로 오디오 파일을 읽고, 다른 형식으로 데이터를 추출하고, 오디오 파일을 재생하는 프로그램의 사용 방법을 먼저 다뤄보겠습니다. OcenAudio의 설치 오디오 재생 프로그램으로 유명한 프로그램으로 알송, zaudio, fooba2000등이 있고, 오디오 편집과 효과 추가가 가능한 프로그램으로 audition, goldwave등과 프로용으로는 cubase, potool, logic 등이 있습니다. 편집이 가능한 오디오용 프로그램은 대부분 유료입니다. ocenaudio는 무료이면서, .. 2021. 10. 29.
오디오 필터(14)-IIR 버터워스 고역 통과 필터(Butterworth High Pass Filter) 설계 고역 통과 필터 설계 다른 글에서 사용했던 유사한 방법으로 Butterworth HPF를 설계하겠습니다. 이번엔 필터의 Q를 이용하지 않고, 필터의 차단 주파수와 감쇄량을 이용하는 방법을 알아보겠습니다. 다음과 같은 조건으로 고역 통과 필터를 만들겠습니다. 통과대역의 특성으로 차단 주파수와 통과대역 주파수$f_{c}=F_{p}=1000Hz$로 하겠습니다. 그러면 $F_{p}$ 에서 감쇄량은 -3dB가 됩니다. 그리고 저지 대역의 주파수 $F_{s}=80Hz$이며 감쇄량이 -80dB입니다. 이때 샘플링률 $f_{s}=44100Hz$, 샘플 구간 $T_{s}=1/f_{s}$입니다. 필터의 전달 함수 구하기 먼저 필터의 조건으로 다음과 같이 필터를 계산하기 위한 사전 조치를 취합니다. $$A_{p}=10^{\.. 2021. 10. 29.
오디오 필터(13)-IIR 버터워스 저역 통과 필터(Butterworth Low Pass Filter) 설계 저역통과 필터 오디오 필터로 가장 유용한 형태는 버터워스 필터입니다. 통과대역의 특성이 가장 평탄하기 때문입니다. 물론 이를 발전시킨 필터도 있습니다만, 사용성이나 실용적으로 구현하기에도 버터워스 필터는 오디오에 적합합니다. 다른 글에서는 필터의 Q를 이용해서 저역 통과 필터의 계수를 구했습니다. https://medialink.tistory.com/74?category=958130 이글에서는 필터의 일반적인 규격 조건을 통해 버터워스의 s-영역(s-domain)(라플라스 영역)에서 구하고 이를 z-영역(z-domain)으로 변환해서 필요한 디지털 계수를 구하는 방법을 알아보겠습니다. 그리고 필터의 특성을 GNU Octave에서 알아보도록 하겠습니다. 버터워스 필터를 구하는 방식 아날로그 신호 영역인 s.. 2021. 10. 29.
오디오 필터(12)-IIR 노치 필터(Notch Filter, NF) 노치 필터 노치 필터(notch filter)는 대역 저지 필터(band rejection filter)의 하나로 매우 좁은 주파수 대역의 신호를 차단할 목적으로 사용합니다. 이 필터는 오디오 신호처리에서는 적응 필터에서 하울링 억제를 위해 사용됩니다. 또는 특정 주파수의 노이즈를 제거할 때도 사용합니다. 노치 필터를 만드는 방법도 여러 가지가 있습니다. 특히 피킹 필터를 대신 사용해도 됩니다. 필터의 계수는 다음과 같이 생성하면 됩니다. 여기서 Q에 따라 노치 필터가 형성하는 대역이 달라집니다. 이 부분에 대한 내용은 다음을 참조해 주세요 https://medialink.tistory.com/73?category=958130 https://medialink.tistory.com/77?category=9.. 2021. 10. 29.
오디오 필터(11)-IIR 전대역 통과필터(All Pass Filter, APF) 전대역 통과 필터 전대역 통과 필터(all pass filter, APF)는 LPF등과 다르게 모든 신호를 그냥 통과시킵니다. 그러나 필터 주파수를 기준으로 위상을 변경시킵니다. 그래서 위상 특성의 수정을 위해서 주로 사용합니다. 이를 이용해서 인공 잔향기를 만들기도 합니다. APF의 필터 계수 APF의 필터 계수는 다음과 같이 구합니다. 이때 Q에 따라서 위상의 변화 정도가 결정됩니다. 이부분에 대햔 내용은 아래를 참조해 주세요 https://medialink.tistory.com/73?category=958130 https://medialink.tistory.com/77?category=958130 $$h=\frac{sin(\omega_0)}{2Q}$$ $$b_{0}=a_{2}=1-h$$ $$b_{1.. 2021. 10. 29.