программный перенос спектра

Feofan
Сообщения: 19
Зарегистрирован: 20 фев 2017, 22:51
Откуда: Москва

программный перенос спектра

Сообщение Feofan »

Доброго времени суток!
Возникла задача реализовать программный сдвиг спектра сигнала на определенную частоту. Сигнал у меня квадратурный, снесенный на нулевую ПЧ, частота дискретизации известна. В теории данная задача решается домножением сигнала на комплексную экспоненту с необходимой частотой сдвига в аргументе, однако на практике возникли проблемы. Как попытался сделать я: очередную пару квадратурных отсчетов я домножаю на комплексную экспоненту, представленную в тригонометрическом виде, с учетом частоты дискретизации входного сигнала и желаемого частотного сдвига. На прикрепленной картинке (картинка 1) представлен кусок кода, выполняющий вышеописанные действия. Здесь: temp_32f_re и temp_32f_im массивы с квадратурными и синфазными отсчетами входного сигнала, time - целочисленный счетчик времени, in_sample_rate - частота дискретизации входного сигнала. Для данного случая сдвиг спектра осуществляется на 100 кГц вправо. В результате получается сигнал, спектр которого (картинка 2) вообще никак не похож на спектр начального сигнала (картинка 3). Что я делаю не так?
Вложения
картинка 1.JPG
картинка 2.JPG
картинка 3.JPG

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: программный перенос спектра

Сообщение Бахурин Сергей »

У вас нет комплексного умножения.
(I+jQ)(cos+jsin)=Icos-Qsin +j(Isin+Qcos)
В реальной части знак минус а у вас плюс

Feofan
Сообщения: 19
Зарегистрирован: 20 фев 2017, 22:51
Откуда: Москва

Re: программный перенос спектра

Сообщение Feofan »

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

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: программный перенос спектра

Сообщение Бахурин Сергей »

А какая сейчас частота?

Feofan
Сообщения: 19
Зарегистрирован: 20 фев 2017, 22:51
Откуда: Москва

Re: программный перенос спектра

Сообщение Feofan »

Сигнал принимается и оцифровывается китайским sdr приемником (свистком).
Частота настройки 104,2 МГц, частота дискретизации 1,4 МГц (с этой частотой оцифровывается каждый из квадратурных каналов, то есть на самом деле я принимаю поток отсчетов с частотой следования 2,8 МГц).

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: программный перенос спектра

Сообщение Бахурин Сергей »

Тогда проблем быть не должно.
У вас в коде идут операции по модулю. В частности зачем счётчик времени брать по модулю самплрейта я не понял. Вы же делите на свмлрэйт под синусом с косинусом.

Feofan
Сообщения: 19
Зарегистрирован: 20 фев 2017, 22:51
Откуда: Москва

Re: программный перенос спектра

Сообщение Feofan »

Комплексная экспонента, на которую домножается сигнал при сдвиге спектра, в степени имеет параметр dt. На сколько я знаю он должен меняться от 0 до 1 с шагом 1/sample_rate. Если не брать время по модулю сэмплрейта, то счетчик времени просто уйдет в бесконечность. Может я что то неправильно понимаю.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: программный перенос спектра

Сообщение Бахурин Сергей »

а переменная time у вас какой тип имеет? Потому что визуально особого криминала не вижу.

Feofan
Сообщения: 19
Зарегистрирован: 20 фев 2017, 22:51
Откуда: Москва

Re: программный перенос спектра

Сообщение Feofan »

Переменная time имеет тип int

Feofan
Сообщения: 19
Зарегистрирован: 20 фев 2017, 22:51
Откуда: Москва

Re: программный перенос спектра

Сообщение Feofan »

Решил еще раз проверить работу программы и поиграться с параметрами приемника.
Выкрутил усиление тюнера на максимум и сигнал появился, однако на частоте равной частоте настройки (104,2 МГц) + частота сдвига (100 кГц) = 104,3 Мгц имеется довольно мощный пик, который искажает спектр переносимого сигнала. Также повышается и уровень шума (примерно на 10 дБ).
На первом видео записан прием сигнала без переноса спектра: https://www.youtube.com/watch?v=pDjK3z0 ... e=youtu.be.
На втором видео записан спектр сигнала, сдвинутого на 100 кГц: https://www.youtube.com/watch?v=bl7ZkOd ... e=youtu.be, причем изначально настройки отображения спектра совпадают с теми, что были на первом видео. Видно как подскакивает уровень шума и виден тот самый пик на 104,3 МГц. Затем я выкручиваю усиление тюнера на максимум и сигнал становится виден, однако пик гораздо мощнее принимаемого сигнала.

Ответить