реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> чтение данных из файла в Matlab, построковое чтение данных из файла
Buratino
сообщение Sep 10 2014, 12:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 24-11-11
Из: Город-герой Минск
Пользователь №: 68 491



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

00001111000011110000
11110000111100001111
и т.д


всего 65535 строк

каким способом этот файл можно считать в матрицу 65535x1 с тем условием, чтобы данные имели уже десятичный формат, а не двоичный?
Go to the top of the page
 
+Quote Post
valeros
сообщение Sep 10 2014, 12:54
Сообщение #2





Группа: Участник
Сообщений: 11
Регистрация: 4-12-11
Из: Киев
Пользователь №: 68 670



Пользуйтесь: fopen() и binaryVectorToDecimal()
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 10 2014, 13:09
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(valeros @ Sep 10 2014, 16:54) *
Пользуйтесь: fopen() и binaryVectorToDecimal()


Не подскажите ли, какая у вас версия MATLAB? А то в моем функцию binaryVectorToDecimal() отыскать не удалось.
Go to the top of the page
 
+Quote Post
Buratino
сообщение Sep 10 2014, 13:42
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 24-11-11
Из: Город-герой Минск
Пользователь №: 68 491



Цитата(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 не совсем ясно как читать строки последовательно
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Sep 10 2014, 14:28
Сообщение #5


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



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

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

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

binaryVectorToDecimal() - такой функции в стандартном наборе матлаба нет.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Sep 10 2014, 16:00
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



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

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

Сообщение отредактировал Grizzzly - Sep 10 2014, 16:01
Go to the top of the page
 
+Quote Post
AlexeyW
сообщение Sep 10 2014, 18:06
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 988
Регистрация: 3-11-10
Пользователь №: 60 636



Как вариант, можно написать простейшую програмку в VB и сконвертировать файл. Там, помнится, есть требуемые функции преобразования.
Go to the top of the page
 
+Quote Post
valeros
сообщение Sep 11 2014, 20:09
Сообщение #8





Группа: Участник
Сообщений: 11
Регистрация: 4-12-11
Из: Киев
Пользователь №: 68 670



В 2014а есть стандартная bi2de ()
Go to the top of the page
 
+Quote Post
asoharev
сообщение Oct 16 2014, 14:51
Сообщение #9





Группа: Участник
Сообщений: 10
Регистрация: 5-12-12
Пользователь №: 74 720



Цитата(valeros @ Sep 12 2014, 00:09) *
В 2014а есть стандартная bi2de ()


на самом деле она не совсем стандартная -- в "голом" матлабе ее нет. Она входит в Communications System Toolbox.
Go to the top of the page
 
+Quote Post
SemperAnte
сообщение Oct 16 2014, 19:22
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 89
Регистрация: 24-10-10
Из: Санкт-Петербург
Пользователь №: 60 386



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

Код
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);
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 10:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016