Перейти к содержанию
    

чтение данных из файла в Matlab

Есть .dat файл с двоичными 16разрядными данными вида:

 

00001111000011110000

11110000111100001111

и т.д

 

всего 65535 строк

 

каким способом этот файл можно считать в матрицу 65535x1 с тем условием, чтобы данные имели уже десятичный формат, а не двоичный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пользуйтесь: fopen() и binaryVectorToDecimal()

 

Не подскажите ли, какая у вас версия MATLAB? А то в моем функцию binaryVectorToDecimal() отыскать не удалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пользуйтесь: fopen() и binaryVectorToDecimal()

я попробовал использовать scantext

A = scantext(fid, '%16u16',1) таким способом получилось вывести первое число

когда я попробовал поменять последний параметр функции scantext и написал так

A = scantext(fid, '%16u16', -1), где -1 - чтение всего файла, в воркспэйсе получил A = [65535x1 uint16] :(

а с функцией bi2de не совсем ясно как читать строки последовательно

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

открываем файл

fopen

 

дальше в цикле, пока файл не закончится

while feof() ~= ...

fscanf

bin2dec - предполагаем, что msb - самый левый в строке

end

 

закрываем файл

fclose

 

binaryVectorToDecimal() - такой функции в стандартном наборе матлаба нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не подскажите ли, какая у вас версия MATLAB? А то в моем функцию binaryVectorToDecimal() отыскать не удалось.

Не помню, начиная с какой версии появилась. У меня последняя на сегодняшний день - 2014a. Функция не является стандатной, нужно устанавливать Data Acquisition Toolbox.

Изменено пользователем Grizzzly

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вариант, можно написать простейшую програмку в VB и сконвертировать файл. Там, помнится, есть требуемые функции преобразования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 2014а есть стандартная bi2de ()

 

на самом деле она не совсем стандартная -- в "голом" матлабе ее нет. Она входит в Communications System Toolbox.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую самописную функцию для открытия текстовых файлов, имеющих похожую структуру:

 

function data = tb_file_read(file_name, data_sign, data_frac)
% tb_file_read(file_name, data_sign, data_frac)
% считывание данных из файла типа std_logic_vector с заданными параметрами
%
% file_name     - имя файла
% data_sign     - '1' signed, '0' unsigned
% data_frac     - длина дробной части слова

data    = [];
fileID  = fopen(file_name, 'r');
N = 1;

% считываем файл построчно до конца
while ~feof(fileID)
    % считываем строку
    str = fgetl(fileID);
    
    % проверка - если строка содержит только цифры
    if (all(isstrprop(str, 'digit')) == 1)
        
        % если число в знаковом формате
        if (data_sign == 1)
            % проверка положит. или отрицат. число
            if( str(1) == '0')
                data(N) = bin2dec(str(2:end))/(2^data_frac);
            else
                data(N) = (bin2dec(str(2:end)) - 2^(length(str)-1))/(2^data_frac);
            end;
        else
            data(N) = bin2dec(str)/(2^data_frac);
        end;
        
    % если строка содержит буквы
    else
        data(N) = NaN;
    end;
    N = N + 1;
end;
fclose(fileID);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...