реклама на сайте
подробности

 
 
6 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Перенос частотстоты вниз
SergiRF
сообщение Dec 2 2011, 20:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 20-06-11
Пользователь №: 65 790



Hi
Я новичок в ЦОС, поэтому прошу не гнобить сразу!
Задача:
Есть сигнал на несущей частоте 50 кГц, узкрполосный - ширина спектра по уровню -3дБ = 2 кГц
Сигнал требуется оцифровать и передать
Сигнал семплируется АЦП с частотой 150 кГц
Требуется написать алгоритм на С позволяющий перенести частоту вниз, НО не без использования IQ, тоесть это НЕ DDC
На входе алгоритма будет семплирование 150 кГц, а на выходе должна быть в пределах 10 кГц.
И большое ограничение - алгоритм не должен быть требовательным к ресурсам, код будет компилится под 8и битный pic18, но и требований к точности нет.
Вообще то, как бы понятно - опорник, смеситель, ФНЧ. Но не представляю как это можно на С описать.
Есть идеи?

Go to the top of the page
 
+Quote Post
sup-sup
сообщение Dec 2 2011, 20:48
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997



Цитата(SergiRF @ Dec 2 2011, 23:27) *
Hi
Я новичок в ЦОС, поэтому прошу не гнобить сразу!
Задача:
Есть сигнал на несущей частоте 50 кГц, узкрполосный - ширина спектра по уровню -3дБ = 2 кГц
Сигнал требуется оцифровать и передать
Сигнал семплируется АЦП с частотой 150 кГц
Требуется написать алгоритм на С позволяющий перенести частоту вниз, НО не без использования IQ, тоесть это НЕ DDC
На входе алгоритма будет семплирование 150 кГц, а на выходе должна быть в пределах 10 кГц.
И большое ограничение - алгоритм не должен быть требовательным к ресурсам, код будет компилится под 8и битный pic18, но и требований к точности нет.
Вообще то, как бы понятно - опорник, смеситель, ФНЧ. Но не представляю как это можно на С описать.
Есть идеи?

Если нет требований к точности, то может быть, лучше и вовсе не делать ничего. rolleyes.gif
Если делать один смеситель с переносом на 10 кГц, то будет зеркальный канал приема (30 или 70 кГц).
Значит, лучше всего IQ.
Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам).

Сообщение отредактировал sup-sup - Dec 2 2011, 21:03
Go to the top of the page
 
+Quote Post
SergiRF
сообщение Dec 2 2011, 21:04
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 20-06-11
Пользователь №: 65 790



Цитата(sup-sup @ Dec 2 2011, 23:48) *
Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то IQ сводится к прореживанию вдвое, каждый раз с переменой знака, а канал Q - то же самое со сдвигом на один сэмпл.

выборки номер:
1 2 3 4 5 6 7 8
берется каждая вторая для I 1 3 5 7
для Q 2 4 6 8
На счет смены знака не понял. Допустим АЦП 8 бит - от 0 до 3 В. Сигнал смещен на 1.5 (центрирован). На выходе АЦП получим signed char, смена знака - вы имеете ввиду с + на - и наоборот для каждой выборки?
А фильтрация в данном случае не нужна?

Этот алгоритм конечно хорош если только точно известна несущая и есть возможность частоту дескретизации повысить, а если всетаки нет?
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 2 2011, 21:50
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



ADC (Fs=150 kHz) -> ПЧ (гетеродин + смеситель) в ноль -> ресамплер (полифазник на КИХ) на Fs2=10 kHz
Go to the top of the page
 
+Quote Post
SergiRF
сообщение Dec 2 2011, 22:59
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 20-06-11
Пользователь №: 65 790



Цитата(Serg76 @ Dec 3 2011, 00:50) *
ADC (Fs=150 kHz) -> ПЧ (гетеродин + смеситель) в ноль -> ресамплер (полифазник на КИХ) на Fs2=10 kHz

Круто. Спасибо blink.gif Все стало предельно понятно. Грамотные и развернутые комментарии - конек этого форума.

"Я новичок в ЦОС, поэтому прошу не гнобить сразу!"

Сообщение отредактировал SergiRF - Dec 3 2011, 07:16
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 3 2011, 07:55
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(SergiRF @ Dec 3 2011, 01:59) *
Круто. Спасибо blink.gif Все стало предельно понятно. Грамотные и развернутые комментарии - конек этого форума.

Чего не понятно? или сразу код выложить?
Go to the top of the page
 
+Quote Post
SergiRF
сообщение Dec 3 2011, 08:32
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 20-06-11
Пользователь №: 65 790



Цитата(Serg76 @ Dec 3 2011, 10:55) *
Чего не понятно? или сразу код выложить?

Для примера было бы неплохо!
Может ссылочку полезную.
И если бы ваш комент для меня был бы понятен, я вообще бы ни чего не спрашивал!!!
Это если ты в теме давно, то все понятно, а когда только начинаешь хочется дельного и простого совета.

Может поясните пост:
"Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам)."

Тяжело понять как это на С или ASM реализовать
Фильтр не нужен?

И может подскажете как для данного случая UP converter сделать?
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 3 2011, 09:02
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(SergiRF @ Dec 3 2011, 11:32) *
Может поясните пост:
"Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам)."

Тяжело понять как это на С или ASM реализовать
Фильтр не нужен?

чтобы не переносить, вот ссылка на способы формирования квадратурного потока, там ответ на этот вопрос (рис.4).

Цитата(SergiRF @ Dec 3 2011, 11:32) *
И может подскажете как для данного случая UP converter сделать?

да все с помощью той же полифазной структуры, есть еще полиномиальные интерполяторы в виде структуры Farrow. кстати вот неплохой ресурс dsplib
Go to the top of the page
 
+Quote Post
Pavel_SSS
сообщение Dec 3 2011, 09:38
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 11-10-10
Из: Москва
Пользователь №: 60 055



Цитата(SergiRF @ Dec 3 2011, 12:32) *
Для примера было бы неплохо!
Может ссылочку полезную.
И если бы ваш комент для меня был бы понятен, я вообще бы ни чего не спрашивал!!!
Это если ты в теме давно, то все понятно, а когда только начинаешь хочется дельного и простого совета.

Может поясните пост:
"Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам)."

Тяжело понять как это на С или ASM реализовать
Фильтр не нужен?

Вам надо для начала убрать из входного потока постоянное смещение - отнимите известное смещение или (что лучше) усредняйте значение входного сигнала и отнимайте среднее. далее отсчеты сигнала умножаете на отсчеты косинуса с частотой 60 кгц, которые заранее вычисляете. Если бы частота семплирования была бы кратна этим 60 кгц, то последовательность косинуса состояла бы из нулей и +-1,что существенно бы упростило вычисления. Далее применяете фильтр КИХ 16 или выше порядка с полосой пропускания 2 кгц и с полосой задержания какой Вам нужно (моделируете с помощью матлабовского FDATool), для фильтра вычисляете не все отсчеты, только каждый 15 отсчет, получаете последовательность с частотой дискретизации 10 кгц и спектром 2 кгц.
Go to the top of the page
 
+Quote Post
ivan219
сообщение Dec 3 2011, 11:27
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 350
Регистрация: 16-11-08
Пользователь №: 41 680



Я что то так и не понял в чём проблема.
Автору нужно всего лишь перенести полосу в 2 кГц с 50 кГц на 0.
И что тут сложного? Один программный умножитель на 50 кГц.
У него частота дискретизации 150 кГц значит 75 кГц весь диапазон.
При переносе в них появится зеркальная составляющая на частоте 50 кГц которую легко можно отфильтровать НЧ фильтром.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 3 2011, 11:49
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(ivan219 @ Dec 3 2011, 14:27) *
Я что то так и не понял в чём проблема.
Автору нужно всего лишь перенести полосу в 2 кГц с 50 кГц на 0.
И что тут сложного? Один программный умножитель на 50 кГц.
У него частота дискретизации 150 кГц значит 75 кГц весь диапазон.
При переносе в них появится зеркальная составляющая на частоте 50 кГц которую легко можно отфильтровать НЧ фильтром.

невнимательно прочитали условие задачи. перенести в ноль не проблема, надо еще децимировать до 10 кГц.
Go to the top of the page
 
+Quote Post
ivan219
сообщение Dec 3 2011, 13:04
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 350
Регистрация: 16-11-08
Пользователь №: 41 680



Ааа извиняюсь sm.gif
Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали.
Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 3 2011, 13:37
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(ivan219 @ Dec 3 2011, 17:04) *
Ааа извиняюсь sm.gif
Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали.
Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение.

При каком переносе? Не нужен никакой полосовой фильтр, перед АЦП антиалиасинговый фильтр на частоту Найквиста, затем сдвигаем уже оцифрованный сигнал в ноль, а потом децимируем вместе с НЧ фильтрацией до 10 кГц и все, вроде все просто.
Go to the top of the page
 
+Quote Post
sup-sup
сообщение Dec 3 2011, 13:45
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997



Цитата(ivan219 @ Dec 3 2011, 16:04) *
Ааа извиняюсь sm.gif
Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали.
Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение.

Если частота сэмплирования 150 кГц, то фнч 'обязан быть', чтобы выше 75 кГц подавить сколько надо (можно).
Автор не сказал, что дальше делать с этим сигналом. Что значит 'передать'. Возможно, нужна только огибающая в заданной полосе. Возможно, сложная модуляция. Если IQ 'не надо', то что это значит? Наиболее общий подход (при неопределенности задачи) брать IQ с последующей фильтрацией и децимацией, что подходит для всех случаев, так как сохраняется полная информация о сигнале в заданной полосе. Задача упрощается, если Fs ровно в 4 раза больше частоты, которую надо 'перенести в ноль'. Синус вырождается в 0 1 0 -1 , а косинус в 1 0 -1 0.
Go to the top of the page
 
+Quote Post
ivan219
сообщение Dec 3 2011, 13:45
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 350
Регистрация: 16-11-08
Пользователь №: 41 680



Нет вы не верно поняли.
Ни до АЦП а поле. Перед переносом.
Так как полоса в 75 кГц может содержать кроме нужной полосы в 2 кГц ещё и мусор.
Вот от него я и предложил поставить ПФ. Если конечно автором у же это не сделано.
Go to the top of the page
 
+Quote Post

6 страниц V   1 2 3 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 00:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016