블로그 이미지
짱의 꽁기꽁기 월드입니다 ㅎ Baracuda

카테고리

분류 전체보기 (4858)
Days of my life (45)
좋은 글 좋은 생각 (93)
Cartoon~ (114)
Funny, HaHa (4450)
Music~ (6)
보울~~~링 (46)
Etc (59)
Private (13)
Utility (14)
XK2 (1)
Forte Koup (5)
Total
Today
Yesterday

'매트랩'에 해당되는 글 1건

  1. 2008.01.23 매트랩, 주파수분석관련

매트랩, 주파수분석관련

Etc / 2008. 1. 23. 09:32
매트랩 고수분들 이 프로그램 분석 좀 부탁합니다!!
예를 들면 "이 함수는 어떤 기능을 한다"
"이 줄은 어떻게 하라는 의미이다" 라고요~
될 수 있으면 모든 줄을 해주시면 감사하겠습니다~
대신 내공 지대로 드릴게요~


>> clear;
>> clf;
>> FRQ_RESOL = 1000;
>> WIN_SIZE = 100;
>> TOT_SIZE = 700;
>> Fs = 8000;
>>
>> win_index = 0 : (WIN_SIZE-1);
>> tot_index = 0 : (TOT_SIZE-1);
>>
>> f = 1:FRQ_RESOL/2;
>> f = f/FRQ_RESOL*Fs;
>>
>> rect = [zeros(1, (TOT_SIZE-WIN_SIZE)/2) ones(1,WIN)_SIZE) zeros(1, (TOT_SIZE-WIN_SIZE)/2)];
>> ham = 0.54 - 0.46*cos(2*pi*win_index/ (WIN_SIZE-1));
>> ham = [zeros(1, (TOT_SIZE-WIN_SIZE)/2) ham zeros(1,(TOT_SIZE-WIN_SIZE)/2)];
>>
>> f_rect = abs(fft(rect, FRQ_RESOL));
>> f_ham = abs(fft(ham, FRQ_RESOL));
>>
>> subplot(2,2,1), plot(tot_index,rect);
>> AXIS([290 410 -0.2 1.2]);
>> title('(a) Rectangle window');
>> xlabel('sample');
>> ylabel('amplitude');
>>
>> subplot(2,2,3), plot(tot_index, ham);
>> AXIS([290 410 -0.2 1.2]);
>> title('(C) Hamming window');
>> xlabel('sample');
>> ylabel('amplitude');
>>
>> subplot(2, 2, 2), semilogy(f, f_rect(1:FRQ_RESOL/2));
>> AXIS([0 1500 10^-5 10^3]);
>> title ('(b) Freq. Resp. of Rectangle window');
>> xlable('Hz');
>> ylable('dB');
>>
>> subplot(2,2,4), semilogy(f,f_ham(1:FRQ_RESOL/2));
>> AXIS([0 1500 10^-5 10^3]);
>> title('(d) Freq. Resp. of Hamming window');
>> xlable('Hz');
>> ylabel('dB');





매틀랩으로 돌려보면 알겠지만,
시간영역의 신호와 이를 푸리에 트랜스폼한 주파수영역의 신호를 도시하는
코드로 보이네요. 그냥 아는데로 달아놨어요. 설명이 부족하다 싶은 라인은
쪽지 주세요~

clear; %% workspace 지움
clf; %% 그래프 화면 지움
FRQ_RESOL = 1000;
WIN_SIZE = 100;
TOT_SIZE = 700;
Fs = 8000;

win_index = 0 : (WIN_SIZE-1);
%% win_index 를 0부터 (WIN_SIZE-1)까지의 정수를 원소로 갖는 행렬로 정의
tot_index = 0 : (TOT_SIZE-1);
%% tot_index 를 0부터 (TOT_SIZE-1)까지의 정수를 원소로 갖는 행렬로 정의

f = 1:FRQ_RESOL/2;
%% f를 1부터 FRQ_RESOL/2 까지의 정수를 원소로 갖는 행렬로 정의
f = f/FRQ_RESOL*Fs;
%% f의 각 원소에 "/FRQ_RESOL*Fs" 연산 수행

rect = [zeros(1, (TOT_SIZE-WIN_SIZE)/2) ones(1,WIN_SIZE) zeros(1, (TOT_SIZE-WIN_SIZE)/2)];
%% rect // 1 x 700행렬이 된다
%% zeros(1, (TOT_SIZE-WIN_SIZE)/2) // 0으로 구성된 1 x (TOT_SIZE-WIN_SIZE)/2 행렬 작성
%% ones(1,WIN_SIZE) // 1로 구성된 1 x WIN_SIZE 행렬 작성

ham = 0.54 - 0.46*cos(2*pi*win_index/ (WIN_SIZE-1));
%% ham // 1 x 100 행렬
ham = [zeros(1, (TOT_SIZE-WIN_SIZE)/2) ham zeros(1,(TOT_SIZE-WIN_SIZE)/2)];
%% ham // 1 x 700 행렬
f_rect = abs(fft(rect, FRQ_RESOL));
%% fft(rect, FRQ_RESOL) // rect를 FRQ_RESOL 즉 1000 포인트 푸리에 변환(DFT : Discrete Fourier Transform)
%% abs(n) // n의 각 원소의 복소계수(sqrt(real^2 + imag^2))를 반환
f_ham = abs(fft(ham, FRQ_RESOL));

%% subplot은 한 화면에 여러개의 그래프를 그릴때 사용한다.
subplot(2,2,1) %% 2 x 2 즉 4개의 그래프중 첫 번째 그래프
plot(tot_index,rect); %% tot_index의 범위에서 rect를 도시
axis([290 410 -0.2 1.2]); %% 가로, 세로 좌표 설정
title('(a) Rectangle window'); %% 그래프 title표시
xlabel('sample'); %% x축 라벨
ylabel('amplitude'); %% y축 라벨

subplot(2,2,3) %% 2 x 2 즉 4개의 그래프중 세 번째 그래프
plot(tot_index, ham);
axis([290 410 -0.2 1.2]);
title('(C) Hamming window');
xlabel('sample');
ylabel('amplitude');

subplot(2, 2, 2) %% 2 x 2 즉 4개의 그래프중 두 번째 그래프
semilogy(f, f_rect(1:FRQ_RESOL/2));
%% semilogy는 plot과 같은 기능을 하지만, y축을 로그스케일로 표시.
axis([0 1500 10^-5 10^3]);
title ('(b) Freq. Resp. of Rectangle window');
xlabel('Hz');
ylabel('dB');

subplot(2,2,4) %% 2 x 2 즉 4개의 그래프중 네 번째 그래프
semilogy(f,f_ham(1:FRQ_RESOL/2));
axis([0 1500 10^-5 10^3]);
title('(d) Freq. Resp. of Hamming window');
xlabel('Hz');
ylabel('dB');

'Etc' 카테고리의 다른 글

HHD(Hybrid Hard Disk)에 대해서  (0) 2008.04.21
그래픽카드 DVI 단자 종류에 대한 설명  (0) 2008.03.30
LCD 패널에 관한 설명  (0) 2008.03.29
Resolution & Accuracy  (0) 2008.01.28
매트랩 강의 블로그  (0) 2008.01.23
10의 지수(Power of 10)  (0) 2008.01.20
unsigned int 음수 결과  (0) 2008.01.17
춤추는 대수사선 보는 순서  (0) 2008.01.12
시리얼 통신 - 하이퍼 터미널이용해서  (0) 2008.01.04
알FTP 사이트맵 백업  (1) 2007.12.31
Posted by Baracuda
, |