программный перенос спектра
программный перенос спектра
Доброго времени суток!
Возникла задача реализовать программный сдвиг спектра сигнала на определенную частоту. Сигнал у меня квадратурный, снесенный на нулевую ПЧ, частота дискретизации известна. В теории данная задача решается домножением сигнала на комплексную экспоненту с необходимой частотой сдвига в аргументе, однако на практике возникли проблемы. Как попытался сделать я: очередную пару квадратурных отсчетов я домножаю на комплексную экспоненту, представленную в тригонометрическом виде, с учетом частоты дискретизации входного сигнала и желаемого частотного сдвига. На прикрепленной картинке (картинка 1) представлен кусок кода, выполняющий вышеописанные действия. Здесь: temp_32f_re и temp_32f_im массивы с квадратурными и синфазными отсчетами входного сигнала, time - целочисленный счетчик времени, in_sample_rate - частота дискретизации входного сигнала. Для данного случая сдвиг спектра осуществляется на 100 кГц вправо. В результате получается сигнал, спектр которого (картинка 2) вообще никак не похож на спектр начального сигнала (картинка 3). Что я делаю не так?
Возникла задача реализовать программный сдвиг спектра сигнала на определенную частоту. Сигнал у меня квадратурный, снесенный на нулевую ПЧ, частота дискретизации известна. В теории данная задача решается домножением сигнала на комплексную экспоненту с необходимой частотой сдвига в аргументе, однако на практике возникли проблемы. Как попытался сделать я: очередную пару квадратурных отсчетов я домножаю на комплексную экспоненту, представленную в тригонометрическом виде, с учетом частоты дискретизации входного сигнала и желаемого частотного сдвига. На прикрепленной картинке (картинка 1) представлен кусок кода, выполняющий вышеописанные действия. Здесь: temp_32f_re и temp_32f_im массивы с квадратурными и синфазными отсчетами входного сигнала, time - целочисленный счетчик времени, in_sample_rate - частота дискретизации входного сигнала. Для данного случая сдвиг спектра осуществляется на 100 кГц вправо. В результате получается сигнал, спектр которого (картинка 2) вообще никак не похож на спектр начального сигнала (картинка 3). Что я делаю не так?
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: программный перенос спектра
У вас нет комплексного умножения.
(I+jQ)(cos+jsin)=Icos-Qsin +j(Isin+Qcos)
В реальной части знак минус а у вас плюс
(I+jQ)(cos+jsin)=Icos-Qsin +j(Isin+Qcos)
В реальной части знак минус а у вас плюс
Re: программный перенос спектра
Спасибо за замечание, поправил, однако это не помогло.
Не нужно ли мне перед операцией комплексного домножения повысить частоту дискретизации?
Не нужно ли мне перед операцией комплексного домножения повысить частоту дискретизации?
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: программный перенос спектра
А какая сейчас частота?
Re: программный перенос спектра
Сигнал принимается и оцифровывается китайским sdr приемником (свистком).
Частота настройки 104,2 МГц, частота дискретизации 1,4 МГц (с этой частотой оцифровывается каждый из квадратурных каналов, то есть на самом деле я принимаю поток отсчетов с частотой следования 2,8 МГц).
Частота настройки 104,2 МГц, частота дискретизации 1,4 МГц (с этой частотой оцифровывается каждый из квадратурных каналов, то есть на самом деле я принимаю поток отсчетов с частотой следования 2,8 МГц).
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: программный перенос спектра
Тогда проблем быть не должно.
У вас в коде идут операции по модулю. В частности зачем счётчик времени брать по модулю самплрейта я не понял. Вы же делите на свмлрэйт под синусом с косинусом.
У вас в коде идут операции по модулю. В частности зачем счётчик времени брать по модулю самплрейта я не понял. Вы же делите на свмлрэйт под синусом с косинусом.
Re: программный перенос спектра
Комплексная экспонента, на которую домножается сигнал при сдвиге спектра, в степени имеет параметр dt. На сколько я знаю он должен меняться от 0 до 1 с шагом 1/sample_rate. Если не брать время по модулю сэмплрейта, то счетчик времени просто уйдет в бесконечность. Может я что то неправильно понимаю.
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: программный перенос спектра
а переменная time у вас какой тип имеет? Потому что визуально особого криминала не вижу.
Re: программный перенос спектра
Переменная time имеет тип int
Re: программный перенос спектра
Решил еще раз проверить работу программы и поиграться с параметрами приемника.
Выкрутил усиление тюнера на максимум и сигнал появился, однако на частоте равной частоте настройки (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 МГц. Затем я выкручиваю усиление тюнера на максимум и сигнал становится виден, однако пик гораздо мощнее принимаемого сигнала.
Выкрутил усиление тюнера на максимум и сигнал появился, однако на частоте равной частоте настройки (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 МГц. Затем я выкручиваю усиление тюнера на максимум и сигнал становится виден, однако пик гораздо мощнее принимаемого сигнала.