С неясной для меня пилообразностью разобрался - оказалось, что синус с частотой 70МГц оцифровывается с частотой 90МГц, и нужно бы полученные точки соединять кривыми Безье, чтобы получить более осмысленную картинку.
Зато с БПФ внезапно возникли какие-то заминки: в основном, я не совсем понимаю как это реализуется конкретно в , и мне неясно, зачем такое море инструментов только для одного лишь БПФ, хотя я понимаю, что они не только для него. Соответственно, непонятно пока, какой путь самый простой для реализации БПФ.
Вот я получил отсчеты с 16-разрядного АЦП, вот у меня есть слова 16-разрядные, в которых хранятся значения со знаком. И вот (рис.2) я пытаюсь сигнал обработать с помощью БПФ: сигнал - это синус с частотой 102 МГц, уровень = -50dB.
И вот (рис.1) - я получаю графики, которые почти не могу интерпретировать: пики есть, вот только ось Х весьма слабо соответствует частотам, точнее, вообще не соответствует. И высота пиков тоже не та, должна быть порядка 1200 (опять в отсчетах).
Страшно туплю, прошу совета, если возможно.
Разработка sdr-драйвера LabVIEW
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Разработка sdr-драйвера LabVIEW
Проверяйте количество принятых отсчетов. Если размер отправленных и принятых данных корректен - то ломаный синус можете интерполировать сплайнами например. Тут есть хорошая статья и пример реализации интерполяции от одного из наших коллег по форуму: http://habrahabr.ru/post/234895/ .Mad_Ahab писал(а): у меня синус несколько ломаный, частоты дискретизации не хватает, для того чтобы отобразить данные плавно - чего-то я пока не догоняю, это же такие данные приходят? Я
Смотрите картинку ниже. Программу прикрепил. Вдогонку почитайте вот тут http://www.ni.com/white-paper/4541/en/. Верное дело пишут)Соответственно, непонятно пока, какой путь самый простой для реализации БПФ.
Вот я получил отсчеты с 16-разрядного АЦП, вот у меня есть слова 16-разрядные, в которых хранятся значения со знаком. И вот (рис.2) я пытаюсь сигнал обработать с помощью БПФ: сигнал - это синус с частотой 102 МГц, уровень = -50dB.
- Вложения
-
- Spectrum.vi
- (17.54 КБ) 176 скачиваний
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
- Mad_Ahab
- junior
- Сообщения: 66
- Зарегистрирован: 12 янв 2015, 16:33
- Версия LabVIEW: 2013
- Контактная информация:
Re: Разработка sdr-драйвера LabVIEW
Спасибо за ответ, стало понятнее, я разобрался с Вашим , но теперь мне надо как-то систематизировать свои данные, чтобы больше не тыкаться вслепую в различные приборы из палитры для обработки сигналов в .
Итак, у меня есть:
Настройки для Spectral Measurements Express VI:
Итак, у меня есть:
- точное число точек, пришедших с АЦП: 65536, или #s
центральная частота сигнала - то есть, частота синусоиды, генератор сигнала подключен ко входу приемника: 100 МГц
ширина полосы пропускания: 10 МГц
приемник в данный момент настроен на 200 МГц (с помощью команд из DLL)
уровень сигнала: -50 dB
частота дискретизации: 90 МГц, или Fs
Настройки для Spectral Measurements Express VI:
- Mad_Ahab
- junior
- Сообщения: 66
- Зарегистрирован: 12 янв 2015, 16:33
- Версия LabVIEW: 2013
- Контактная информация:
Re: Разработка sdr-драйвера LabVIEW
Здравствуйте, с праздниками :ru:
С вашей помощью (огромное спасибо ) добился приемлемого функционала в прототипе. Теперь захотел переписать программу как положено, с очередями, нотифаерами, обработкой сообщений и данных в разных потоках и прочим.
Соответственно - вопрос: как можно добавлять в очередь элементы переменного размера? То есть, я хочу собирать очередь входящих сообщений для вывода на консоль, они бывают разной длины, как их добавлять в очередь? Точнее, чем нужно инициализировать очередь? Пустой текстовой строкой?
С вашей помощью (огромное спасибо ) добился приемлемого функционала в прототипе. Теперь захотел переписать программу как положено, с очередями, нотифаерами, обработкой сообщений и данных в разных потоках и прочим.
Соответственно - вопрос: как можно добавлять в очередь элементы переменного размера? То есть, я хочу собирать очередь входящих сообщений для вывода на консоль, они бывают разной длины, как их добавлять в очередь? Точнее, чем нужно инициализировать очередь? Пустой текстовой строкой?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 5 Ответы
- 430 Просмотры
-
Последнее сообщение Artem.spb
-
- 0 Ответы
- 1891 Просмотры
-
Последнее сообщение Anastasia
-
- 3 Ответы
- 2062 Просмотры
-
Последнее сообщение PozhiloyGoblin
-
- 0 Ответы
- 341 Просмотры
-
Последнее сообщение maxim_MA
-
- 23 Ответы
- 2378 Просмотры
-
Последнее сообщение dadreamer