signal processing12 오디오 필터(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. 오디오 필터(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. 다이내믹 신호처리(6)-피크 모드 컴프레서, 리미터 피크 검출기를 이용한 컴프레서 저번의 실효치를 이용한 컴프레서에서 피크 포락선을 검출하는 방법으로 변형하여 컴프레서를 구현해 보겠습니다. 내용은 저번 글과 동일하게 포락선을 구하고, 포락선과 문턱 레벨(threshold)의 차이를 이용해서 압축비(ratio)를 반영한 이득을 구하고, 입력 신호에 이득을 곱해서 출력하는 방법입니다. 구현 코드 다음은 GNU Octave로 구현한 피크 모드 컴프레서입니다. clear all file_name = 'test.wav'; [xx,fs]=audioread(file_name); peak_hold_time = 5*10^-3; peak_hold_max = peak_hold_time * fs; peak_hold_cnt =0; start_x = 25000; gap = 300.. 2021. 10. 21. 다이내믹 신호처리(5)-실효치 컴프레서, 리미터 컴프레서의 동작 특성 컴프레서(compressor)는 다이내믹 신호처리(dynamic processing)의 한 종류로, 앞선 글에서 설명한 것과 같이 문턱 레벨(threshold) 이상의 신호를 압축비(ratio)로 압축해서 신호의 크기를 줄여주는 역할을 합니다. 컴프레서는 아래 그림과 같이 어택(attack) 조건과 릴리즈(release) 조건을 가지고 포락선을 검출하고 이를 이용해서 VCA를 제어합니다. 이때 포락선을 실효치(rms) 대신 피크 검출을 사용해도 됩니다. 그러면 아래 그림과 같은 입출력 관계를 가지게 됩니다. 아래의 그림은 문턱 레벨을 -30dB로 압축비를 2로 하여 문턱 레벨 이상의 신호들은 그 크기를 구간에서 1/2로 줄여 줍니다. 여기서 신호의 크기는 모두 dB 단위입니다. 예를.. 2021. 10. 21. 다이내믹 신호처리(4)-어택과 릴리즈를 고려한 포락선 검출 오디오 신호 특성을 고려한 포락선 검출 지난 글에서 오디오 신호가 시간에 따라 4개의 구간으로 구분된다고 설명했습니다. 이 중에서 어택과 릴리즈에 따라서 포락선을 다르게 구하는 방법을 알아보겠습니다. 이는 오디오 신호의 변화를 청감적인 특성을 좀 더 고려해서 포락선을 구하는 방법으로 에텍 구간에서는 될 수 있으면 빠르게 증가하는 오디오 신호를 포락선에 빠르게 반영하고 오디오 신호가 감소하는 릴리즈 구간에서는 포락선 감소로를 다소 늦추는 것입니다. 이 방법은 다이내믹 신호처리에서 일반적으로 사용하는 방법입니다. 신호 변화만 고려한 포락선 검출 지난 글에서 신호의 변화에서 피크신호를 둔화시키는 내용의 포락선을 구한 적이 있습니다. 이를 좀 변경해서 신호가 증가할 때와 감소할 때 각기 다른 시정수를 적용하도록.. 2021. 10. 21. 다이내믹 신호처리(3)-실효치 포락선, 피크 포락선 포락선 구하기 저번 글에서는 오디오 신호의 변화 특성 그리고 시정수를 이용하서 포락선을 구하는 개요를 알아 봤습니다. 이번 글에서는 실제 다이내믹 선호처리에서 사용하난 실효치를 이용한 포락선 검출과 피크 발생을 고려한 포락선을 구하는 두가지 방법을 알아보겠습니다. 실효치 포락선 구하기 실효치(rms)는 아래의 글과 같이 특정 구간의 신호들에 대해 평균을 먼저 계산해야지만 구해지는 값입니다. 그런데 신호처리 과정에서 실효치를 구하기 위한 연산을 할당할 정도로 DSP가 한가한 경우는 드물 것입니다. 굳이 실효치가 매우 중요한 역할을 하지 않는 한 입력 신호에 대해 곧바로 근삿값이라도 실효치를 계산해 준다면 좋을 것입니다. 또 신호처리 과정에서 레벨 미터 정보를 만들 필요가 있는데 근사 실효치는 아날로그식 V.. 2021. 10. 21. 다이내믹 신호처리(1)-개요 다이내믹 프로세서의 종류와 기능 다이내믹 신호처리(dynamic processing)는 시간적인 흐름에 따라 변하는 오디오 신호를 신호의 크기 변화 조건을 고려하여 출력 이득을 조정하는 방법입니다. 그 기반은 평균을 구하는 것이고 이를 확장해서 포락선을 구하는 것인 먼저입니다. 이를 이용해서 다이내믹 신호처리에 관한 내용을 몇 개의 글에 나눠서 정리해 보겠습니다. 오디오 신호의 특성과 포락선 실효치와 피크 포락선 구하기 어택과 릴리즈를 고려한 포락선 구하기 실효치 모드의 컴프레서와 리미터 피크 모드의 컴프레서와 리미터 게이트 먼저 이 글에서는 다이내믹 신호처리를 수행하는 다이내믹 프로세서(dynamic processor)의 기능적인 특성과 종류에 대해 알아보겠습니다. 아날로그 다이내믹 프로세서 아날로그 .. 2021. 10. 21. 이전 1 다음