본문 바로가기

Audio Processing38

오디오 필터(2)-바이쿼드 필터 (Bi-quad Filter), s 영역, z영역, 필터의 안정성 신호처리와 필터 계수 오디오 처리에서는 다양한 필터를 사용합니다. 그런데 이 필터를 설계하고 최종적으로 얻고자 하는 것이 무엇일까요? 한마디로 필터의 계수를 구하고자 노력하는 것입니다. 이렇게 얻어진 필터 계수들은 IIR 또는 FIR 필터에 의해 실제 신호에 필터 특성을 부가한 결과를 얻게 되고 이 결과가 우리가 신호처리를 하는 과정입니다. 그러므로 필터 계수를 어떻게 얻을지에 목표를 삼으면 됩니다. 여기서는 오디오 필터에서 가장 많이 사용되는 필터 전달 함수인 바이쿼드 필터에 대해서 알아보고 s영과 z영역에 대해서도 알아보겠습니다. 아날로그 신호를 표현하는 s영역 전자공학에서 미분과 적분을 많이 사용합니다. 이 중에서 적분이 회로를 해석할 때 어려움을 주게 됩니다. 그래서 좀 더 편리하게 회로를 해석하.. 2021. 10. 29.
오디오용 필터(1)-필터의 종류와 특성, 이상적인 필터 특성 오디오 필터 오디오 필터는 사용하는 목적에 따라 크게 세 가지 그룹으로 분리됩니다. 필터의 통과가 차단 특성을 이용하여 크로스오버(crossover, xover)를 구성하거나, 오디오의 음질 보정을 위해 사용하는 이퀄라이저 그리고 음향적인 보정을 위해 사용하는 그래픽 이퀄라이저가 있습니다. 그리고 보완적인 특성을 가지는 대역 저지 필터와 전대역 통과 필터가 있습니다. 이 글에서는 오디오에서 사용하는 필터에 사용되는 각종 기술적인 용어를 알아보도록 하겠습니다. 필터 전달 함수에 따른 필터의 구분 디지털 오디오 필터는 전자회로의 부품을 대신하여 필터의 동작 특징을 결정하는 필터 계수(filter coefficeint)가 있습니다. 또 필터 계수가 연산에서 어떻게 사용되는지에 따라서 두 가지 형태가 있습니다... 2021. 10. 29.
다이내믹 신호처리(7)-게이트 게이트 다이내믹 프로세서에서 게이트(gate) 또는 노이즈 게이트(noise gate)는 아래 그림과 같이 문턱 레벨(threshold) 이하의 신호는 모두 묵음(mute)으로 처리하는 장치입니다. 게이트 또한 포락선을 구하고, 포락선에서 문턱 레벨 조건을 이용해서 동작합니다. 포락선을 사용하지 않고 그냥 입력 신호의 크기 조건으로 게이트를 동작시키면, 신호의 중간중간마다 묵음이 발생해서 딱딱 끊기는듯한 소리로 들리게 됩니다. 그러니 포락선을 기준으로 게이트가 동작해야 합니다. 실효치 게이트 구현 코드 아래의 코드는 실효치 포락선을 구해서 게이트를 구현하는 내용입니다. 포락선 조건만 잘 구하면 이득을 처리하는 부분인 매우 단순합니다. clear all file_name = 'test.wav'; [xx,f.. 2021. 10. 21.
다이내믹 신호처리(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.
다이내믹 신호처리(2)- 오디오 신호변화 특성과 포락선 오디오 신호의 변화 특성 잡음 신호등의 인공적인 신호를 제외하고 음성과 악기는 아래 그림과 같이 시간에 따라 신호가 변화합니다. 이런 신호의 변화 형태를 포락선(envelope)이라 하고, 포락선에 따라 신호처리를 하는 방식을 다이내믹 처리(dynamic processing)라고 합니다. 그러므로 다이내믹 신호처리를 위해서는 포락선을 검출하는 내용이 필요하고 사실 매우 중요한 역할을 합니다. 이글에서는 오디오 신호의 변화인 포락선을 어떻게 검출하는지 알아보겠습니다. 오디오 신호 변화의 구간 아래의 신호의 그래프는 절댓값 또는 데시벨로 신호를 표시한 내용으로 이를 포락선(envelope)이라고 합니다. 다이내믹 처리는 사실 포락선을 구하고, 어떤 포락선 상태에 있는지에 따라 신호를 처리하는 방법을 달리합니.. 2021. 10. 21.
다이내믹 신호처리(1)-개요 다이내믹 프로세서의 종류와 기능 다이내믹 신호처리(dynamic processing)는 시간적인 흐름에 따라 변하는 오디오 신호를 신호의 크기 변화 조건을 고려하여 출력 이득을 조정하는 방법입니다. 그 기반은 평균을 구하는 것이고 이를 확장해서 포락선을 구하는 것인 먼저입니다. 이를 이용해서 다이내믹 신호처리에 관한 내용을 몇 개의 글에 나눠서 정리해 보겠습니다. 오디오 신호의 특성과 포락선 실효치와 피크 포락선 구하기 어택과 릴리즈를 고려한 포락선 구하기 실효치 모드의 컴프레서와 리미터 피크 모드의 컴프레서와 리미터 게이트 먼저 이 글에서는 다이내믹 신호처리를 수행하는 다이내믹 프로세서(dynamic processor)의 기능적인 특성과 종류에 대해 알아보겠습니다. 아날로그 다이내믹 프로세서 아날로그 .. 2021. 10. 21.
Python의 FFT, 평균화(averaging), 평활화(Smooth) 오디오의 FFT 오디오의 주파 수축 정보를 알아보기 위해서 FFT를 사용합니다. 이글에서는 Python을 이용해서 wav 음악 파일의 일부를 읽어서 FFT의 결과를 그래픽으로 표시해 보겠습니다. 동시에 octave 조건을 이용해 보겠습니다. 평활화 주파수 축의 결과가 주파수에 따라서 신호의 크기 변화가 크기 때문에 유의미한 신호의 특성을 얻기가 힘듭니다. 그래서 특정 주파수를 기준으로 주변의 신호들과 평균을 내고 이를 대표해서 표시하는 방법을 사용하는데 이를 평활화(smooth)라고 합니다. 평균은 다른 글의 내용을 참조해 주세요. 평활화는 주로 옥타브 단위로 주변의 신호를 평균 내서 화면에 표시합니다. 아래의 코드에서 평활화 없는 FFT 결과, 1 oct로 평활화 그리고 1/3 oct로 평활화한 결과를.. 2021. 9. 28.
신호처리를 위한 평균 신호 처리와 평균 신호 처리과정에서 평균(mean, average)은 매우 유용하게 사용됩니다. 특히 향후에 다른 글에서 다루게 될 다이내믹 프로세서에서 핵심 내용으로 자리합니다. 그리고 신호를 계측하고 평가하는 과정에서도 사용되며, 적응 필터와 같은 신호 처리 필터의 기반이 됩니다. 이글에서는 신호처리에 사용되는 평균과 이를 응용한 다른 평균에 대해서 알아보겠습니다. 산술 평균과 이동 평균 산술 평균 n개의 {${x_i}$}에 대해 산술 평균 $\bar{X}$로 정의합니다. 일반적으로 산술 평균을 평균(average)으로 부릅니다. $$\bar{X}=\frac{x_0+\cdots +x_{n-1}}{n}$$ 이동 평균 만약 시간에 따라 계속 변화하는 신호에서 N개를 추출해서 평균을 구한다면 다음과 같이 .. 2021. 9. 28.
FFT와 윈도우 오디오 신호에서 주파수 정보를 보기 오디오 신호의 특성을 시간축에서 보다 주파수 축에서 알아보는 것이 더욱 편리합니다. 즉 주파수별로 신호의 크기와 위상의 특성으로 오디오가 어떤 정보를 가지고 있는지 알아봅니다. 이를 위해서 다른 글에서 약간 설명한 푸리에 변환을 사용합니다. 또 현실적인 내용으로 푸리에 변환을 적용하도록 도와주는 각종 윈도우에 대해서도 알아 보겠습니다. 이 윈도우는 디지털 필터를 만들때에 중요한 역할을 하기 때문에 특성과 종류를 알아두는 것이 좋습니다. 푸리에 변환과 주파수 해상도 푸리에 변환(Fourier transform)은 시간축의 신호를 주파수 축의 정보로 변환하는 방법으로 다음과 같이 정의됩니다. 이는 $f(t)$가 연속적인 신호 즉 오디오 신호에 적합한 변환 방식입니다. $$.. 2021. 9. 16.
PCM 과정과 양자화 오차 아날로그 신호를 디지털 신호로 변환 신호처리는 디지털 신호를 다룹니다. 그러므로 오디오의 아날로그 신호를 디지털 신호를 변환해 줘야 합니다. 이 과정을 진행하는 부품이 ADC(analog-to-digital converter)입니다. ADC에서 진행되는 과정을 한마디로 샘플링이라고 대표해서 부릅니다. ADC는 신호처리 과정에 많은 부분에 영향을 주는 주요 인자를 사용하게 됩니다. 이 글에서는 ADC에서 이루어지는 과정과 이 과정에서 발생하는 기술적인 내용을 다루도록 하겠습니다. 디지털 오디오 신호의 생성 아날로그 오디오 신호는 일반적으로 표본화를 거쳐서 디지털 신호로 변환된다고 합니다. 그러나 자세히 보면 PAM(pulse amplitude modulation), PCM(pulse code modulat.. 2021. 8. 19.
디지털 오디오 신호 흐름의 표현 디지털 신호 흐름 오디오 신호처리 또한 신호의 흐름으로 과정을 이해하면 편리합니다. 그래서 코드로 작성하기 전에 신호가 어떻게 관계를 맺으면 시간에 따라 변해가는지 그림으로 표현합니다. 이글에서는 디지털 신호 처리에서 주로 사용하는 신호 흐름의 표현 방법을 알아보겠습니다. 잘 아시다시피 수식보다는 그림으로 신호의 흐름을 표시하면 알아보기 쉬울 것입니다. 가장 기본적인 표현은 다음과 같이 박스를 사용하고 입출력 신호를 표시하면 됩니다. 만약 입력과 출력이 같다면 다음과 같이 표시하면 됩니다. 신호 이득 출력이 입력에 특정 이득 a를 곱해서 출력되면 다음과 같이 표시합니다. 신호의 지연 오디오 신호처리는 샘플 시간 단위로 시간 지연을 많이 사용합니다. 다음은 하나의 샘플 단위로 신호를 지연을 표시하는 방법입.. 2021. 8. 19.
디지털 오디오용 시리얼 데이터 I2S, TDM 디지털 오디오용 시리얼 데이터 DSP는 ADC 또는 DAC와 시리얼 통신으로 데이터를 송수신합니다. 예를 들어 0x02라는 신호는 0b00000010와 같고 이를 1bit씩 연속으로 ADC 또는 DAC와 DSP가 주고받습니다. 이때 사용되는 통신 형식이 I2S(Inter-IC sound)와 TDM(time division multiplexing)입니다. 이 두 방식은 정수형 오디오 데이터를 사용합니다. 이는 ADC와 DAC가 샘플링과 양자화 과정에서 결정된 오디오 신호를 정수 형식으로 기록하기 때문입니다. 이 글에서는 두 오디오 신호의 일반적인 형식에 대해서 알아보도록 하겠습니다. 2 channel I2S LRCLK는 Left-Right 신호를 분리하는 클럭이며 Frame Clock이라고도 합니다. SC.. 2021. 8. 19.
신호처리와 숫자 표현(3)-고정 소수점, 부동 소수점의 변환 고정 소수점과 부동 소수점의 변환 신호처리에서 실수는 고정 소수점 방식과 부동 소수점 방식으로 기록됩니다. 고정 소수점 방식은 메모리 비트를 그대로 읽으면 실수로 표시되기 때문에 하드웨어 매우 유리한 방식입니다. 이에 반해 부동 소수점 방식은 코딩 과정에 유리합니다. 이 두 표현 관계는 신호처리 과정에서 상호 변환해서 사용하기도 합니다. 특히 필터의 계수값을 구할때 고정 소수점 방식으로 구하지 않습니다. 부동 소수점이 일반적인 수학 연산 표현에 더 적합하기 때문입니다. 그러니 부동 소수점으로 구한 값을 고정 소수점으로 변환해서 주로 사용하게 됩니다. 이 글에서는 두 표현 방법 간에 변환 방법을 알아보겠습니다. 실수의 고정 소수점$(N_{fixed})$ 표현 먼저 다음 공식을 이용해서 실수 R을 Qm.n .. 2021. 8. 17.
신호처리와 숫자 표현(2)-숫자의 비트 표현 숫자의 비트 표현 신호처리는 최종적으로 정수(integer)와 실수 형식을 사용하고 실수는 고정 소수점 방식과 부동 소수점 방식을 사용합니다. 그런데 숫자를 DSP의 신호처리 연산을 위해서는 비트(bit) 형식으로 표시할 필요가 있습니다. 이 글에서는 정수와 소수의 비트 표현을 알아보겠습니다. 여기서 숫자 뒤의 강호는 숫자의 진법을 의미합니다. 정수의 비트 표현 10진수의 정수 표현은 잘 알려진 것과 같이 정수를 2로 나누면서 나머지를 모으면 쉽게 구해집니다. 소수의 비트 표현 실수에서 정수 부분이 위의 정수 비트 표현을 사용하면 됩니다. 실수의 소수 부분은 아래와 같이 2를 계속 곱하고 정수 부분을 모아서 표현합니다. 다음은 0.33의 소수 표현입니다. 그런데 0.33은 2진법으로 표현하면 무한히 소수.. 2021. 8. 17.
신호처리와 숫자 표현(1)-사용되는 숫자의 형식 신호 처리와 숫자표현 우리 사용하는 숫자 표현과 다르게 오디오 신호처리에는 다양한 디지털 숫자 표현이 사용됩니다. 결과적으로 신호처리의 모든 숫자는 디지털 비트의 조합으로 표현되기 때문입니다. 그런데 사용의 편리성에 의해 숫자가 표현되는 방법도 다르고 기록되는 방법도 다릅니다. 이글을 포함하여 총 세개의 글에서 신호처리 과정에서 사용되는 숫자 표현법을 알아보겠습다. 신호 처리과정과 사용되는 숫자 형식 다음 그림은 오디오 신호처리 과정과 신호 흐름에서 입출력되는 숫자의 형식이며 특징은 다음과 같습니다. 데이터 형식 특징ㅌ,ㄱ 16bit integer 코드에서 int16_t 사용 값은 실제 데이터는 2byte를 차지함 24bit integer 코드에서 int32_t 사용, 3byte int를 표시형식은 없다.. 2021. 8. 17.