реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Смесители цифровых сигналов
TViT
сообщение Oct 18 2010, 16:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016



Ребят подскажите как сложить два сигнала уже писал на другом форуме (http://forum.sources.ru/index.php?showtopic=316049), но что-то там никаких, даже попыток направить в нужную сторону, понимаю что скорее всего это просто, но где почитать или где на пальцах принцип этого изложен в инете не нашел, именно программная реализация, электронная расписана везде про смесители...
---------------------------------------------скопировано из форума
Всем привет! Кто нибудь сталкивался со смешением сигналов мне нужно 2 разных типа(метода) смешения. Первый линейный реализуется оч просто значения первого звукового файла (WAV) + второго (WAV) файла и разделить результат на 2. На скриншоте видно результат смешение синусоид 87Гц и 877Гц.

tmp1 = DB_Mas1(cnt1) 'последовательные выборки первого файла (WAV)
tmp2 = DB_Mas2(cnt2) 'последовательные выборки второго файла (WAV)
If AmlMethod = True Then
MSFlexGrid1.TextMatrix(MSFlexGrid1.row, MSFlexGrid1.col)= Round((tmp1 + tmp2) / 2) ' забиваем послед ячейки в программе
Else
...

Второй метод нужен нелинейный где-то читал он через умножение делается результат должен содержать в простейшем случае разность и сумму смешиваемых частот, как это реализовать для тех же переменных tmp1 tmp2 незнаю, простое перемножение делает какую-то кашу. Могут получатся и другие гармоники по нисходящей мощности но главной получить основные разность и сумма частот 2х синусоид.
----------------------------------------------
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Oct 18 2010, 16:44
Сообщение #2


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Теория смесителей в популярном изложении...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
TViT
сообщение Oct 18 2010, 16:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016



DRUID3 я читал там (это еднсьвенный сайт где хоть чтото описано), но не понял особо что откуда берется, именно эти формулы sin(A) sin (cool.gif = (1/2) cos(A + cool.gif - (1/2) cos(A - cool.gif, Ai.sin(2π.fi.t) и Ao.sin(2π.fo.t), Ai.sin(2π.fi.t).Ao.sin(2π.fo.t)= (1/2)AiAo{cos[2π.t(fo + fi)]- cos[2π.t(fo - fi)]} сигналы как я понимаю синусами описаны, а я в мат не силен и мне нужен именно мой частный случай когда есть последовательные выборки 2х сигналов в переменных tmp1, tmp2 как вывести формулы именно к моим 2 переменным laughing.gif Что на что умножать делить мои переменные. Пишу просто программу для AVR32 на VB вот на этом остановился... Простое смешение реализовано скриншот как раз из программы.

Сообщение отредактировал TViT - Oct 18 2010, 16:55
Go to the top of the page
 
+Quote Post
TViT
сообщение Oct 18 2010, 21:41
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016



Кстати там еще нужен коэффициент нелинейности как я понимаю, если описывать мат-ки физ процессы происходящие например в смесителе простейшем на диоде, или мосте из диодов, то нелинейные свойства диода нужно как либо менять, например сильный изгиб хар-ки подставляю в прогу коэффициент соответствующий, небольшая кривизна соответственно другой коэффициент... что-то типа так…
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Oct 19 2010, 00:42
Сообщение #5


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(TViT @ Oct 18 2010, 19:51) *
DRUID3 я читал там (это еднсьвенный сайт где хоть чтото описано), но не понял особо что откуда берется...


Цитата(TViT @ Oct 18 2010, 19:51) *
именно эти формулы sin(A) sin (cool.gif = (1/2) cos(A + cool.gif - (1/2) cos(A - cool.gif, Ai.sin(2π.fi.t) и Ao.sin(2π.fo.t), Ai.sin(2π.fi.t).Ao.sin(2π.fo.t)= (1/2)AiAo{cos[2π.t(fo + fi)]- cos[2π.t(fo - fi)]} сигналы как я понимаю синусами описаны...

Эти формулы берутся из школьного учебника тригонометрии... там целое семейство формул - для произведения синусов, косинусов и смешанного...

Цитата(TViT @ Oct 18 2010, 19:51) *
а я в мат не силен

...я как-бы тоже...

Цитата(TViT @ Oct 18 2010, 19:51) *
и мне нужен именно мой частный случай когда есть последовательные выборки 2х сигналов в переменных tmp1, tmp2 как вывести формулы именно к моим 2 переменным laughing.gif Что на что умножать делить мои переменные. Пишу просто программу для AVR32 на VB вот на этом остановился... Простое смешение реализовано скриншот как раз из программы.

Вам нужно просто посемплово умножать сигналы... Идеальный смеситель - это арифметический умножитель...

Цитата(TViT @ Oct 19 2010, 00:41) *
Кстати там еще нужен коэффициент нелинейности как я понимаю, если описывать мат-ки физ процессы происходящие например в смесителе простейшем на диоде, или мосте из диодов, то нелинейные свойства диода нужно как либо менять, например сильный изгиб хар-ки подставляю в прогу коэффициент соответствующий, небольшая кривизна соответственно другой коэффициент... что-то типа так…

...какой ужас! Еще одна жертва системы образования на просторах СНГ? biggrin.gif Вам не нужно моделировать(ну, конечно, если это не программа ВЧ анализа/моделирования) неидеальности физической реализации смесителя. Разработчики аналоговых каскадов наоборот стараются уйти от нелинейности умножения на ВАХ полупроводниковых или вакуумных приборов минимизировав в разложении Тейлора(e^x = 1 + x + x2/2! + x3/3! + x4/4! etc...) все члены за ислкючением линейного. Сделать это можно применяя например балансную схему (четных порядков составляющие при этом компенсируются, но нечетных правда удвоятся). Или применяя вообще параметрический принцип - там совершенно другая формула. Но Вам все это не нужно! Просто сделайте как я напейсал жирным шрифтом wink.gif ...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Sleepin' Cat...
сообщение Oct 19 2010, 05:24
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 22-12-09
Из: SPb
Пользователь №: 54 402



Цитата(TViT @ Oct 18 2010, 20:18) *
Ребят подскажите как сложить два сигнала уже писал на другом форуме (http://forum.sources.ru/index.php?showtopic=316049), но что-то там никаких, даже попыток направить в нужную сторону, понимаю что скорее всего это просто, но где почитать или где на пальцах принцип этого изложен в инете не нашел, именно программная реализация, электронная расписана везде про смесители...
---------------------------------------------скопировано из форума
Всем привет! Кто нибудь сталкивался со смешением сигналов мне нужно 2 разных типа(метода) смешения. Первый линейный реализуется оч просто значения первого звукового файла (WAV) + второго (WAV) файла и разделить результат на 2. На скриншоте видно результат смешение синусоид 87Гц и 877Гц.

tmp1 = DB_Mas1(cnt1) 'последовательные выборки первого файла (WAV)
tmp2 = DB_Mas2(cnt2) 'последовательные выборки второго файла (WAV)
If AmlMethod = True Then
MSFlexGrid1.TextMatrix(MSFlexGrid1.row, MSFlexGrid1.col)= Round((tmp1 + tmp2) / 2) ' забиваем послед ячейки в программе
Else
...

Второй метод нужен нелинейный где-то читал он через умножение делается результат должен содержать в простейшем случае разность и сумму смешиваемых частот, как это реализовать для тех же переменных tmp1 tmp2 незнаю, простое перемножение делает какую-то кашу. Могут получатся и другие гармоники по нисходящей мощности но главной получить основные разность и сумма частот 2х синусоид.
----------------------------------------------



Мда. На исходниках.ру Вам вряд ли ответят, там больше по программированию форум.
На всякий случай: если Вам необходимо получить на выходе разностные гармоники, то полученную поэлементным умножением "кашу", надо пропустить через соответствующий полосовой фильтр. Тогда на выходе будет сигнал соответствующей частоты.
Go to the top of the page
 
+Quote Post
TViT
сообщение Oct 19 2010, 06:39
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016



DRUID3 Я тоже понял после прочтения о смесителях что это что-то с умножением должно быть связано поэтому первым делом сделал умножение tmp1*tmp2 только от получ произведения взял корень чтобы размах сигнала снизить до примерно размаха входных сигналов тоже что-то непонятное получается после FFT частоты сдвигаются не получается разности и суммы входных частот.


Sleepin' Cat... & DRUID3 Домой приду попробую еще раз по всякому вечером выложу графики.
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 19 2010, 07:34
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
TViT:
Всем привет! Кто нибудь сталкивался со смешением сигналов мне нужно 2 разных типа(метода) смешения. Первый линейный реализуется оч просто значения первого звукового файла (WAV) + второго (WAV) файла и разделить результат на 2. На скриншоте видно результат смешение синусоид 87Гц и 877Гц.

tmp1 = DB_Mas1(cnt1) 'последовательные выборки первого файла (WAV)
tmp2 = DB_Mas2(cnt2) 'последовательные выборки второго файла (WAV)
If AmlMethod = True Then
MSFlexGrid1.TextMatrix(MSFlexGrid1.row, MSFlexGrid1.col)= Round((tmp1 + tmp2) / 2) ' забиваем послед ячейки в программе
Else
...

Второй метод нужен нелинейный где-то читал он через умножение делается результат должен содержать в простейшем случае разность и сумму смешиваемых частот, как это реализовать для тех же переменных tmp1 tmp2 незнаю, простое перемножение делает какую-то кашу. Могут получатся и другие гармоники по нисходящей мощности но главной получить основные разность и сумма частот 2х синусоид.


Собственно, смешение сигналов (микширование) - взвешенная поотсчетная сумма.
Все остальные "смесители" - это преобразователи частоты. Преобразование частоты - умножение на комплексную экспоненту нужной частоты. (Ну и берем вещественную часть, если комплексный сигнал не нужен). Чего тут изобретать?

Код
x=sin(2*pi*100/8000*(0:1023));
y=x.*exp(j*2*pi*1000/8000*(0:1023));
plot(0:8000/1024:8000-8000/1024,abs(fft(real(y))))
grid on

Go to the top of the page
 
+Quote Post
TViT
сообщение Oct 19 2010, 15:41
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016



Все получилось просто умножением! rolleyes.gif Спасибо большое всем! Как и говорили wassat.gif
Получается я в самом начале ошибся чтобы привести сигнал к размаху как у входных (оба синуса одинаковые только частоты разные) с чего то решил брать значения корень из полученого произведения и получилась каша на FFT и графике...

Сообщение отредактировал TViT - Oct 19 2010, 15:46
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 15:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016