Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Смесители цифровых сигналов
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
TViT
Ребят подскажите как сложить два сигнала уже писал на другом форуме (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х синусоид.
----------------------------------------------
TViT
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
Кстати там еще нужен коэффициент нелинейности как я понимаю, если описывать мат-ки физ процессы происходящие например в смесителе простейшем на диоде, или мосте из диодов, то нелинейные свойства диода нужно как либо менять, например сильный изгиб хар-ки подставляю в прогу коэффициент соответствующий, небольшая кривизна соответственно другой коэффициент... что-то типа так…
DRUID3
Цитата(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 ...
Sleepin' Cat Smile
Цитата(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х синусоид.
----------------------------------------------



Мда. На исходниках.ру Вам вряд ли ответят, там больше по программированию форум.
На всякий случай: если Вам необходимо получить на выходе разностные гармоники, то полученную поэлементным умножением "кашу", надо пропустить через соответствующий полосовой фильтр. Тогда на выходе будет сигнал соответствующей частоты.
TViT
DRUID3 Я тоже понял после прочтения о смесителях что это что-то с умножением должно быть связано поэтому первым делом сделал умножение tmp1*tmp2 только от получ произведения взял корень чтобы размах сигнала снизить до примерно размаха входных сигналов тоже что-то непонятное получается после FFT частоты сдвигаются не получается разности и суммы входных частот.


Sleepin' Cat... & DRUID3 Домой приду попробую еще раз по всякому вечером выложу графики.
thermit
Цитата
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

TViT
Все получилось просто умножением! rolleyes.gif Спасибо большое всем! Как и говорили wassat.gif
Получается я в самом начале ошибся чтобы привести сигнал к размаху как у входных (оба синуса одинаковые только частоты разные) с чего то решил брать значения корень из полученого произведения и получилась каша на FFT и графике...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.