과학적 오디오 처리, 2부 - Octave 4.0과 함께 Ubuntu를 사용하여 오디오 파일에서 기본적인 수학적 신호 처리를 수행하는 방법
이 페이지에서
- 신호 추가\n
- 1단계: 서로 다른 주파수의 두 신호 생성(ogg 파일)\n
- 2단계: 두 신호 추가\n
- 3단계: 두 개의 실제 신호 추가(두 개의 음악 트랙이 있는 예)\n
- 결과 제품 신호의 플롯\n
- 기본 주파수 차이가 큰 두 신호를 곱한 그래픽 효과(변조 원리)\n
이전 튜토리얼에서는 오디오 파일을 읽고, 쓰고, 재생하는 간단한 단계를 보았습니다. 코사인 함수와 같은 주기 함수에서 오디오 파일을 합성하는 방법도 보았습니다. 이 튜토리얼에서는 신호를 추가하고, 신호를 곱하고(변조), 몇 가지 기본 수학 함수를 적용하여 원래 신호에 미치는 영향을 확인하는 방법을 살펴봅니다.
신호 추가
두 신호 S1(t) 및 S2(t)의 합은 신호 R(t)를 생성하며 그 값은 임의의 시점에서 해당 시점에 추가된 신호 값의 합입니다. 다음과 같이:
R(t)=S1(t) + S2(t)
Octave에서 두 신호의 합을 다시 생성하고 그 효과를 그래픽으로 확인합니다. 먼저 서로 다른 주파수의 두 신호를 생성하여 합산 결과 신호를 확인합니다.
1단계: 서로 다른 주파수의 두 신호 생성(ogg 파일)
>> sig1='cos440.ogg'; %creating the audio file @440 Hz
>> sig2='cos880.ogg'; %creating the audio file @880 Hz
>> fs=44100; %generating the parameters values (Period, sampling frequency and angular frequency)
>> t=0:1/fs:0.02;
>> w1=2*pi*440*t;
>> w2=2*pi*880*t;
>> audiowrite(sig1,cos(w1),fs); %writing the function cos(w) on the files created
>> audiowrite(sig2,cos(w2),fs);여기서는 두 신호를 모두 플로팅합니다.
신호 1의 플롯(440Hz)
>> [y1, fs] = audioread(sig1);
>> plot(y1)신호 2의 도표(880Hz)
>> [y2, fs] = audioread(sig2);
>> plot(y2)2단계: 두 개의 신호 추가
이제 이전 단계에서 생성된 두 신호의 합을 수행합니다.
>> sumres=y1+y2;
>> plot(sumres)결과 신호의 플롯
옥타버 효과
옥타버에서 이 효과가 제공하는 사운드는 음악가가 연주하는 음을 원래 음과 결합하여 낮은 옥타브 또는 높은 옥타브(프로그래밍된 대로)로 에뮬레이트하기 때문에 특징적입니다. 즉, 두 개의 음이 나타납니다. 동일하게 들립니다.
3단계: 두 개의 실제 신호 추가(두 개의 음악 트랙이 있는 예)
이를 위해 Gregorian Chants(음성 샘플링)의 두 트랙을 사용합니다.
아베마리아 트랙
먼저 Avenaria 트랙을 읽고 플로팅합니다.
>> [y1,fs]=audioread('avemaria_.ogg');
>> plot(y1)찬송가 트랙
이제 찬송가 트랙을 읽고 구성합니다.
>> [y2,fs]=audioread('hymnus.ogg');
>> plot(y2)아베마리아 + 찬송가 트랙
>> y='avehymnus.ogg';
>> audiowrite(y, y1+y2, fs);
>> [y, fs]=audioread('avehymnus.ogg');
>> plot(y)두 신호의 곱
두 개의 신호를 곱하려면 합계에 유사한 방법을 사용해야 합니다. 이전에 만든 동일한 파일을 사용합시다.>> sig1='cos440.ogg'; %creating the audio file @440 Hz
>> sig2='cos880.ogg'; %creating the audio file @880 Hz
>> product='prod.ogg'; %creating the audio file for product
>> fs=44100; %generating the parameters values (Period, sampling frequency and angular frequency)
>> t=0:1/fs:0.02;
>> w1=2*pi*440*t;
>> w2=2*pi*880*t;
>> audiowrite(sig1, cos(w1), fs); %writing the function cos(w) on the files created
>> audiowrite(sig2, cos(w2), fs);
>> [y1,fs]=audioread(sig1);
>> [y2,fs]=audioread(sig2);
>> audiowrite(product, y1.*y2, fs); %performing the product
>> [yprod,fs]=audioread(product);
>> plot(yprod); %plotting the product
참고: 이 제품은 인수 파일에서 값 대 값으로 만들어지기 때문에 피연산자 .*를 사용해야 합니다. 자세한 내용은 Octave의 매트릭스를 사용한 제품 작동 설명서를 참조하십시오.결과 제품 신호의 플롯
기본 주파수 차이가 큰 두 신호를 곱한 그래픽 효과(변조 원리)
1 단계:
주파수가 220Hz인 오디오 주파수 신호를 생성합니다.
>> fs=44100;
>> t=0:1/fs:0.03;
>> w=2*pi*220*t;
>> y1=cos(w);
>> plot(y1);2 단계:
22000Hz의 더 높은 주파수 변조 신호를 생성합니다.
>> y2=cos(100*w);
>> plot(y2);3단계:
두 신호를 곱하고 플로팅합니다.
>> plot(y1.*y2);
신호에 스칼라 곱하기
함수에 스칼라를 곱하는 효과는 해당 범위 및 경우에 따라 위상의 부호를 수정하는 것과 같습니다. 스칼라 K가 주어지면 스칼라에 의한 함수 F(t)의 곱은 다음과 같이 정의됩니다.
>> [y,fs]=audioread('cos440.ogg'); %creating the work files
>> res1='coslow.ogg';
>> res2='coshigh.ogg';
>> res3='cosinverted.ogg';
>> K1=0.2; %values of the scalars
>> K2=0.5;
>> K3=-1;
>> audiowrite(res1, K1*y, fs); %product function-scalar
>> audiowrite(res2, K2*y, fs);
>> audiowrite(res3, K3*y, fs);>> plot(y)
진폭이 0.2 감소한 신호 플롯
>> plot(res1)
진폭이 0.5 감소한 신호 플롯
>> plot(res2)
위상이 반전된 신호 플롯
>> plot(res3)
결론
대수 합, 곱, 스칼라에 의한 함수 곱과 같은 기본 수학 연산은 스펙트럼 분석, 진폭 변조, 각도 변조 등 고급 연산의 중추입니다. 다음 튜토리얼에서 , 우리는 그러한 작업을 수행하는 방법과 오디오 신호에 미치는 영향을 볼 것입니다.