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