Buratino 0 10 сентября, 2014 Опубликовано 10 сентября, 2014 · Жалоба Есть .dat файл с двоичными 16разрядными данными вида: 00001111000011110000 11110000111100001111 и т.д всего 65535 строк каким способом этот файл можно считать в матрицу 65535x1 с тем условием, чтобы данные имели уже десятичный формат, а не двоичный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
valeros 0 10 сентября, 2014 Опубликовано 10 сентября, 2014 · Жалоба Пользуйтесь: fopen() и binaryVectorToDecimal() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 10 сентября, 2014 Опубликовано 10 сентября, 2014 · Жалоба Пользуйтесь: fopen() и binaryVectorToDecimal() Не подскажите ли, какая у вас версия MATLAB? А то в моем функцию binaryVectorToDecimal() отыскать не удалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Buratino 0 10 сентября, 2014 Опубликовано 10 сентября, 2014 · Жалоба Пользуйтесь: fopen() и binaryVectorToDecimal() я попробовал использовать scantext A = scantext(fid, '%16u16',1) таким способом получилось вывести первое число когда я попробовал поменять последний параметр функции scantext и написал так A = scantext(fid, '%16u16', -1), где -1 - чтение всего файла, в воркспэйсе получил A = [65535x1 uint16] :( а с функцией bi2de не совсем ясно как читать строки последовательно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 10 сентября, 2014 Опубликовано 10 сентября, 2014 · Жалоба открываем файл fopen дальше в цикле, пока файл не закончится while feof() ~= ... fscanf bin2dec - предполагаем, что msb - самый левый в строке end закрываем файл fclose binaryVectorToDecimal() - такой функции в стандартном наборе матлаба нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 10 сентября, 2014 Опубликовано 10 сентября, 2014 (изменено) · Жалоба Не подскажите ли, какая у вас версия MATLAB? А то в моем функцию binaryVectorToDecimal() отыскать не удалось. Не помню, начиная с какой версии появилась. У меня последняя на сегодняшний день - 2014a. Функция не является стандатной, нужно устанавливать Data Acquisition Toolbox. Изменено 10 сентября, 2014 пользователем Grizzzly Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexeyW 0 10 сентября, 2014 Опубликовано 10 сентября, 2014 · Жалоба Как вариант, можно написать простейшую програмку в VB и сконвертировать файл. Там, помнится, есть требуемые функции преобразования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
valeros 0 11 сентября, 2014 Опубликовано 11 сентября, 2014 · Жалоба В 2014а есть стандартная bi2de () Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asoharev 0 16 октября, 2014 Опубликовано 16 октября, 2014 · Жалоба В 2014а есть стандартная bi2de () на самом деле она не совсем стандартная -- в "голом" матлабе ее нет. Она входит в Communications System Toolbox. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
semperante 0 16 октября, 2014 Опубликовано 16 октября, 2014 · Жалоба Использую самописную функцию для открытия текстовых файлов, имеющих похожую структуру: 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться