Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 8
1

Преобразование сигнала

10.04.2016, 23:13. Просмотров 821. Ответов 12
Метки нет (Все метки)

Добрый день. Стоит задача написания программы на cpp преобразования сигнала из действ. int 16 в комплекс. float 32.
Немного поразмыслив понял,что необходимо выполнить 3 основных этапа:
1) Получение из дейст int 16 комплес int 16 (Преобразование Гильберта ?)
2)Преобразование комплекс int 16 в комплекс int 32 (????)
3)Преобразование комплекс int 32 в комплекс float 32 (стандартное преобразование типов static_cast в сpp ?)
Хотелось бы услышать ваши комментарии по каждому пункту(правильно ли я мыслю и как лучше реализовать данный пункт). Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2016, 23:13
Ответы с готовыми решениями:

Преобразование Фурье необычного сигнала
Приветствую всех! Есть дискретный сигнал (зависимость от времени) который в каждый момент времени...

Выделить огибающую сигнала через преобразование Гильберта
Программа вычисляет спектр сигнала по алгоритму Герцеля и в итоге мы имеем массив Ampl, где i-...

Как определить частоту сигнала, Дискретное преобразование Фурье
Добрый! Вопрос ламерский, делаю первые шаги в теме, прошу проявить терпение. Суть: На входе...

Извлечение сигнала заданной частоты из более сложного сигнала
Нужен совет. Предположим, у меня есть некий сложный сигнал. Я знаю, что в него входит синусоида,...

12
Эксперт С++
2137 / 1568 / 239
Регистрация: 29.05.2011
Сообщений: 3,261
10.04.2016, 23:31 2
Второй пункт непонятно зачем. static_cast<float>() прекрасно справится и с int16_t, и с другими целочисленными типами.
Преобразование Гильберта вместе с исходным сигналом даст комплексный аналитический сигнал. Обычно его ещё переносят на нулевую частоту, получая квадратурные компоненты, но если нужен именно ВЧ-сигнал, тогда перенос не нужен. ПГ проще, наверное, с float делать, хотя можно и с int16_t.
0
75 / 75 / 8
Регистрация: 24.09.2015
Сообщений: 342
11.04.2016, 11:07 3
Gaila, если процессор позволяет, то лучше сразу все считать во float, иначе придется внимательно следить за переполнением в операциях умножения и сложения.

Преобразование Гильберта обычно делается одним из трех способов. Лучше сперва поэксперементировать в MatLab.

1. Через БПФ (так делает Matlab, наиболее точный способ)
2. Через фильтр Гильберта (КИХ или БИХ). БИХ фильтр можно использовать, если сигнал узкополосный. Следует учесть, что в фазной и квадратурной составляющей не должно быть постоянной составляющей, т.е. перед фильтром Гильберта нужен полосовой фильтр (для коэффециентов можно использовать утилиту fdatool в MatLab, либо аналитические формулы + окна)
3. Умножение на синусойду и косинусойду (перенос частоты, но можно сделать перенос и на туже самую частоту) + низкочастотный фильтр

Можно и другими способами получить квадратурный сигнал:
1. Сделать два комбинированных фильтра частотный и Гильберта одновременно - это способ не эффективен
2. Сделать перенос частоты на АЦП. Например, если сигнал узкополосный с несущей 160 МГц, а выборки АЦП делать на частоте 120 МГц, происходит эффект переноса частоты на 160 - 120 = 40 МГц как при умножение на сигналы синуса и косинуса.

Добавлено через 1 минуту
Рекомендую книжку Р Лайонс Цифровая обработка сигналов 2006

Добавлено через 30 минут
Gaila, что у вас за сигнал? Какие частоты сигнала, какая частота выборок, выборка ограниченна во времени или выборка идет непрерывно?
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 8
11.04.2016, 19:58  [ТС] 4
Papayaved,Сигнал произвольный,задается пользователем,из себя представляет массив отсчетов сигнала. Ограничений на процессор нет.
Хотелось бы узнать,какой из предложенных вами способов наиболее эффективен/прост в реализации.Спасибо.
0
75 / 75 / 8
Регистрация: 24.09.2015
Сообщений: 342
11.04.2016, 21:53 5
Gaila, делайте через Фурье преобразование если это не реалтайм
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 8
12.04.2016, 21:06  [ТС] 6
Papayaved, В книге Лайонс Цифровая обработка сигналов на стр 375 упоминается, что для реализации ПГ на основе БПФ входная последовательность должна быть четной длины N.Как быть,если последовательность не четна?
0
4 / 4 / 0
Регистрация: 29.12.2015
Сообщений: 49
12.04.2016, 22:17 7
Цитата Сообщение от Gaila Посмотреть сообщение
Как быть,если последовательность не четна?
Добавьте к последовательности одну нулевую выборку. Так всегда делают, например если реализация БПФ требует 2^N выборок.
Т.е. если у тебя 2000 выборок сигнала, а БПФ требует 2048, - тупо добавляешь 48 0-значений к входному вектору.
0
75 / 75 / 8
Регистрация: 24.09.2015
Сообщений: 342
13.04.2016, 09:17 8
Gaila, там речь о КИХ фильтре и их групповой задержке, потому что фильтр формирует только квадратурную часть (мнимую) и ее надо совместить с исходным сигналом. Да фильтры проще делать нечетной длины. При использование Фурье преобразования подобной проблемы не возникает, обратное преобразование Фурье даст комплексный сигнал

Нужна следующая глава - Преобразование Гильберта в частотной области

Для Фурье на Cpp видемо понадобиться библиотека FFTW http://www.fftw.org/install/windows.html MatLab тоже использует эту открытую библиотеку

Добавлено через 9 часов 20 минут
Gaila, плохо прочел - написано про четную длину. Думаю надо добавить нулей, а востановив обратно сигнал обрезать его

Добавлено через 4 минуты
В случае фильтра Гильберта, он обычно много короче сигнала с которым он работает - но и ошибку вносит
0
14 / 14 / 2
Регистрация: 23.10.2012
Сообщений: 41
13.04.2016, 09:56 9
Делать обработку в частотной области (через FFT) есть смысл, если ИХ достаточно большой длины (более 1000 отсчетов), в противном случае достаточно качественное ПГ проще реализовать во временном домене, используя КИХ структуру, т.е. через классическую свертку
0
4 / 4 / 0
Регистрация: 29.12.2015
Сообщений: 49
13.04.2016, 18:58 10
Цитата Сообщение от dsplamer Посмотреть сообщение
достаточно качественное ПГ проще реализовать во временном домене, используя КИХ структуру, т.е. через классическую свертку
А не получишь на КИХ "качественное ПГ" ... Только два всепропускающих БИХ!!!
0
14 / 14 / 2
Регистрация: 23.10.2012
Сообщений: 41
13.04.2016, 20:54 11
А не получишь на КИХ "качественное ПГ" ... Только два всепропускающих БИХ!!!
Во-первых, почему и, во-вторых, как вы собираетесь сохранить линейность фазы во всей полосе входного сигнала при использовании БИХ?
0
4 / 4 / 0
Регистрация: 29.12.2015
Сообщений: 49
14.04.2016, 09:01 12
КИХ конечно линейность фазы сохраняет, а с амплитудой плохо совсем, особенно на НЧ. Так что если надо получить SSB - то лучше всего пара всепропускающих БИХ. Они по крайней мере держат 90 градусов +-0.7 градусов почти от 0 Гц и с амплитудой всё в порядке - ибо всепропускающие!
0
14 / 14 / 2
Регистрация: 23.10.2012
Сообщений: 41
14.04.2016, 09:43 13
Ну вот вы сами и ответили на свой вопрос, что кроме как на SSB эту конструкцию на БИХ и не применишь, а что делать с остальными модами, в первую очередь цифровыми, где линейность фазы основной критерий. А с неравномерностью амплитуды в КИХ тоже все в порядке, правда порядок фильтра при этом будет за сотню тапов, но не вижу в этом большой проблемы. Крутизна фильтра на краях полосы пропускания будет меньше 5%, меньше делать и не надо, ибо ваш входной сигнал уже был многократно ограничен по полосе другими каскадами приемника еще до преобразования Гильберта.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2016, 09:43

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

Преобразование звукового сигнала в спектр (Фурье-преобразование)
Доброго времени суток! Мне необходимо преобразовать звуковой файл в спектр, а как и с чего начать...

Преобразование аналогового сигнала
Добрый день. Хочу заменить штатный датчик уровня топлива на ёмкостной. Схема подключения штатного...

Преобразование сигнала датчика уровня
Проблема простая, но додуматься как решить не получается. Построил схему, в конце которой...

Преобразование моно-сигнала в стерео
Здравствуйте, помогите пожалуйста объяснением. Как правильно записывается из моно стерео? Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.