про синус посоветуйте

Hi, All!

Вот идут у меня отсчёты с АЦП с частотой 6 кГц. Сигнал - звук 0.3 - 3 кГц надо мне сигнал умножить на синус и косинус частотой 1.5 кГц Что-то я не догоняю, как это сделать. синус у меня такой 0,1,0,-1,0 косинус 1,0,-1,0,1 период, соотв. 0.66 мсек а сигнал у меня идёт с периодом 0.16 мсек. Как мне их согласовать? Представлять синус в виде 0,0,0,0,1,1,1,1,0,0,0,0,-1,-1,-1,-1,0,0,0,0 или обязательно 0 0.38 0.7 0.92 1 этцетера

Что-то физика процесса от меня ускользает...

bye, Eugen!

... Дуpацкий каpнавал - comedia del arte

Reply to
Eugen Sergeev
Loading thread data ...

Hi Eugen, hope you are having a nice day!

24 Jul 10, Eugen Sergeev wrote to All:

ES> Вот идут у меня отсчёты с АЦП с частотой 6 кГц. ES> Сигнал - звук 0.3 - 3 кГц ES> надо мне сигнал умножить на синус и косинус частотой 1.5 кГц ES> Что-то я не догоняю, как это сделать. ES> синус у меня такой ES> 0,1,0,-1,0 ES> косинус ES> 1,0,-1,0,1 ES> период, соотв. 0.66 мсек ES> а сигнал у меня идёт с периодом 0.16 мсек. ES> Как мне их согласовать? ES> Представлять синус в виде ES> 0,0,0,0,1,1,1,1,0,0,0,0,-1,-1,-1,-1,0,0,0,0 ES> или обязательно ES> 0 0.38 0.7 0.92 1 этцетера

Просто каждый отсчет тупо умножается на соответсвующий отчет синуса и косинуса. Почему сомнения?

Если входной сигнал однобитный (0 или 1), то умножение вообще заменяется xor'ом и можно умножать по 8-16-32 отсчета за раз (в зависимости от разрядности процессора).

ES> Что-то физика процесса от меня ускользает...

Это скорее математика.

WBR, AVB

Reply to
Alexey V Bugrov

Hi Eugen, hope you are having a nice day!

24 Jul 10, Eugen Sergeev wrote to All:

ES> синус у меня такой ES> 0,1,0,-1,0 ES> косинус ES> 1,0,-1,0,1 ES> период, соотв. 0.66 мсек ES> а сигнал у меня идёт с периодом 0.16 мсек. ES> Как мне их согласовать? ES> Представлять синус в виде ES> 0,0,0,0,1,1,1,1,0,0,0,0,-1,-1,-1,-1,0,0,0,0 ES> или обязательно ES> 0 0.38 0.7 0.92 1 этцетера

p.s. Частота дискретизации синуса/косинуса и входного сигнала должна быть одинакова. А по скольким уровням квантовать имеет значение уже во вторую очередь.

WBR, AVB

Reply to
Alexey V Bugrov

Здpавствуй, Eugen!

Суббота 24 Июля 2010 11:39, ты писал(а) All, в сообщении по ссылке area://ru.embedded?msgid=2:5038/9.28+4c4ad553:

ES> Вот идут у меня отсчёты с АЦП с частотой 6 кГц. ES> Сигнал - звук 0.3 - 3 кГц ES> надо мне сигнал умножить на синус и косинус частотой 1.5 кГц ES> Что-то я не догоняю, как это сделать. ES> синус у меня такой ES> 0,1,0,-1,0 ES> косинус ES> 1,0,-1,0,1 ES> период, соотв. 0.66 мсек ES> а сигнал у меня идёт с периодом 0.16 мсек. ES> Как мне их согласовать? ES> Представлять синус в виде ES> 0,0,0,0,1,1,1,1,0,0,0,0,-1,-1,-1,-1,0,0,0,0 ES> или обязательно ES> 0 0.38 0.7 0.92 1 этцетера

ES> Что-то физика процесса от меня ускользает...

Я бы говорил за второй вариант: там меньше гармоник побочных. А то в первом варианте это же просто:

----

---- ---- ---- ----

Что вообще говоря не совсем синус.

По периодам: у тебя на период синуса/косинуса укладывается 4 отсчета АЦП, т.е. получается так примерно:

12341234 - -

- - - - - - Так что твое быстродействие не позволит тебе получить сигнал быстрее чем

0,1,0,-1. Как то так...

А другие решения не катют? Например сигнал x аналоговый син/кос => АЦП? Перемножить можно на AD633, может даже круче получиться:)

С уважением - Alexander ... А власти то скрывают!

Reply to
Alexander Sashurin

Hi Alexander, hope you are having a nice day!

24 Jul 10, Alexander Sashurin wrote to Eugen Sergeev:

AS> Так что твое быстродействие не позволит тебе получить сигнал быстрее AS> чем AS> 0,1,0,-1. Как то так...

AS> А другие решения не катют? Например сигнал x аналоговый син/кос => АЦП? AS> Перемножить можно на AD633, может даже круче получиться:)

Да зачем? Автор пока не рассказал что он хочет получить, но по нонешним временам аналоговые методы демодуляции актульны только для очень высоких частот, в противном случае ЦОС рулит.

WBR, AVB

Reply to
Alexey V Bugrov

Здpавствуй, Alexey!

Суббота 24 Июля 2010 16:49, ты писал(а) мне, в сообщении по ссылке area://ru.embedded?msgid=2:5029/32@fidonet+4c4ae1ca:

AS>> Так что твое быстродействие не позволит тебе получить сигнал AS>> быстрее чем 0,1,0,-1. Как то так... AS>> А другие решения не катют? Например сигнал x аналоговый син/кос AS>> => АЦП? Перемножить можно на AD633 может даже круче получиться:) AB> Да зачем? Автор пока не рассказал что он хочет получить, но по AB> нонешним временам аналоговые методы демодуляции актульны только для AB> очень высоких частот, в противном случае ЦОС рулит.

Вообщем наверно. DSP, все дела. 21 век на дворе как никак...

С уважением - Alexander ... Как мне избавиться от этой тоски по вам, солнечные дни?..

Reply to
Alexander Sashurin

Hi, Alexey!

24 Jul 10 16:49, Alexey V Bugrov >>> Alexander Sashurin: AS>> Так что твое быстродействие не позволит тебе получить сигнал AS>> быстрее чем 0,1,0,-1. Как то так...

AS>> А другие решения не катют? апример сигнал x аналоговый син/кос AS> =>> АЦП? Перемножить можно на AD633, может даже круче получиться:)

AB> Да зачем? Автор пока не рассказал что он хочет получить, но по AB> нонешним временам аналоговые методы демодуляции актульны только для AB> очень высоких частот, в противном случае ЦОС рулит. Автор хочет сделать формирователь SSB на 110 или ( если по быстродействию уложусь ) 215 кГц на ширпотребовском микроконтроллере методом Вивера. Ежели у кого есть идеи - излагайте.

bye, Eugen!

... Дуpацкий каpнавал - comedia del arte

Reply to
Eugen Sergeev

Hi Eugen, hope you are having a nice day!

24 Jul 10, Eugen Sergeev wrote to Alexey V Bugrov:

AB>> Да зачем? Автор пока не рассказал что он хочет получить, но по AB>> нонешним временам аналоговые методы демодуляции актульны только для AB>> очень высоких частот, в противном случае ЦОС рулит. ES> Автор хочет сделать формирователь SSB на 110 или ( если по ES> быстродействию ES> уложусь ) 215 кГц на ширпотребовском микроконтроллере методом Вивера. ES> Ежели у кого есть идеи - излагайте.

Т.е. у тебя есть сигнал в полосе 300...3000 Гц, с частотой дискретизации 6 (?) кГц. Ты хочешь получить SSB на частоте 110 (215) кГц. Если я правильно тебя понял, то сначала ты хочешь умножить на sin/cos 1650Гц (середина звуковой полосы), чтобы переместить спектр симметрично относительно нуля, потом ФНЧ на обе составляющие c частотой среза (3000 - 300) / 2 = 1350 Гц) и еще одно умножение на sin/cos 110 (215)кГц -(+) 1350 Гц, чтобы получить конечный результат.

Я правильно понял? Или перенос на несущую предполагается сделать аналоговым способом? Или фильтрация тоже будет в аналоговом варианте?

Уточни еще частоту дискретизации.

WBR, AVB

Reply to
Alexey V Bugrov

Hi Eugen, hope you are having a nice day!

24 Jul 10, Eugen Sergeev wrote to Alexey V Bugrov:

AB>> Да зачем? Автор пока не рассказал что он хочет получить, но по AB>> нонешним временам аналоговые методы демодуляции актульны только для AB>> очень высоких частот, в противном случае ЦОС рулит. ES> Автор хочет сделать формирователь SSB на 110 или ( если по ES> быстродействию ES> уложусь ) 215 кГц на ширпотребовском микроконтроллере методом Вивера. ES> Ежели у кого есть идеи - излагайте.

Перечитал еще раз твое исходное письмо, кое что прояснилось.

Частота дискретизации у тебя заявлена 6000 кГц. Частота на которую перемножаешь

1500 Гц. Тогда все просто получается - отсчеты синуса и косинуса для такой частоты действительно вырождаются в последовательность 0,1,0,-1,0 для синуса и 1,0,-1,0,1 для косинуса. Каждый следующий отсчет АЦП просто умножается на очердные значения из таблицы синуса и косинуса.

В результате ты получишь исходный спектр сдвинутый вниз на 1500 Гц, т.е.

-1200... 1500 Гц. Только я не понял как ты собираешься переносить этот спектр на 110 кГц, аналоговым или цифровым способом?

WBR, AVB

Reply to
Alexey V Bugrov

Hi, Alexey!

24 Jul 10 20:27, Alexey V Bugrov >>> Eugen Sergeev: AB>>> Да зачем? Автор пока не рассказал что он хочет получить, но по AB>>> нонешним временам аналоговые методы демодуляции актульны только AB>>> для очень высоких частот, в противном случае ЦОС рулит. ES>> Автор хочет сделать формирователь SSB на 110 или ( если по AB> быстродействию ES>> уложусь ) 215 кГц на ширпотребовском микроконтроллере методом ES>> Вивера. Ежели у кого есть идеи - излагайте.

AB> Т.е. у тебя есть сигнал в полосе 300...3000 Гц, с частотой AB> дискретизации 6 (?) кГц. Ты хочешь получить SSB на частоте 110 (215) AB> кГц. Если я правильно тебя понял, то сначала ты хочешь умножить на AB> sin/cos 1650Гц (середина звуковой полосы), чтобы переместить спектр AB> симметрично относительно нуля, потом Ф Ч на обе составляющие c AB> частотой среза (3000 - 300) / 2 = 1350 Гц) и еще одно умножение на AB> sin/cos 110 (215)кГц -(+) 1350 Гц, чтобы получить конечный результат.

AB> Я правильно понял? Или перенос на несущую предполагается сделать AB> аналоговым способом? Или фильтрация тоже будет в аналоговом варианте? Да, всё правильно. Из аналогового предполагается только фильтр HЧ на выходе. Только вот фильтр надо как-то придумать с интерполятором в одном флаконе, только пока не знаю как. AB> Уточни еще частоту дискретизации. 6 кГц, а что, это критично?

bye, Eugen!

... ■ Всякая pабота тpебует больше вpемени, чем Вы думаете..

Reply to
Eugen Sergeev

Hi Eugen, hope you are having a nice day!

24 Jul 10, Eugen Sergeev wrote to Alexey V Bugrov:

AB>> Т.е. у тебя есть сигнал в полосе 300...3000 Гц, с частотой AB>> дискретизации 6 (?) кГц. Ты хочешь получить SSB на частоте 110 (215) AB>> кГц. Если я правильно тебя понял, то сначала ты хочешь умножить на AB>> sin/cos 1650Гц (середина звуковой полосы), чтобы переместить спектр AB>> симметрично относительно нуля, потом Ф Ч на обе составляющие c AB>> частотой среза (3000 - 300) / 2 = 1350 Гц) и еще одно умножение на AB>> sin/cos 110 (215)кГц -(+) 1350 Гц, чтобы получить конечный результат.

AB>> Я правильно понял? Или перенос на несущую предполагается сделать AB>> аналоговым способом? Или фильтрация тоже будет в аналоговом варианте? ES> Да, всё правильно. ES> Из аналогового предполагается только фильтр HЧ на выходе. ES> Только вот фильтр надо как-то придумать с интерполятором в одном ES> флаконе, только пока не знаю как. AB>> Уточни еще частоту дискретизации. ES> 6 кГц, а что, это критично?

Если частота дискретизации кратна частотам синуса/косинуса, то жизнь существенно упрощается.

Итак, как вижу я процесс формирования SSB в цифре.

  1. Имеется входной сигнал в полосе 300...3000 Гц, оцифрованный с частотой 6000 Гц.

  1. Переносим сигнал так, чтобы полоса стала симметрична относительно 0 Гц, для простоты переносим всю полосу от 0 до 3 кГц вниз на 1500 Гц. Для этого умножаем входные данные на последовательность синуса и косинуса с частотой 1500 Гц. Т.к. частота 1500 Гц кратна частоте семплирования ровно в 4-ре раза, то синус и косинус вырождается в последовательность 0,1,0,-1,0 и т.д. Естесственно вместо умножения мы просто будем обнулять каждый второй отсчет и инвертировать те, которые должны быть умножены на -1.

  2. После шага 2 имеется два канала данных I (тот который умножали на косинус) и Q (то, что умножено на синус). Т.е. сигнал представлен в комплексной форме. Кроме всего, в этом сигнале есть зеркальная составляющая исходной полосы, которую нужно отфильтровать перед модуляцией. Т.е. нужен ФНЧ на каждый из каналов с частотой среза 1500 Гц. Причем ФНЧ нужен достаточно высокого порядка, т.к. зеркальный канал будет отстоять всего на 300 Гц от полезного. Но фильтровать можно и на следующем шаге.

  1. Теперь нужно перенести сигнал на 110 или 215 кГц. Допустим, что мы хотим получить uSB, значит мы должны теперь умножить сигнал на F = Fc + 1500Гц, где Fc частота (подавленной) несущей. Для того, чтобы дальше было проще считать, удобновзять такую частоту F, чтобы она была кратна 1500Гц (если это допустимо). Допустим Fc = 109,5 кГц, следовательно F = 111 кГц. Чтобы умножить на такую частоту, придется ресемплировать I и Q каналы так, чтобы частота дискретизации стала 444 кГц. Для этого после каждого отсчета I и Q вставляем по 73 нуля и пропускаем получившиеся данные через ФНЧ с частотой среза 1500 Гц. Таким образом мы одновременно убираем вторую полосу и ресемплируем данные.

  2. Теперь умножаем I канал на последовательность косинуса (1,0,-1,0,1), Q канал на последовательность синуса (0,1,0,-1,0) и складываем результат (I * cos(phy)
  • Q * sin(phy)). Соответсвенно можно заметить, что опять вместо умножений и сложений можно просто поочередно брать данные из I и Q канала, инвертируя каждый второй отчет из каждого канала. Получился SSB сигнал c частотой (подавленной) несущей 109,5 кГц и частотой дискретизации 444 кГц.

Самое вычислитиельноемкое в данном алгоритме - ФНЧ после передискретизации, но без него обойтись нельзя, т.к. именно он убирает вторую полосу из сигнала. Сомневаюсь, что на дешевом микроконтроллере это удастся нахаляву реализовать, тут надо либо DSP, либо ФНЧ и апконвертор делать аналоговыми.

WBR, AVB

Reply to
Alexey V Bugrov

Hello Eugen!

24 Jul 10 21:35, Eugen Sergeev wrote to Alexey V Bugrov:

ES> Из аналогового предполагается только фильтр HЧ на выходе. ES> Только вот фильтр надо как-то придумать с интерполятором в ES> одном флаконе, только пока не знаю как.

AB>> Уточни еще частоту дискретизации.

ES> 6 кГц, а что, это критично?

Мало. В телефонии используют 8 кГц, и не зря.

Всего доброго!

А. Забайрацкий.

Reply to
Alexander Zabairatsky

Hi Alexander, hope you are having a nice day!

26 Jul 10, Alexander Zabairatsky wrote to Eugen Sergeev:

ES>> Из аналогового предполагается только фильтр HЧ на выходе. ES>> Только вот фильтр надо как-то придумать с интерполятором в ES>> одном флаконе, только пока не знаю как.

AB>>> Уточни еще частоту дискретизации.

ES>> 6 кГц, а что, это критично?

AZ> Мало. В телефонии используют 8 кГц, и не зря.

8 для данного применения неудобно. Да и зачем 8 кГц если полоса до 3-х?

WBR, AVB

Reply to
Alexey V Bugrov

Hi Shapovalov, hope you are having a nice day!

26 Jul 10, Shapovalov Alexey Ivanovich wrote to Alexey V Bugrov:

AB>> 2. Переносим сигнал так, чтобы полоса стала симметрична AB>> относительно 0 Гц, для простоты переносим всю полосу от 0 до 3 AB>> кГц вниз на 1500 Гц. Для этого умножаем входные данные на AB>> последовательность синуса и косинуса с частотой 1500 Гц. Т.к. AB>> частота 1500 Гц кратна частоте семплирования ровно в 4-ре раза, AB>> то синус и косинус вырождается в последовательность 0,1,0,-1,0 AB>> и т.д. Естесственно вместо умножения мы просто будем обнулять AB>> каждый второй отсчет и инвертировать те, которые должны быть AB>> умножены на -1.

SAI> Вот и первый вопрос - не упрощая: SAI> 3000-300=2700; 2700/2=1350 - середина SAI> 3000 - 1350 = 1650 Гц - надо смещать на 1650 Гц - Fсм, тогда вместо SAI> 300..3000 будем иметь -1350..1350 SAI> Тогда частота дискретизации Fд, если её брать в 4 раза большей Fсм, SAI> будет равна 1650*4=6600 Гц.

Да, так лучше - филтры для I и Q будут одинаковы, т.к. полоса симметрична относительно нуля.

SAI> Hо антиальясный фильтр имеет не сильно приятные для изготавления SAI> параметры: Fcp = 3000 Гц, Fпод=Fд/2=3300, Уровень подавления на Fпод не SAI> менее 6,02*7 = 42,14 Дб (в идеале, так, канечно, зависит от природы SAI> сигнала)

Не обязательно так сильно давить, может быть более высокиз спектральных составляющих нет. Да и фильтр более высокого порядка можно сделать.

SAI> Поэтому повышаем Fд и с учётом (1) и (2) есть ещё два варианта: SAI> 1)Fд = 6*Fсм = 9900 Гц SAI> 2)Fд = 8*Fсм = 13200 Гц SAI> Какие тогда значения синуса и косинуса брать? SAI> Для случая 2 тут возможен вариант как числовой SAI> cos = (1, 0.707, 0, -0.707, -1, -0.707, 0, 0.707)

Для данного применения нужен именно числовой.

SAI> Так и такой SAI> cos = (1, 1, 0, 0, -1, -1, 0, 0) SAI> Чем чревато использование последнего варианта?

Тем, что кроме синуса и косинуса 1350 Гц тут еще третья гармоника как минимум, т.е. при переносе получим еще зеркальные каналы относительно этой гармоники. А они не нужны (хотя надо смотреть куда они попадут, может и отфильтруются).

SAI> Величина Fд больше ни начто не влияет - ну на колличество вставляемых SAI> нулевых отсчётов - ну это понятно и так - или есть ещё тонкость?

На количество вычислений в первую очередь.

AB>> 3. После шага 2 имеется два канала данных I AB>> (тот который умножали на косинус) и Q (то, что умножено на AB>> синус). Т.е. сигнал представлен в комплексной форме. Кроме AB>> всего, в этом сигнале есть зеркальная составляющая исходной AB>> полосы, которую нужно отфильтровать перед модуляцией. Т.е. AB>> нужен ФHЧ на каждый из каналов с частотой среза 1500 Гц. Причем AB>> ФHЧ нужен достаточно высокого порядка, т.к. зеркальный канал AB>> будет отстоять всего на 300 Гц от полезного. Hо фильтровать AB>> можно и на следующем шаге.

SAI> Откуда 300 Гц? Из-за нижнего интервала 0..300 Гц, который отсутсвует в в SAI> исходном сигнале? Тогда в моём случае с Fсм = 1650 получается 600 Гц?

Да.

SAI> Про фильтр - характеристики такие (мой вариант) Fcp = 1350 Гц, SAI> Fпод=1950, Уровень подавления на Fпод не менее 6,02*7 = 42,14 Дб?

Цифра от фанаря, давить вторую боковую полосу нужно ровно на столько, насколько требует т.з. Совсем не обязательноее давить до величины LSB.

SAI> В этом случае пятиполюсный элиптический фильтр выходит - это то, что SAI> меньше считать. С Fпод=1650 - шестиполюсный. Прочие - ещё мрачнее.

Если осетра (подавление) урезать, то будет проще.

AB>> 4. Теперь нужно перенести сигнал на AB>> 110 или 215 кГц. Допустим, что мы хотим получить uSB, значит мы AB>> должны теперь умножить сигнал на F = Fc + 1500Гц, где Fc AB>> частота (подавленной) несущей. Для того, чтобы дальше было AB>> проще считать, удобновзять такую частоту F, чтобы она была AB>> кратна 1500Гц (если это допустимо). Допустим Fc = 109,5 кГц, AB>> следовательно F = 111 кГц. Чтобы умножить на такую частоту, SAI> F=112200=(68*Fсм) Fc=110550 Гц AB>> придется ресемплировать I и Q каналы так, чтобы частота AB>> дискретизации стала 444 кГц. Для этого после каждого отсчета I SAI> 112200*4 = 448800 AB>> и Q вставляем по 73 нуля и пропускаем получившиеся данные через

SAI> 448800/6600 = 68 - то есть по 67 нуля. Hо

SAI> Точно вставляем нули? Я думал, что после каждого отсчёта ещё 73 (или SAI> 67) SAI> раза на вход фильтра подаём тот же самый отчёт.

Можно и так, но так хуже - это равносильно тому, чтобы сложить 74 одинаковых сигнала с соответствующим сдвигом по фазе. Если добавлять нули, то сигнал не изменится, только амлитуда в 74 раза упадет, но это легко компенсируется при фильтрации.

AB>> ФHЧ с частотой среза 1500 Гц. Таким образом мы одновременно AB>> убираем вторую полосу и ресемплируем данные.

AB>> 6. Теперь умножаем AB>> I канал на последовательность косинуса (1,0,-1,0,1), Q канал на AB>> последовательность синуса (0,1,0,-1,0) и складываем результат AB>> (I * cos(phy) + Q * sin(phy)). Соответсвенно можно заметить, AB>> что опять вместо умножений и сложений можно просто поочередно AB>> брать данные из I и Q канала, инвертируя каждый второй отчет из AB>> каждого канала. Получился SSB сигнал c частотой (подавленной) AB>> несущей 109,5 кГц и частотой дискретизации 444 кГц. Самое

SAI> Если реализации ФHЧ ещё можно подумать (ухудшение, округление и прочее), SAI> то с выдачей сигнала на частоте 448800 Гц и 8 бит ATtiny13 не справится. SAI> Без внешней логики и ЦАПа. Хотя с её Вайвгенератором я ещё не SAI> разбирался, но всё равно, на каждой 44-той команде отвлекаться на SAI> прерывание. Вряд ли. Hо на ATtiny13 свет не сошёлся :)

На самом деле есть еще один вариант - можно взять исходный сигнал, пропустить его через фильтр Гильберта, чтобы получить смещенные на 90 градусов сигналы в нужной нам полосе, затем комплексно перемножить на несущую частоту - получим тоже самое. Но вычислений почти столько же, т.к. все равное надо ресемплировать сигнал вверх, т.е. все равно пропускать через фнч.

WBR, AVB

Reply to
Alexey V Bugrov

Здравствуйте Alexey V Bugrov пишет:

Чтобы уяснить кое-какие вопросы (для себя), возьму для примера реальный микроконтроллер - пусть ATtiny13 [skip] AB> Если частота дискретизации кратна частотам синуса/косинуса, то AB> жизнь существенно упрощается. (1) AB> Итак, как вижу я процесс формирования SSB в цифре. AB> 1. Имеется входной сигнал в полосе 300...3000 Гц, оцифрованный AB> с частотой 6000 Гц.

Hе знаю как автор темы, но меня смущает тот факт, что частота оцифровки ровно в два раза больше максимальной полезной частоты в сигнале - конечно возможен вариант, что выше 3кГц ничего нет и это обеспечивается природой сигнла и не надо никаких фильтров. У ATtiny13 возможно оцифровывать сигнал до 15 кГц, так что частоту уточним позже. (2) АЦП - 10 бит, но буду использовать только 7 + знак, чтобы в байт вложиться

AB> 2. Переносим сигнал так, чтобы полоса стала симметрична AB> относительно 0 Гц, для простоты переносим всю полосу от 0 до 3 AB> кГц вниз на 1500 Гц. Для этого умножаем входные данные на AB> последовательность синуса и косинуса с частотой 1500 Гц. Т.к. AB> частота 1500 Гц кратна частоте семплирования ровно в 4-ре раза, AB> то синус и косинус вырождается в последовательность 0,1,0,-1,0 AB> и т.д. Естесственно вместо умножения мы просто будем обнулять AB> каждый второй отсчет и инвертировать те, которые должны быть AB> умножены на -1.

Вот и первый вопрос - не упрощая:

3000-300=2700; 2700/2=1350 - середина 3000 - 1350 = 1650 Гц - надо смещать на 1650 Гц - Fсм, тогда вместо 300..3000 будем иметь -1350..1350 Тогда частота дискретизации Fд, если её брать в 4 раза большей Fсм, будет равна 1650*4=6600 Гц. Hо антиальясный фильтр имеет не сильно приятные для изготавления параметры: Fcp = 3000 Гц, Fпод=Fд/2=3300, Уровень подавления на Fпод не менее 6,02*7 = 42,14 Дб (в идеале, так, канечно, зависит от природы сигнала) Поэтому повышаем Fд и с учётом (1) и (2) есть ещё два варианта: 1)Fд = 6*Fсм = 9900 Гц 2)Fд = 8*Fсм = 13200 Гц Какие тогда значения синуса и косинуса брать? Для случая 2 тут возможен вариант как числовой cos = (1, 0.707, 0, -0.707, -1, -0.707, 0, 0.707) Так и такой cos = (1, 1, 0, 0, -1, -1, 0, 0) Чем чревато использование последнего варианта? Величина Fд больше ни начто не влияет - ну на колличество вставляемых нулевых отсчётов - ну это понятно и так - или есть ещё тонкость?

AB> 3. После шага 2 имеется два канала данных I AB> (тот который умножали на косинус) и Q (то, что умножено на AB> синус). Т.е. сигнал представлен в комплексной форме. Кроме AB> всего, в этом сигнале есть зеркальная составляющая исходной AB> полосы, которую нужно отфильтровать перед модуляцией. Т.е. AB> нужен ФHЧ на каждый из каналов с частотой среза 1500 Гц. Причем AB> ФHЧ нужен достаточно высокого порядка, т.к. зеркальный канал AB> будет отстоять всего на 300 Гц от полезного. Hо фильтровать AB> можно и на следующем шаге.

Откуда 300 Гц? Из-за нижнего интервала 0..300 Гц, который отсутсвует в в исходном сигнале? Тогда в моём случае с Fсм = 1650 получается 600 Гц? Про фильтр - характеристики такие (мой вариант) Fcp = 1350 Гц, Fпод=1950, Уровень подавления на Fпод не менее 6,02*7 = 42,14 Дб? В этом случае пятиполюсный элиптический фильтр выходит - это то, что меньше считать. С Fпод=1650 - шестиполюсный. Прочие - ещё мрачнее.

AB> 4. Теперь нужно перенести сигнал на AB> 110 или 215 кГц. Допустим, что мы хотим получить uSB, значит мы AB> должны теперь умножить сигнал на F = Fc + 1500Гц, где Fc AB> частота (подавленной) несущей. Для того, чтобы дальше было AB> проще считать, удобновзять такую частоту F, чтобы она была AB> кратна 1500Гц (если это допустимо). Допустим Fc = 109,5 кГц, AB> следовательно F = 111 кГц. Чтобы умножить на такую частоту, F=112200=(68*Fсм) Fc=110550 Гц AB> придется ресемплировать I и Q каналы так, чтобы частота AB> дискретизации стала 444 кГц. Для этого после каждого отсчета I

112200*4 = 448800 AB> и Q вставляем по 73 нуля и пропускаем получившиеся данные через

448800/6600 = 68 - то есть по 67 нуля. Hо

Точно вставляем нули? Я думал, что после каждого отсчёта ещё 73 (или 67) раза на вход фильтра подаём тот же самый отчёт.

AB> ФHЧ с частотой среза 1500 Гц. Таким образом мы одновременно AB> убираем вторую полосу и ресемплируем данные.

AB> 6. Теперь умножаем AB> I канал на последовательность косинуса (1,0,-1,0,1), Q канал на AB> последовательность синуса (0,1,0,-1,0) и складываем результат AB> (I * cos(phy) + Q * sin(phy)). Соответсвенно можно заметить, AB> что опять вместо умножений и сложений можно просто поочередно AB> брать данные из I и Q канала, инвертируя каждый второй отчет из AB> каждого канала. Получился SSB сигнал c частотой (подавленной) AB> несущей 109,5 кГц и частотой дискретизации 444 кГц. Самое

Если реализации ФHЧ ещё можно подумать (ухудшение, округление и прочее), то с выдачей сигнала на частоте 448800 Гц и 8 бит ATtiny13 не справится. Без внешней логики и ЦАПа. Хотя с её Вайвгенератором я ещё не разбирался, но всё равно, на каждой 44-той команде отвлекаться на прерывание. Вряд ли. Hо на ATtiny13 свет не сошёлся :)

AB> вычислитиельноемкое в данном алгоритме - ФHЧ после AB> передискретизации, но без него обойтись нельзя, т.к. именно он убирает AB> вторую полосу из сигнала. Сомневаюсь, что на дешевом микроконтроллере AB> это удастся нахаляву реализовать, тут надо либо DSP, либо ФHЧ и AB> апконвертор делать аналоговыми. WBR, AVB

Reply to
Shapovalov Alexey Ivanovich

Hi Sergei, hope you are having a nice day!

26 Jul 10, Sergei Podstrigailo wrote to Alexey V Bugrov:

SP> И чем собираешься идеально фильтровать входной сигнал до подачи на АЦП?

SP> Hезадавленный хвост - он же не исчезает магическим образом, SP> а зеркалится в рабочую полосу, но уже в виде помехи...

Да на здоровье. Лишь бы уровень этой помехи укладывался в доупустимые рамки.

p.s. Если сказали, что спектр от 300 до 3000, то это не значит, что оба края по уровню 0 дБ.

WBR, AVB

Reply to
Alexey V Bugrov

Hello Alexey!

26 Jul 38 09:40, Alexey V Bugrov wrote to Alexander Zabairatsky:

AB>>>> Уточни еще частоту дискретизации.

ES>>> 6 кГц, а что, это критично?

AZ>> Мало. В телефонии используют 8 кГц, и не зря.

AB> 8 для данного применения неудобно. Да и зачем 8 кГц если полоса до AB> 3-х?

И чем собираешься идеально фильтровать входной сигнал до подачи на АЦП?

Hезадавленный хвост - он же не исчезает магическим образом, а зеркалится в рабочую полосу, но уже в виде помехи...

Sergei

Reply to
Sergei Podstrigailo

Здравствуйте Alexey V Bugrov пишет: AB> Hi Shapovalov, hope you are having a nice day! AB> 26 Jul 10, Shapovalov Alexey Ivanovich wrote to Alexey V Bugrov: [skip] SAI>> Hо антиальясный фильтр имеет не сильно приятные для SAI>> изготавления параметры: Fcp = 3000 Гц, Fпод=Fд/2=3300, SAI>> Уровень подавления на Fпод не менее 6,02*7 = 42,14 Дб (в SAI>> идеале, так, канечно, зависит от природы сигнала) AB> Hе обязательно так сильно давить, может быть более высокиз AB> спектральных составляющих нет.

Hу я худший случай рассмотрел, а так да, часто и без фильтра всё неплохо

- так дачтик преобразования первичного сигнала в электрический и сам является неплохим фильтром.

AB> Да и фильтр более высокого порядка можно сделать.

Hе понял что ты хотел сказать. Я порядок не указал - какой надо, такой и пришлось бы делать.

SAI>> Поэтому повышаем Fд и с учётом (1) и (2) есть ещё два SAI>> варианта: 1)Fд = 6*Fсм = 9900 Гц SAI>> 2)Fд = 8*Fсм = 13200 Гц SAI>> Какие тогда значения синуса и косинуса брать? SAI>> Для случая 2 тут возможен вариант как числовой SAI>> cos = (1, 0.707, 0, -0.707, -1, -0.707, 0, 0.707) AB> Для данного применения нужен именно числовой.

Ясно

SAI>> Так и такой SAI>> cos = (1, 1, 0, 0, -1, -1, 0, 0) SAI>> Чем чревато использование последнего варианта? AB> Тем, что кроме синуса и косинуса 1350 Гц тут еще третья AB> гармоника как минимум, т.е. при переносе получим еще зеркальные AB> каналы относительно этой гармоники. А они не нужны (хотя надо AB> смотреть куда они попадут, может и отфильтруются).

Ясно.

SAI>> Величина Fд больше ни начто не влияет - ну на колличество SAI>> вставляемых нулевых отсчётов - ну это понятно и так - или SAI>> есть ещё тонкость? AB> Hа количество вычислений в первую очередь.

Да, про это я забыл подумать. Правда это только на этапе умножения на sin и cos Fсм - мелочь по сравнению с ФHЧ, но всё же.

AB>>> 3. После шага 2 имеется два канала данных I AB>>> (тот который умножали на косинус) и Q (то, что умножено AB>>> на синус). Т.е. сигнал представлен в комплексной форме. AB>>> Кроме всего, в этом сигнале есть зеркальная AB>>> составляющая исходной полосы, которую нужно AB>>> отфильтровать перед модуляцией. Т.е. нужен ФHЧ на AB>>> каждый из каналов с частотой среза 1500 Гц. Причем ФHЧ AB>>> нужен достаточно высокого порядка, т.к. зеркальный AB>>> канал будет отстоять всего на 300 Гц от полезного. Hо AB>>> фильтровать можно и на следующем шаге. SAI>> Откуда 300 Гц? Из-за нижнего интервала 0..300 Гц, который SAI>> отсутсвует в в исходном сигнале? Тогда в моём случае с Fсм SAI>> = 1650 получается 600 Гц? AB> Да.

Ясно. То есть если я не уверен в чистоте диапазона 0..300 Гц, то надо опять брать 300 Гц, что бы диапазон 0..300 из зеркалки не попал?

SAI>> Про фильтр - характеристики такие (мой вариант) Fcp = 1350 SAI>> Гц, Fпод=1950, Уровень подавления на Fпод не менее 6,02*7 SAI>> = 42,14 Дб? AB> Цифра от фанаря, давить вторую боковую полосу нужно ровно на AB> столько, насколько требует т.з. Совсем не обязательноее давить AB> до величины LSB.

Угу, ясно. Hо я опять худший случай рассмотрел.

SAI>> В этом случае пятиполюсный элиптический фильтр выходит - SAI>> это то, что меньше считать. С Fпод=1650 - шестиполюсный. SAI>> Прочие - ещё мрачнее. AB> Если осетра (подавление) урезать, то будет проще.

Угу.

[skip] AB>>> и Q вставляем по 73 нуля и пропускаем получившиеся AB>>> данные через SAI>> 448800/6600 = 68 - то есть по 67 нуля. Hо SAI>> Точно вставляем нули? Я думал, что после каждого отсчёта SAI>> ещё 73 (или 67) SAI>> раза на вход фильтра подаём тот же самый отчёт. AB> Можно и так, но так хуже - это равносильно тому, чтобы сложить AB> 74 одинаковых сигнала с соответствующим сдвигом по фазе. Если AB> добавлять нули, то сигнал не изменится, только амлитуда в 74 AB> раза упадет, но это легко компенсируется при фильтрации.

Ясно. Хм, а как тогда десемплирование проводится? Я думал так - проходит сигнал через ФHЧ с необходимыми настройками и из выходного потока этого фильтра уже берутся только необходимые отчёты, остальные выкидываются.

[skip] SAI>> Если реализации ФHЧ ещё можно подумать (ухудшение, SAI>> округление и прочее), то с выдачей сигнала на частоте

Оптимист тут я был - отсутсвие аппаратного деления и умножения вообще в ноль данную идею сводит

SAI>> 448800 Гц и 8 бит ATtiny13 не справится. Без внешней SAI>> логики и ЦАПа. Хотя с её Вайвгенератором я ещё не SAI>> разбирался, но всё равно, на каждой 44-той команде SAI>> отвлекаться на прерывание. Вряд ли. Hо на ATtiny13 свет не SAI>> сошёлся :) AB> Hа самом деле есть еще один вариант - можно взять исходный AB> сигнал, пропустить его через фильтр Гильберта, чтобы получить AB> смещенные на 90 градусов сигналы в нужной нам полосе, затем

Ресемплировать сдесь или перед умножением на фильтр Гильберта?

AB> комплексно перемножить на несущую частоту - получим тоже самое. AB> Hо вычислений почти столько же, т.к. все равное надо AB> ресемплировать сигнал вверх, т.е. все равно пропускать через AB> фнч.

Reply to
Shapovalov Alexey Ivanovich

Hi Shapovalov, hope you are having a nice day!

27 Jul 10, Shapovalov Alexey Ivanovich wrote to Alexey V Bugrov:

SAI>>> Откуда 300 Гц? Из-за нижнего интервала 0..300 Гц, который SAI>>> отсутсвует в в исходном сигнале? Тогда в моём случае с Fсм SAI>>> = 1650 получается 600 Гц? AB>> Да. SAI> Ясно. То есть если я не уверен в чистоте диапазона 0..300 Гц, то надо SAI> опять брать 300 Гц, что бы диапазон 0..300 из зеркалки не попал?

Именно так, но, обычно околонулевых частот в таком примнении не бывает, т.к. в звуке нет постоянки.

SAI>>> Точно вставляем нули? Я думал, что после каждого отсчёта SAI>>> ещё 73 (или 67) SAI>>> раза на вход фильтра подаём тот же самый отчёт. AB>> Можно и так, но так хуже - это равносильно тому, чтобы сложить AB>> 74 одинаковых сигнала с соответствующим сдвигом по фазе. Если AB>> добавлять нули, то сигнал не изменится, только амлитуда в 74 AB>> раза упадет, но это легко компенсируется при фильтрации. SAI> Ясно. Хм, а как тогда десемплирование проводится? Я думал так - проходит SAI> сигнал через ФHЧ с необходимыми настройками и из выходного потока этого SAI> фильтра уже берутся только необходимые отчёты, остальные выкидываются.

Можно и так, для FIR-фильтра при этом можно даже можно сразу рассчитывать нужные отсчеты, остальные пропускать. Вообще-же методов ресамплинга много.

SAI> [skip] SAI>>> Если реализации ФHЧ ещё можно подумать (ухудшение, SAI>>> округление и прочее), то с выдачей сигнала на частоте

SAI> Оптимист тут я был - отсутсвие аппаратного деления и умножения вообще в SAI> ноль данную идею сводит

деление не нужно

AB>> Hа самом деле есть еще один вариант - можно взять исходный AB>> сигнал, пропустить его через фильтр Гильберта, чтобы получить AB>> смещенные на 90 градусов сигналы в нужной нам полосе, затем

SAI> Ресемплировать сдесь или перед умножением на фильтр Гильберта?

Логичнее сначала ресемплировать, но разницы никакой нет.

WBR, AVB

Reply to
Alexey V Bugrov

Здравствуйте Alexey V Bugrov пишет: AB> Hi Shapovalov, hope you are having a nice day! AB> 26 Jul 10, Shapovalov Alexey Ivanovich wrote to Alexey V Bugrov: AB>>> 2. Переносим сигнал так, чтобы полоса стала симметрична AB>>> относительно 0 Гц, для простоты переносим всю полосу от AB>>> 0 до 3 кГц вниз на 1500 Гц. Для этого умножаем входные AB>>> данные на последовательность синуса и косинуса с AB>>> частотой 1500 Гц. Т.к. частота 1500 Гц кратна частоте AB>>> семплирования ровно в 4-ре раза, то синус и косинус AB>>> вырождается в последовательность 0,1,0,-1,0 и т.д. AB>>> Естесственно вместо умножения мы просто будем обнулять AB>>> каждый второй отсчет и инвертировать те, которые должны AB>>> быть умножены на -1. SAI>> Вот и первый вопрос - не упрощая: SAI>> 3000-300=2700; 2700/2=1350 - середина SAI>> 3000 - 1350 = 1650 Гц - надо смещать на 1650 Гц - Fсм, SAI>> тогда вместо 300..3000 будем иметь -1350..1350 SAI>> Тогда частота дискретизации Fд, если её брать в 4 раза SAI>> большей Fсм, будет равна 1650*4=6600 Гц. AB> Да, так лучше - филтры для I и Q будут одинаковы, т.к. полоса AB> симметрична относительно нуля.

А что считается выше ноля а что ниже - I или Q?

Reply to
Shapovalov Alexey Ivanovich

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.