Как я могу улучшить этот код, чтобы импортировать сигнал осциллографа из CSV в Matlab

Эта функция Matlab, которую я создал, в основном берет CSV-файл, сгенерированный осциллографами Tektronix, и отображает сигналы для двух каналов. Однако каждый созданный файл теста и csv имеет разное количество точек (в данном случае это 9999, что означает [B16:B10014]) и другое имя рабочего листа в excel (tek0001ALL). Я новичок в Matlab, и это может быть не самый эффективный способ сделать это, поэтому мне было интересно, может ли быть более простой способ иметь общий код, который мог бы построить любой сгенерированный csv, который может обнаружить последнюю заполненную ячейку эти столбцы и количество ячеек, так что это также может быть количество точек, поскольку иногда требуется выполнить много тестов.

function [ Vs1, Vs2, t ] = scope![enter image description here][1]( filename )

% Read the Y axis data of the scope data in volts CH1
Vs1 = xlsread(filename, 'tek0001ALL', 'B16:B10014');
% Read the Y axis data of the scope data in volts CH2
Vs2 = xlsread(filename, 'tek0001ALL', 'C16:C10014');
% Read the sample interval from the scope data in seconds
sample_interval = xlsread(filename, 'tek0001ALL', 'B7');
% Create time axis
t = 0:sample_interval:(9999*sample_interval)-sample_interval;

%Plot waveform
figure
subplot(2,1,1);
plot(t,Vs1);
title('Sensor Input Measurements for 100pc Discharge ');
xlabel('Time[s]');
ylabel('Voltage[V]');
grid on;
grid minor;

subplot(2,1,2);
plot(t,Vs2);
title('Sensor Output Measurements for 100pc Discharge');
xlabel('Time[s]');
ylabel('Voltage[V]');
grid on;
grid minor;

end

Пример формата файла CSV:

Model,DPO3034
Firmware Version,1.08

Point Format,Y,
Horizontal Units,S,
Horizontal Scale,8e-07,
Sample Interval,8e-10,
Record Length,10000,
Gating,0.0% to 99.9900%,0.0% to 99.9900%
Probe Attenuation,1,1
Vertical Units,V,V
Vertical Offset,0,0
Vertical Scale,0.05,0.001
Label,,
TIME,CH1,CH2
-1.4664e-06,-0.003,-0.00036
-1.4656e-06,-0.003,-0.00036
-1.4648e-06,-0.003,-0.00036
-1.4640e-06,-0.001,-0.00032
-1.4632e-06,-0.003,-0.00036
-1.4624e-06,-0.001,-0.00036
-1.4616e-06,-0.001,-0.0004
-1.4608e-06,-0.003,-0.00036

person Juliana    schedule 21.07.2015    source источник


Ответы (1)


Если вы оставите данные в файле CSV, вы можете использовать csvread, что упрощает эту задачу.

function [ Vs1, Vs2, t ] = scope( filename )

%Read csv with 15 header rows
data = csvread(filename, 15);

t = data(:,1);
Vs1 = data(:,2);
Vs2 = data(:,3);

%Plot waveform
figure
    subplot(2,1,1);
        plot(t,Vs1);
        title('Sensor Input Measurements for 100pc Discharge ');
        xlabel('Time[s]');
        ylabel('Voltage[V]');
        grid on;
        grid minor;

    subplot(2,1,2);
        plot(t,Vs2);
        title('Sensor Output Measurements for 100pc Discharge');
        xlabel('Time[s]');
        ylabel('Voltage[V]');
        grid on;
        grid minor;

end
person user1543042    schedule 21.07.2015