Форум Радиолюбителей

Weaver (математика)

33858 просмотров, 25 ответов

ra0ahc 23 сентября 2020 г. в 02:55#1
База
ra0ahc 23 сентября 2020 г. в 03:01#2
формулы
Relayer 23 сентября 2020 г. в 07:08#3
Так это еще у Полякова 35 лет тому назад было расписано. Или я что-то пропустил?
ra0ahc 23 сентября 2020 г. в 07:18#4
Может быть. Я за Поляковым не следил.
Просто, вроде все понятно и все очевидно, но вот "так" нашел только это.
Игорь 2 23 сентября 2020 г. в 07:29#5
но вот "так" нашел только это.

Да это бред сивой кобылы. Без фазовращателя не делается. Даже искать не интересно, где там ошибка, формулы тригонометрии очевидны, кто забыл, могу скинуть...

Так это еще у Полякова 35 лет тому назад было расписано.

Не, не путайте - у Полякова НЧ фазовращатель стоит. Без него схема работать не может...
Relayer 23 сентября 2020 г. в 07:40#6
Да это бред сивой кобылы. Без фазовращателя не делается.
Игорь, я вас огорчу. Эти сивые кобылы вполне ничего так себе работают. Как в аналоге так и в цифре. Вот я пару месяцев назад на ADAU1761 делал Уивера - нет фазовращателей по НЧ. Совсем. И работает зараза.
Не, не путайте - у Полякова НЧ фазовращатель стоит. Без него схема работать не может.
Это в классическом фазовом методе нужен фазовращатель как по ВЧ так и по НЧ. А Уивер - это фазо-фильтровый метод. Тут нужен крутой фильтр, а фазовращатель не нужен
Качайте Полякова http://publ.lib.ru/ARCHIVES/P/POLYAKOV_Vladimir_Timofeevich/Polyakov_V.T._Transivery_pryamogo_preobrazovaniya.(1984).[doc-ocr].zip и читайте 5ю главу с 13й страницы: "5. ФАЗОФИЛЬТРОВЫЙ ТРАНСИВЕР ПРЯМОГО ПРЕОБРАЗОВАНИЯ"
r1tx 23 сентября 2020 г. в 07:41#7
где бред ? на первом рисунке уивер классический вроде.
r1tx 23 сентября 2020 г. в 07:43#8
в поляковской книжке был.
Игорь 2 23 сентября 2020 г. в 09:24#9
Тут нужен крутой фильтр

Возможно, на фильтры я внимание и не обратил, у меня вся арифметика под смесители написана с отсечкой верхней боковушки - см. картинку.
Гляну на досуге...
Игорь 2 23 сентября 2020 г. в 09:45#10
Блин, да там гетеродин в середине частотного диапазона сигнала ставится, вспомнил теперь.
Всерьёз почему-то никогда подобное не воспринимал, почему - уже и не вспомню, но, наверное, неспроста.
Везде чисто фазовый метод был, у меня в том же маскираторе куча однополосных формирователей/деформирователей стояла...
r1tx 23 сентября 2020 г. в 09:49#11
да потому что так тон по середине стоит не избавиться от него проклятого. Тот вивер с заворотом частотного спектра без переноса.
А этот на любом ультразвуке конфета. как всегда аналог дает идеи а цифра дает возможность реализовать с качеством.
Relayer 23 сентября 2020 г. в 09:57#12
там гетеродин в середине частотного диапазона сигнала ставится
Это он в аналоговом Уивере ставится. Потому что фильтр с крутым скатом проще сделать. А в цифре нет таких ограничений и второй гетеродин работает в области ультразвука - за пределами полосы пропускания. Но даже если делать гетеродин в полосе пропускания то в цифре он легко задавливается в ноль гребенкой режекторных IIR фильтров, что собственно я у себя и сделал. Провал в середине речевого спектра на разборчивость не влияет.
Игорь 2 23 сентября 2020 г. в 10:13#13
Провал в середине речевого спектра на разборчивость не влияет.

Во-во-во, вот Вы мне и напомнили, почему я эту идею сразу же отмёл - портить звук я не хотел категорически - у меня же в тракте маскирования оказывалось этих преобразователей боковушек 4 штуки последовательно...
GenaSPB 24 сентября 2020 г. в 01:43#14
В цифровом тракте этот тон сильно за сотню децибел подавлен. И не режекторами а просто за счет идентичности трактов квадратур. Кстати целочисленка даже было бы лучше.... но теоретически. На практике правучка одинарной точности вполне.
Relayer 24 сентября 2020 г. в 03:04#15
В цифровом тракте этот тон сильно за сотню децибел подавлен. И не режекторами а просто за счет идентичности трактов квадратур.
Если первый гетеродин цифровой на фпга то да. А если он аналоговый? Тогда без режекторов никак.
GenaSPB 24 сентября 2020 г. в 03:17#16
Да понятно. Я про fpga.
GenaSPB 24 сентября 2020 г. в 04:14#17
Кстати, маскиратор с полностью цифровой обработкой тоже не должен свистеть.
Игорь 2 24 сентября 2020 г. в 05:11#18
Кстати, маскиратор с полностью цифровой обработкой тоже не должен свистеть.

У меня он был полностью аналоговый. Сто лет назад дело было...
ra0ahc 3 октября 2020 г. в 05:39#19
ЛАБА
Смеситель

freq = 400;//сигнал герц
freqOpora = 2000;// несушка

Заполнение буферов выглядит так:

float32_t amp = 600;//амплитуда, макс 2048 для 12бит

for (int i = 0; i < FRAME_SIZE; i++) {
float32_t opora = arm_sin_f32(phaseOpora);
float32_t signal = arm_sin_f32(phase);


pOutDac[dacTxBankNawNumber][i ] = ((uint32_t) (amp + signal*opora * amp));

phase += delta;
if (phase >= pp) phase -= pp;

phaseOpora += deltaOpora;
if (phaseOpora >= pp) phaseOpora -= pp;

opora = arm_sin_f32(phaseOpora);
signal = arm_sin_f32(phase);

pOutDac[dacTxBankNawNumber][i ] |= (((uint32_t) (amp + signal*opora *amp))) << 16;
phase += delta;
if (phase >= pp) phase -= pp;

phaseOpora += deltaOpora;
if (phaseOpora >= pp) phaseOpora -= pp;

}
ra0ahc 3 октября 2020 г. в 05:42#20
а вот тоже самое, но для сигнала 645Гц
ra0ahc 3 октября 2020 г. в 08:28#21
После запуска FIR фильтра на 3кГц + шум
Получился на выходе цап такой сигнал
ra0ahc 3 октября 2020 г. в 09:08#22
Интересный феномен я нашел. Не знаю что это за глюк в математике. Но вот смотрите (вопрос к математикам)

амплитуду умножаю на 10. (все числа float)
float32_t amp = 199*10;
.
.
дальше перемножаю сигналы (они тоже float) и делю на теже 10. цифра от -1 до +1

arrDac[i ] = (signal* opora)/10; //цифра от -1 до +1

дальше формирую амплитуду для цап от 0...4000
умножаю на амплитуду и смещаю на эту же амплитуду, убираю отрицательный значения.

pOutDac[dacTxBankNawNumber][y] = (uint32_t) (amp + firOutDac[i ] * amp);

И получается вот такая красивая картинка....
(все дальше 3кГц это перегруз звуковой платы, в программе работает фир фильтр со срезом 3кГц)
ra0ahc 3 октября 2020 г. в 09:10#23
А теперь убираю умножения 10 и деление на 10
и получается вот такая картинка
ra0ahc 3 октября 2020 г. в 09:55#24
ачх FIR
ra0ahc 4 октября 2020 г. в 01:14#25
Нашел причину
Программер фигов. А всего то надо было выспаться.
Смещение амплитуды надо делать константой.

pOutDac[dacTxBankNawNumber][y ] = (uint32_t) (2048 + firOutDac[i-1] * amp);