SergiRF 0 2 декабря, 2011 Опубликовано 2 декабря, 2011 · Жалоба Hi Я новичок в ЦОС, поэтому прошу не гнобить сразу! Задача: Есть сигнал на несущей частоте 50 кГц, узкрполосный - ширина спектра по уровню -3дБ = 2 кГц Сигнал требуется оцифровать и передать Сигнал семплируется АЦП с частотой 150 кГц Требуется написать алгоритм на С позволяющий перенести частоту вниз, НО не без использования IQ, тоесть это НЕ DDC На входе алгоритма будет семплирование 150 кГц, а на выходе должна быть в пределах 10 кГц. И большое ограничение - алгоритм не должен быть требовательным к ресурсам, код будет компилится под 8и битный pic18, но и требований к точности нет. Вообще то, как бы понятно - опорник, смеситель, ФНЧ. Но не представляю как это можно на С описать. Есть идеи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sup-sup 0 2 декабря, 2011 Опубликовано 2 декабря, 2011 (изменено) · Жалоба Hi Я новичок в ЦОС, поэтому прошу не гнобить сразу! Задача: Есть сигнал на несущей частоте 50 кГц, узкрполосный - ширина спектра по уровню -3дБ = 2 кГц Сигнал требуется оцифровать и передать Сигнал семплируется АЦП с частотой 150 кГц Требуется написать алгоритм на С позволяющий перенести частоту вниз, НО не без использования IQ, тоесть это НЕ DDC На входе алгоритма будет семплирование 150 кГц, а на выходе должна быть в пределах 10 кГц. И большое ограничение - алгоритм не должен быть требовательным к ресурсам, код будет компилится под 8и битный pic18, но и требований к точности нет. Вообще то, как бы понятно - опорник, смеситель, ФНЧ. Но не представляю как это можно на С описать. Есть идеи? Если нет требований к точности, то может быть, лучше и вовсе не делать ничего. :rolleyes: Если делать один смеситель с переносом на 10 кГц, то будет зеркальный канал приема (30 или 70 кГц). Значит, лучше всего IQ. Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам). Изменено 2 декабря, 2011 пользователем sup-sup Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergiRF 0 2 декабря, 2011 Опубликовано 2 декабря, 2011 · Жалоба Если бы частота сэмплирования была 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, смена знака - вы имеете ввиду с + на - и наоборот для каждой выборки? А фильтрация в данном случае не нужна? Этот алгоритм конечно хорош если только точно известна несущая и есть возможность частоту дескретизации повысить, а если всетаки нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg76 0 2 декабря, 2011 Опубликовано 2 декабря, 2011 · Жалоба ADC (Fs=150 kHz) -> ПЧ (гетеродин + смеситель) в ноль -> ресамплер (полифазник на КИХ) на Fs2=10 kHz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergiRF 0 2 декабря, 2011 Опубликовано 2 декабря, 2011 (изменено) · Жалоба ADC (Fs=150 kHz) -> ПЧ (гетеродин + смеситель) в ноль -> ресамплер (полифазник на КИХ) на Fs2=10 kHz Круто. Спасибо :blink: Все стало предельно понятно. Грамотные и развернутые комментарии - конек этого форума. "Я новичок в ЦОС, поэтому прошу не гнобить сразу!" Изменено 3 декабря, 2011 пользователем SergiRF Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg76 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Круто. Спасибо :blink: Все стало предельно понятно. Грамотные и развернутые комментарии - конек этого форума. Чего не понятно? или сразу код выложить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergiRF 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Чего не понятно? или сразу код выложить? Для примера было бы неплохо! Может ссылочку полезную. И если бы ваш комент для меня был бы понятен, я вообще бы ни чего не спрашивал!!! Это если ты в теме давно, то все понятно, а когда только начинаешь хочется дельного и простого совета. Может поясните пост: "Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам)." Тяжело понять как это на С или ASM реализовать Фильтр не нужен? И может подскажете как для данного случая UP converter сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg76 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Может поясните пост: "Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам)." Тяжело понять как это на С или ASM реализовать Фильтр не нужен? чтобы не переносить, вот ссылка на способы формирования квадратурного потока, там ответ на этот вопрос (рис.4). И может подскажете как для данного случая UP converter сделать? да все с помощью той же полифазной структуры, есть еще полиномиальные интерполяторы в виде структуры Farrow. кстати вот неплохой ресурс dsplib Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel_SSS 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Для примера было бы неплохо! Может ссылочку полезную. И если бы ваш комент для меня был бы понятен, я вообще бы ни чего не спрашивал!!! Это если ты в теме давно, то все понятно, а когда только начинаешь хочется дельного и простого совета. Может поясните пост: "Если бы частота сэмплирования была 200 кГц (вчетверо выше от требуемой), то для канала I все сводится к прореживанию вдвое, каждый раз с переменой знака (умножение на .. 1 0 -1 0 1 0 -1 0 1 0 ..), а канал Q - то же самое со сдвигом на один сэмпл (что соответствует 90 градусам)." Тяжело понять как это на С или ASM реализовать Фильтр не нужен? Вам надо для начала убрать из входного потока постоянное смещение - отнимите известное смещение или (что лучше) усредняйте значение входного сигнала и отнимайте среднее. далее отсчеты сигнала умножаете на отсчеты косинуса с частотой 60 кгц, которые заранее вычисляете. Если бы частота семплирования была бы кратна этим 60 кгц, то последовательность косинуса состояла бы из нулей и +-1,что существенно бы упростило вычисления. Далее применяете фильтр КИХ 16 или выше порядка с полосой пропускания 2 кгц и с полосой задержания какой Вам нужно (моделируете с помощью матлабовского FDATool), для фильтра вычисляете не все отсчеты, только каждый 15 отсчет, получаете последовательность с частотой дискретизации 10 кгц и спектром 2 кгц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan219 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Я что то так и не понял в чём проблема. Автору нужно всего лишь перенести полосу в 2 кГц с 50 кГц на 0. И что тут сложного? Один программный умножитель на 50 кГц. У него частота дискретизации 150 кГц значит 75 кГц весь диапазон. При переносе в них появится зеркальная составляющая на частоте 50 кГц которую легко можно отфильтровать НЧ фильтром. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg76 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Я что то так и не понял в чём проблема. Автору нужно всего лишь перенести полосу в 2 кГц с 50 кГц на 0. И что тут сложного? Один программный умножитель на 50 кГц. У него частота дискретизации 150 кГц значит 75 кГц весь диапазон. При переносе в них появится зеркальная составляющая на частоте 50 кГц которую легко можно отфильтровать НЧ фильтром. невнимательно прочитали условие задачи. перенести в ноль не проблема, надо еще децимировать до 10 кГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan219 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Ааа извиняюсь :) Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали. Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg76 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Ааа извиняюсь :) Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали. Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение. При каком переносе? Не нужен никакой полосовой фильтр, перед АЦП антиалиасинговый фильтр на частоту Найквиста, затем сдвигаем уже оцифрованный сигнал в ноль, а потом децимируем вместе с НЧ фильтрацией до 10 кГц и все, вроде все просто. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sup-sup 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Ааа извиняюсь :) Тогда после фильтра каждый 15 отсчёт. Нужно брать. Как выше и рекомендовали. Я бы ещё добавил полосовой фильтр на 2 кГц в самом начал ведь о сигнале мы ничего не знаем. Возможно там есть помехи и при переносе может произойти наложение. Если частота сэмплирования 150 кГц, то фнч 'обязан быть', чтобы выше 75 кГц подавить сколько надо (можно). Автор не сказал, что дальше делать с этим сигналом. Что значит 'передать'. Возможно, нужна только огибающая в заданной полосе. Возможно, сложная модуляция. Если IQ 'не надо', то что это значит? Наиболее общий подход (при неопределенности задачи) брать IQ с последующей фильтрацией и децимацией, что подходит для всех случаев, так как сохраняется полная информация о сигнале в заданной полосе. Задача упрощается, если Fs ровно в 4 раза больше частоты, которую надо 'перенести в ноль'. Синус вырождается в 0 1 0 -1 , а косинус в 1 0 -1 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan219 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 · Жалоба Нет вы не верно поняли. Ни до АЦП а поле. Перед переносом. Так как полоса в 75 кГц может содержать кроме нужной полосы в 2 кГц ещё и мусор. Вот от него я и предложил поставить ПФ. Если конечно автором у же это не сделано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться