Страница 1 из 3

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

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

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

Добавлено: 23 июн 2018, 08:35
Бахурин Сергей
У вас нет комплексного умножения.
(I+jQ)(cos+jsin)=Icos-Qsin +j(Isin+Qcos)
В реальной части знак минус а у вас плюс

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

Добавлено: 24 июн 2018, 23:56
Feofan
Спасибо за замечание, поправил, однако это не помогло.
Не нужно ли мне перед операцией комплексного домножения повысить частоту дискретизации?

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

Добавлено: 25 июн 2018, 07:03
Бахурин Сергей
А какая сейчас частота?

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

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

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

Добавлено: 27 июн 2018, 07:54
Бахурин Сергей
Тогда проблем быть не должно.
У вас в коде идут операции по модулю. В частности зачем счётчик времени брать по модулю самплрейта я не понял. Вы же делите на свмлрэйт под синусом с косинусом.

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

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

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

Добавлено: 27 июн 2018, 13:58
Бахурин Сергей
а переменная time у вас какой тип имеет? Потому что визуально особого криминала не вижу.

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

Добавлено: 28 июн 2018, 10:09
Feofan
Переменная time имеет тип int

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

Добавлено: 28 июн 2018, 11:01
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 МГц. Затем я выкручиваю усиление тюнера на максимум и сигнал становится виден, однако пик гораздо мощнее принимаемого сигнала.