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

 
 
> Преобразование данных в Матлаб, Преобразование
Muscat
сообщение Feb 16 2011, 19:09
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Задумался вот над каким вопросом, как более менее изящно решить следующую задачу.

Из 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
не предлагать.


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
alex_os
сообщение Feb 16 2011, 19:31
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Цитата(Muscat @ Feb 16 2011, 22:09) *
с циклом
for i=1:24
data_3(i)=bin2dec(BitStream(i));
end
не предлагать.


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

data_3 = bin2dec(BitStream')';


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
Muscat
сообщение Feb 16 2011, 19:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Спасибо! И в правду работает без цикла. Но только "идеология" все равно такая же получается, после транспонирования строки поочередный перебор строчек.
Хотелось бы как то ускорить этот процесс. Подозреваю, что есть какой то более простой и быстрый способ, нежели выдуманный мной


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
alexunder
сообщение Feb 17 2011, 08:52
Сообщение #4


unexpected token
****

Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



Цитата(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


--------------------
А у тебя SQUID, и значит, мы умрем.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 16:16
Рейтинг@Mail.ru


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