Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: чтение данных из файла в Matlab
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Buratino
Есть .dat файл с двоичными 16разрядными данными вида:

00001111000011110000
11110000111100001111
и т.д


всего 65535 строк

каким способом этот файл можно считать в матрицу 65535x1 с тем условием, чтобы данные имели уже десятичный формат, а не двоичный?
valeros
Пользуйтесь: fopen() и binaryVectorToDecimal()
Xenia
Цитата(valeros @ Sep 10 2014, 16:54) *
Пользуйтесь: fopen() и binaryVectorToDecimal()


Не подскажите ли, какая у вас версия MATLAB? А то в моем функцию binaryVectorToDecimal() отыскать не удалось.
Buratino
Цитата(valeros @ Sep 10 2014, 15:54) *
Пользуйтесь: fopen() и binaryVectorToDecimal()

я попробовал использовать scantext
A = scantext(fid, '%16u16',1) таким способом получилось вывести первое число
когда я попробовал поменять последний параметр функции scantext и написал так
A = scantext(fid, '%16u16', -1), где -1 - чтение всего файла, в воркспэйсе получил A = [65535x1 uint16] sad.gif
а с функцией bi2de не совсем ясно как читать строки последовательно
Fat Robot
открываем файл
fopen

дальше в цикле, пока файл не закончится
while feof() ~= ...
fscanf
bin2dec - предполагаем, что msb - самый левый в строке
end

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

binaryVectorToDecimal() - такой функции в стандартном наборе матлаба нет.
Grizzzly
Цитата(Xenia @ Sep 10 2014, 17:09) *
Не подскажите ли, какая у вас версия MATLAB? А то в моем функцию binaryVectorToDecimal() отыскать не удалось.

Не помню, начиная с какой версии появилась. У меня последняя на сегодняшний день - 2014a. Функция не является стандатной, нужно устанавливать Data Acquisition Toolbox.
AlexeyW
Как вариант, можно написать простейшую програмку в VB и сконвертировать файл. Там, помнится, есть требуемые функции преобразования.
valeros
В 2014а есть стандартная bi2de ()
asoharev
Цитата(valeros @ Sep 12 2014, 00:09) *
В 2014а есть стандартная bi2de ()


на самом деле она не совсем стандартная -- в "голом" матлабе ее нет. Она входит в Communications System Toolbox.
SemperAnte
Использую самописную функцию для открытия текстовых файлов, имеющих похожую структуру:

Код
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);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.