|
|
  |
Перенос частотстоты вниз |
|
|
|
Dec 2 2011, 20:27
|
Участник

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

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

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

Группа: Участник
Сообщений: 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, смена знака - вы имеете ввиду с + на - и наоборот для каждой выборки? А фильтрация в данном случае не нужна? Этот алгоритм конечно хорош если только точно известна несущая и есть возможность частоту дескретизации повысить, а если всетаки нет?
|
|
|
|
|
Dec 2 2011, 22:59
|
Участник

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

|
Цитата(Serg76 @ Dec 3 2011, 00:50)  ADC (Fs=150 kHz) -> ПЧ (гетеродин + смеситель) в ноль -> ресамплер (полифазник на КИХ) на Fs2=10 kHz Круто. Спасибо  Все стало предельно понятно. Грамотные и развернутые комментарии - конек этого форума. "Я новичок в ЦОС, поэтому прошу не гнобить сразу!"
Сообщение отредактировал SergiRF - Dec 3 2011, 07:16
|
|
|
|
|
Dec 3 2011, 08:32
|
Участник

Группа: Участник
Сообщений: 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 сделать?
|
|
|
|
|
Dec 3 2011, 09:02
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 3 2011, 09:38
|
Участник

Группа: Участник
Сообщений: 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 кгц.
|
|
|
|
|
Dec 3 2011, 13:04
|
Местный
  
Группа: Участник
Сообщений: 350
Регистрация: 16-11-08
Пользователь №: 41 680

|
Ааа извиняюсь  Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали. Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение.
|
|
|
|
|
Dec 3 2011, 13:45
|
Знающий
   
Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997

|
Цитата(ivan219 @ Dec 3 2011, 16:04)  Ааа извиняюсь  Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали. Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение. Если частота сэмплирования 150 кГц, то фнч 'обязан быть', чтобы выше 75 кГц подавить сколько надо (можно). Автор не сказал, что дальше делать с этим сигналом. Что значит 'передать'. Возможно, нужна только огибающая в заданной полосе. Возможно, сложная модуляция. Если IQ 'не надо', то что это значит? Наиболее общий подход (при неопределенности задачи) брать IQ с последующей фильтрацией и децимацией, что подходит для всех случаев, так как сохраняется полная информация о сигнале в заданной полосе. Задача упрощается, если Fs ровно в 4 раза больше частоты, которую надо 'перенести в ноль'. Синус вырождается в 0 1 0 -1 , а косинус в 1 0 -1 0.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|