사실 매트랩에는 "데이터가져오기"라는 기능이 내장되어 있고 여기서 함수를 생성하면 굳이 귀찮게 함수를 쓰고 배울 필요가 없긴하다
(위의 글을 읽었음에도 뒤로가지 않은 독자들을 위해 csvread() 함수에 대해 아는대로 설명하겠습다)
일단 오실로스코프와 프로브를 통해 전류와 전압을 측정하면, 대부분의 오실로스코프에서는 그 측정값을 CSV 파일로 저장할 수가 있다.
CSV 파일이란 Comma-Separated Values의 약자로 쉼표로 구분되어있는 저장형식으로 열어보면 쉼표만 나와있기에 닉값을 하는구나라는 것을 알 수 있다.
오실로스코프에서 저장한 CSV파일을 MATLAB으로 불러오는 많은 방법 중 하나가 csvread( ) 함수이다. (사실 다른 방법은 모른다)
나는 매트랩을 사용할 때 제일 싫은게 파일이름을 쓰는 건데 자꾸 파일이 없다고 오류가 나기 때문이다. 그래서 처음 input함수로 CSV라는 변수에 string으로 파일이름을 입력받는다.
CSV = input("CSV 데이터 파일명을 쓰세요 (Typing your csv data file name) \n : ", 's')
csvread 함수를 이용해 변수 csv_data에 csv 파일의 정보를 변수에 넣어준다.
csv_data = csvread(CSV, 20, 0, [20, 0, 5000, 3])
함수의 의미를 보면 20행 1열부터, 5000행 4열까지를 csv_data에 저장을 하라는 의미이다. 왜 1행부터 쓰지 않고 30행부터 쓰는가? 그 이유는 csv 파일의 원본을 보면 알 수 있는데 파일의 head라고 해서 측정기기나 설정에 대한 정보가 앞부분에 적혀있기 때문이다. (이게 자꾸 버그를 일으켜서 빡치게 만든다. 따라서 계산하기 전에 없애주는게 정신건강에 이롭다) head 데이터를 지우고 숫자데이터만 얻기위해 20행부터 얻는 것이다. 그리고 이 함수의 주의해야할 점이 1열부터 시작이 아니라 0열부터 시작한다는 점이다. 그래서 0열부터 시작하도록 해야함.
csv_data에서 이제 각각의 정보들을 분리해줘야하는데, 전류전압을 측정한 데이터라서 나는 시간정보, 전압정보, 전류정보만을 분리해낼 것이다. 원본데이터가 들어있는 변수 csv_data에서 각 열에 해당하는 정보들을 분리해 다른 변수에 저장을 해준다. 나같은 경우에는 시간은 T , 전압은 V, 전류는 I라는 변수를 이용한다. 변수는 누구나 알아보기 쉽게 해야 나중에 내가 쓴 변수를 내가 까먹어버리는 대참사를 방지할 수 있다. 아니면 %로 주석을 달아 변수에 대해서 설명해주면 좋다.
T = csv_data( : , 1) ; % 1열의 데이터가 시간정보를 담고 있기 때문에 1열의 모든 데이터를 불러오는 : 를 이용해서 csv_data의 1열 모든 정보를 T에 저장했다.
V = csv_data( : , 2) ;
I = csv_data ( : , 4);
전체코드는 아래와 같다.
CSV = input('CSV 데이터 파일명을 쓰시오 \n : ','s');
% csvread 함수로 20행 1열부터, 5000행 4열까지 CSV 파일에서 데이터를 A에 저장
csv_data = csvread(CSV,20,0,[20,0,5000,3]);
T = csv_data(:,1); % T에는 시간 데이터를 저장, 시간은 1번 열에 있으므로 행전체와 1번 열을 불러온다
V= csv_data(:,2); % V에는 전압 데이터를 저장
I= csv_data(:,4); % I에는 전류 데이터를 저장
[MATLAB] 전압 한주기를 찾아내는 코드개발 (0) | 2020.08.25 |
---|---|
[MATLAB] ginput함수로 한주기의 전류전압 데이터를 가져오기 (1) | 2020.08.25 |