|
Лчм сигнал в Matlab |
|
|
|
Mar 10 2016, 09:46
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Создан ЛЧМ сигнал через функцию chirp Код clc; clear all; f_begin = 71000; % начальная частота 71 кГц f_end = 79000; % конечная частота 79 кГц f_dt = 19000; % частота дискретизации 19000 Гц tch_begin = 0; % начальное время 0 tch_end = 13e-3; % конечное время 13 мсек tch_dt = 1/f_dt; % время дискретизации
tch = tch_begin:tch_dt:tch_end; % время моделирования 13 мсек y = chirp(tch,f_begin,tch_end,f_end); % частота меняется от 71кГц (при t=0) до 79кГц (при t=13мсек)
fprintf(' %d\n', y); % значения y figure plot(tch*1000, y), grid; xlabel('Время (в сек)'); title('ЛЧМ сигнал'); zoom xon; Сигнал дискретизирован частотой 19 кГц Подскажите пожалуйста как в каждый шаг дискретизации определить и вывести значение y в цифровом виде? Если y > 0 выводится 1, если y < 0 выводится 0. В конечном итоге нужно последовательность единичек и ноликов превратить в Hex вид.
|
|
|
|
|
 |
Ответов
|
Mar 10 2016, 11:40
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Fat Robot @ Mar 10 2016, 13:51)  Код dec2hex( bi2de( reshape( y > 0, [], hex_size_in_bits ))) Спасибо. Смысл понятен. Преобразуем строку двоичных цифр в неотрицательное десятичное число. Затем число преобразуется в hex формат. Немного непонятно создание строки двоичных цифр Код reshape( y > 0, [], hex_size_in_bits ) Компилятор ругается типа Код Undefined function or variable 'hex_size_in_bits'.
|
|
|
|
|
Mar 10 2016, 11:52
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691

|
Плохой компилятор. Никуда не годный. Нужно определить, сколько бит у вас будет содержаться в одном выводимом hex-значении. И прочитать help для функции reshape Цитата(Acvarif @ Mar 10 2016, 15:40)  Компилятор ругается типа Код Undefined function or variable 'hex_size_in_bits'.
|
|
|
|
|
Mar 10 2016, 12:03
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Fat Robot @ Mar 10 2016, 14:52)  Плохой компилятор. Никуда не годный. Нужно определить, сколько бит у вас будет содержаться в одном выводимом hex-значении. И прочитать help функции reshape Понял. 4 бита Код y_hex = dec2hex( bi2de( reshape( y > 0, [], 4 ))) Все работает. Еще один нюанс. С какого конца идут старшие биты? Судя по тому как работает bi2de получается что функция работает начиная с младших бит. Тоесть Код bi2de([0 0 0 0 0 1]); это в десятичном виде 20, а Код bi2de([1 0 0 0 0]) это 1;
Сообщение отредактировал Acvarif - Mar 10 2016, 12:04
|
|
|
|
|
Mar 10 2016, 12:13
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Fat Robot @ Mar 10 2016, 15:06)  Спасибо. Все получилось. Если не сложно, подскажите пожалуйста еще один момент. Попытка вывести данные в HEX виде Код y_hex = dec2hex(bi2de([0 0 0 0 0 1])); formatSpec = ' %x'; fprintf(formatSpec, y_hex); дает строку типа 32 30, тоесть в hex виде 20 (dec 32) Функция dec2hex какраз и сохраняет данные в строку str = dec2hex(d) converts the decimal integer d to its hexadecimal representation stored in a MATLAB® string. d must be a nonnegative integer Как можно эту строку преобразовать в int? Вместо 32 30 - вывести 20.
Сообщение отредактировал Acvarif - Mar 10 2016, 12:57
|
|
|
|
|
Mar 10 2016, 13:03
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691

|
Тогда dec2hex не нужна Или выводите строкой, указав формат %s Успехов Цитата(Acvarif @ Mar 10 2016, 16:13) 
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|