Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Преобразование данных в Матлаб
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
Muscat
Задумался вот над каким вопросом, как более менее изящно решить следующую задачу.

Из COM2-порта читаются байты по 6 бит.
RCVD=fread(s,4);
Для простоты рассмотрена последовательность из 4 байт.

Предположим, что получено
Rcvd=[65,47,23,10]

Далее можно увидеть данные в бинарном виде

Bin_Mat=dec2bin(Rcvd);

111111
101111
010111
001010

Затем эти биты выстраиваются в одну строчку
BitStream=reshape(Bin_Mat',1,24)

BitStream =

111111101111010111001010

В результате получается строка, где единички и нолики представлены символами. Задача, каждый этот символ преобразовать в число. Чтобы в результате получилась матрицы чисел - единиц и нулей. Как это сделать? Вариант с циклом
for i=1:24
data_3(i)=bin2dec(BitStream(i));
end
не предлагать.
alex_os
Цитата(Muscat @ Feb 16 2011, 22:09) *
с циклом
for i=1:24
data_3(i)=bin2dec(BitStream(i));
end
не предлагать.


Вариант без цикла sm.gif

data_3 = bin2dec(BitStream')';
Muscat
Спасибо! И в правду работает без цикла. Но только "идеология" все равно такая же получается, после транспонирования строки поочередный перебор строчек.
Хотелось бы как то ускорить этот процесс. Подозреваю, что есть какой то более простой и быстрый способ, нежели выдуманный мной
alexunder
Цитата(Muscat @ Feb 16 2011, 22:47) *
Спасибо! И в правду работает без цикла. Но только "идеология" все равно такая же получается, после транспонирования строки поочередный перебор строчек.
Хотелось бы как то ускорить этот процесс. Подозреваю, что есть какой то более простой и быстрый способ, нежели выдуманный мной


Боюсь, без цикла вам не обойтись, но код упростить можно, используя функцию bitget(), т.к. удастся избежать конвертирования в строку и обратно:

Код
Rcvd=[65,47,23,10];

>> data_ = bitget(Rcvd(1),1:8)

data_ =

     1     0     0     0     0     0     1     0

>> size(data_)

ans =

     1     8


на выходе для каждого байта будете иметь массив его битов. Но bitget() не работает с матрицей, то есть придется создавать цикл по элементам Rcvd
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.