Вверх ↑
Этот топик читают: Гость
Ответов: 8928
Рейтинг: 823
#46: 2013-09-16 10:26:13 ЛС | профиль | цитата
rolin, путать правый-левый каналы возможно при определении длины кадра, вдруг там ещё какие служебные байты есть, замените строку IC на вот эту
_hi_OnEvent(onTitle, int2str(b1)+';'+int2str(b2)+';'+int2str(Length(_Str))); //выводим шапку кадра
(добавил длину кадра), выведите в заголовок формы и понаблюдайте, не проскакивают-ли отличающиеся значения.
Более обстоятельно
Леонид писал(а):
сорудить кварцевый генераторик на одном транзисторе и подать сигнал с него на антенный вход (через делитель конечно).
Потом можно будет вместо графиков подцепить StrList-ы, записать секунду-другую и проверить цифру в спокойной обстановке

карма: 19

0
Ответов: 91
Рейтинг: 1
#47: 2013-09-17 19:49:41 ЛС | профиль | цитата
http://forum.hiasm.com/forum_serv.php?q=56&id=3597
Сохранил 48к отсчетов каждого канала. Сигнал с генератора, антенна отключена. Основной сигнал - +10кГц, но видна и вторая гармоника на 20кГц причем и в зеркальном канале тоже.
------------ Дoбавленo в 19.49:
PS Длина кадра определяется правильно, 1442 байта
карма: 1

0
Ответов: 8928
Рейтинг: 823
#48: 2013-09-17 21:16:07 ЛС | профиль | цитата
rolin, дискретизация 48 кГц ?
карма: 19

0
Ответов: 91
Рейтинг: 1
#49: 2013-09-17 22:24:37 ЛС | профиль | цитата
Да да.
карма: 1

0
Ответов: 8928
Рейтинг: 823
#50: 2013-09-18 11:20:04 ЛС | профиль | цитата
rolin, что-то мне показалось, старший бит не тот, попробуйте ещё раз напишите вместо b1-->b3, а вместо b3-->b1 (где "Считаем 24 бита")
Растройка в 10 кГц велика, меньше 5 отсчётов на период, плохо видно, сделайте на 1 кГц
------------ Дoбавленo в 11.20:
rolin, ни одного положительного значения, это соответствует XX FF FF или XXXXXXXX1111111111111111 "Ничего не понимаю!" (с) Ещё раз запишите секунду входных строк по схемке

Add(UDP,8300796,91,77)
{
link(onReceive,9884603:doEvent1,[])
}
Add(Hub,9884603,140,77)
{
link(onEvent2,5694845:doCompare,[(165,90)(165,230)])
}
Add(Button,9574327,84,154)
{
Left=15
Top=25
Caption="Save"
Data=Integer(1)
link(onClick,762578:doEvent1,[])
}
Add(Counter,13404245,259,175)
{
Max=99999999
}
Add(If_else,16259821,259,231)
{
Type=3
Op2=Integer(200)
link(onTrue,16238971:doAdd,[])
link(onFalse,9013417:doEvent1,[(298,244)(298,272)])
link(Op1,13404245:Count,[])
}
Add(If_else,5694845,175,224)
{
Op2=Integer(1)
link(onTrue,8847552:doEvent1,[])
link(Op1,12761046:Value,[])
}
Add(Memory,12761046,175,168)
{
Default=Integer(0)
}
Add(Hub,762578,126,154)
{
OutCount=3
link(onEvent1,16238971:doClear,[(324,160)(324,244)])
link(onEvent2,13404245:doReset,[(242,167)(242,195)])
link(onEvent3,12761046:doValue,[])
}
Add(Hub,8847552,224,224)
{
link(onEvent1,13404245:doNext,[(249,230)(249,181)])
link(onEvent2,16259821:doCompare,[])
}
Add(StrList,16238971,343,231)
{
link(FileName,4834437:Value,[])
}
Add(Memory,4834437,350,161)
{
Default=String(str_rolin.txt)
}
Add(Hub,9013417,308,266)
{
link(onEvent1,16238971:doSave,[])
link(onEvent2,12761046:doClear,[(333,279)(333,293)(158,293)(158,181)])
}
(остальное без изменений). Ну и выходные отсчёты, но с 1 кГц. Корреляции с периодом 240 значений не обнаружил, значит каналы не меняются.
карма: 19

0
Ответов: 91
Рейтинг: 1
#51: 2013-09-18 20:27:52 ЛС | профиль | цитата
Леонид, так вы меня неправильно поняли. Вы же сами просили
Леонид писал(а):
вместо графиков подцепить StrList-ы, записать секунду-другую и проверить цифру в спокойной обстановке

вот я и записал 48к готовых для проигрывания 1 секунды отсчетов и это никак не кадры с железа.

Я сформировал типа кадр в виде 0000 2A0000 88FFFF 2A0000 88FFFF 2A0000 88FFFF 2A0000 88FFFF и так далее полный кадр
то есть в каждом канале всегда определенное значение +42 и -120. Подаю этот кадр на схему и убеждаюсь что все работает правильно и перемешивания нет.
Надо обратить внимание на сам BASS.
карма: 1

0
Ответов: 8928
Рейтинг: 823
#52: 2013-09-18 22:11:26 ЛС | профиль | цитата
rolin писал(а):
записал 48к готовых для проигрывания 1 секунды отсчетов
Так я с ними поработал и удивился: все отсчёты отрицательные, поэтому и попросил ещё раз с железа секундочку записать, но 1 кГц (у меня-то Вашего железа нет и синтезатор на Si570 )
Сейчас BASS буду проверять от smallint до int64, может что и прияснится
карма: 19

0
Ответов: 91
Рейтинг: 1
#53: 2013-09-19 11:31:43 ЛС | профиль | цитата
Леонид, видимо сигнал был слаб, не выше отрицательного смещения.
Исправляюсь, http://forum.hiasm.com/forum_serv.php?q=56&id=3602 теперь сигнал с уровнем -10 дб и разносом 1 кГц. Зеркало вижу
как сигнал в -40дб.

Сделал ещё пару опытов, убедился что наша схема работает правильно.
------------ Дoбавленo в 11.31:
Да, ещё деталь. Для того чтобы появилось зеркало, нужно чтобы между каналами появился фазовый сдвиг. То есть сигнал одинаково представлен в обеих каналах, но чтобы не было зеркала, фазовый сдвиг должен быть ровно 90 градусов.

карма: 1

0
Ответов: 8928
Рейтинг: 823
#54: 2013-09-19 15:02:43 ЛС | профиль | цитата
rolin, в "спокойной остановке" посчитал Вашу секунду, результат хороший, если не сказать отличный:
Подавление_Боковой.jpg
карма: 19

0
файлы: 1Подавление_Боковой.jpg [24.7KB] [301]
Ответов: 91
Рейтинг: 1
#55: 2013-09-19 16:11:49 ЛС | профиль | цитата
Дааа... Цифры впечатляют.
Получается, что BASS вносит свои коррективы. Неспроста некоторые примеры с ним работают очень глючно.
А нельзя ли проигрывать звук через WDM или на худой конец, через ASIO ?
карма: 1

0
Ответов: 8928
Рейтинг: 823
#56: 2013-09-19 16:30:27 ЛС | профиль | цитата
rolin, проще получив эти цифры разложить их в Фурье, вывести на гистограмму, по ней выбирать полосу приёма и эту полосу воспроизводить, т. е. сделать SDR (без виртуальной карты)
карма: 19

0
Ответов: 91
Рейтинг: 1
#57: 2013-09-19 17:04:35 ЛС | профиль | цитата
Да я вижу что у вас руки чешутся
Но проще мне залезть в FPGA, заменить протокол на SDR-IP совместимый, сменить частоту генератора чтобы сэмплы были кратны 50к, и вуаля, передача данных в SDR-Console без всяких звуковух. Собственно, такой вариант железа я уже разработал.Реализация - вопрос времени.
Жаль, что программно это сделать не получилось.

карма: 1

0
Ответов: 8928
Рейтинг: 823
#58: 2013-09-19 22:27:46 ЛС | профиль | цитата
rolin, тогда удачи!
карма: 19

0
Ответов: 91
Рейтинг: 1
#59: 2013-09-20 14:56:30 ЛС | профиль | цитата
Леонид, спасибо большое за помощь и поддержку!
Позвольте последний вопрос. Я вижу, вы в ЦОС разбираетесь. Скажите, можно ли сделать правильную передискретизацию с 192к до 200к чтобы панорама правильно показывалась и артефактов не было.
Я провёл множество опытов, дублируя некоторые данные либо удаляя данные с более высокой частоты дискретизации, но в итоге панорама была с ошибками и дефекты звука присутствуют. Нужен более серьёзный алгоритм передискредитации, тогда можно будет передать сэмплы ,преобразовав кадры в SDR-IP протокол.
карма: 1

0
Ответов: 8928
Рейтинг: 823
#60: 2013-09-20 16:40:22 ЛС | профиль | цитата
rolin, алгоритмы "передискретизации" разные существуют, от простейших линейных, до разложения Фурье по одной дискретизации и обратного Фурье по другой дискретизации. В последнем случае не обойтись без нагрузки на процессор, т. к. одно из этих преобразований не будет "быстрым".
Простое линейное можете нарисовать следующим образом: 192000:200000 = 24:25, чтобы зрительно представить чертите линию, сверху делаете 24 отрезка, снизу 25 и считаете в какой пропорции от каких верхних отрезков зависит длина нижних, получатся 25 формул по которым и будете делать из каждых 24 отсчётов 25
карма: 19

0
60
Сообщение
...
Прикрепленные файлы
(файлы не залиты)