목차
1. Window 함수조사
2. 윈도우 함수 길이 N=512,256,128,64,32,16일 경우
3. 440Hz와 500Hz와의 합성
2. 윈도우 함수 길이 N=512,256,128,64,32,16일 경우
3. 440Hz와 500Hz와의 합성
본문내용
XmagdB5 = 20*log10(abs(x5));
%Plotting
nw = n(1:N); %n(1:N)
f = [0: N-1] * Fs/N;
title('cosine wave');
plot(f(1:N/2), XmagdB(1:N/2), f(1:N/2), XmagdB1(1:N/2), f(1:N/2), XmagdB2(1:N/2), f(1:N/2), XmagdB3(1:N/2), f(1:N/2), XmagdB4(1:N/2), f(1:N/2), XmagdB4(1:N/2));
xlabel('frequency[Hz]');
ylabel('[dB]');
* Result *
n= 512인 경우 n= 256인 경우
n= 128인 경우 n= 64인 경우
n= 32인 경우 n= 16인 경우
# 440Hz와 500Hz와의 합성
* Program *
Fs = 2000;
f = 440;
f1 = 500;
dur = 1; %duration[sec]
n = [0: 1/Fs: dur];
x = cos(2*pi*f*n);
x1 = cos(2*pi*f1*n);
%FFT
N = 32;
xw = x(1:N).*hamming(N)';
xw1 = x1(1:N).*hamming(N)';
x = fft(xw,N); %fft(xw)
x1 = fft(xw1,N);
XmagdB = 20*log10(abs(x));
XmagdB1 = 20*log10(abs(x1));
%plotting
nw = n(1:N); %n(1:N)
f = [0: N-1] * Fs/N;
plot(f(1:N/2), XmagdB(1:N/2), f(1:N/2), XmagdB1(1:N/2));
xlabel('frequency[Hz]');
ylabel('[dB]');
* Result *
Fs=11025, N=512 Fs=11025, N=32 Fs=2000, N=32
# Conclusion
Cosine wave의 출력결과 뒷부분을 붙이기 위해 교수님 강의 자료를 참고해 실행시켜 보았습니다. 일반적으로 길이가 긴 연속적인 신호를 처리하기 위하여 블록(프레임)단위로 나누어서 처리합니다. 블록으로 나눌 때 보통 윈도우를 씌우는데 rectangular, Hamming, Hanning 윈도우가 자주 사용됩니다.
이번 Report를 통해서 윈도우 함수를 사용하는 이유는 신호 복원할 경우 블럭의 양끝에서의 신호의 불연속을 막거나 주파수 스펙트럼의 왜곡을 막기 위한 것 이라는 것을 알게 됐습니다. 그래서 음성신호처리 에서는 Hamming 윈도우가 side lobe의 attenuation이 크고 main lobe의 폭도 어느 정도 좁아서 자주 사용된다는 것도 알았습니다.
전체 샘플링 주파수를 데이터의 수 N으로 나누게 되므로 N이 크면 클수록, 주파수 영역에서의 분해능은 증가하기 하게 됩니다.
이 경우 데이터의 크기가 커지면 계산해야 할 분량이 증가하므로 속도가 느려지게 됩니다. 따라서 실제로 FFT를 적용할 때에는 분해능과 속도 사이의 적절한 합의점을 찾는 것이 중요하다는 것을 알고, 합의점을 찾아 프로그램을 구현해 보았습니다.
%Plotting
nw = n(1:N); %n(1:N)
f = [0: N-1] * Fs/N;
title('cosine wave');
plot(f(1:N/2), XmagdB(1:N/2), f(1:N/2), XmagdB1(1:N/2), f(1:N/2), XmagdB2(1:N/2), f(1:N/2), XmagdB3(1:N/2), f(1:N/2), XmagdB4(1:N/2), f(1:N/2), XmagdB4(1:N/2));
xlabel('frequency[Hz]');
ylabel('[dB]');
* Result *
n= 512인 경우 n= 256인 경우
n= 128인 경우 n= 64인 경우
n= 32인 경우 n= 16인 경우
# 440Hz와 500Hz와의 합성
* Program *
Fs = 2000;
f = 440;
f1 = 500;
dur = 1; %duration[sec]
n = [0: 1/Fs: dur];
x = cos(2*pi*f*n);
x1 = cos(2*pi*f1*n);
%FFT
N = 32;
xw = x(1:N).*hamming(N)';
xw1 = x1(1:N).*hamming(N)';
x = fft(xw,N); %fft(xw)
x1 = fft(xw1,N);
XmagdB = 20*log10(abs(x));
XmagdB1 = 20*log10(abs(x1));
%plotting
nw = n(1:N); %n(1:N)
f = [0: N-1] * Fs/N;
plot(f(1:N/2), XmagdB(1:N/2), f(1:N/2), XmagdB1(1:N/2));
xlabel('frequency[Hz]');
ylabel('[dB]');
* Result *
Fs=11025, N=512 Fs=11025, N=32 Fs=2000, N=32
# Conclusion
Cosine wave의 출력결과 뒷부분을 붙이기 위해 교수님 강의 자료를 참고해 실행시켜 보았습니다. 일반적으로 길이가 긴 연속적인 신호를 처리하기 위하여 블록(프레임)단위로 나누어서 처리합니다. 블록으로 나눌 때 보통 윈도우를 씌우는데 rectangular, Hamming, Hanning 윈도우가 자주 사용됩니다.
이번 Report를 통해서 윈도우 함수를 사용하는 이유는 신호 복원할 경우 블럭의 양끝에서의 신호의 불연속을 막거나 주파수 스펙트럼의 왜곡을 막기 위한 것 이라는 것을 알게 됐습니다. 그래서 음성신호처리 에서는 Hamming 윈도우가 side lobe의 attenuation이 크고 main lobe의 폭도 어느 정도 좁아서 자주 사용된다는 것도 알았습니다.
전체 샘플링 주파수를 데이터의 수 N으로 나누게 되므로 N이 크면 클수록, 주파수 영역에서의 분해능은 증가하기 하게 됩니다.
이 경우 데이터의 크기가 커지면 계산해야 할 분량이 증가하므로 속도가 느려지게 됩니다. 따라서 실제로 FFT를 적용할 때에는 분해능과 속도 사이의 적절한 합의점을 찾는 것이 중요하다는 것을 알고, 합의점을 찾아 프로그램을 구현해 보았습니다.
소개글