Перейти к содержанию
    

TViT

Участник
  • Постов

    80
  • Зарегистрирован

  • Посещение

Весь контент TViT


  1. А еще народ подскажите, а как нелинейно усиливать или ослабить например массив данных от 10 до 100? Данные должны передаваться на алгоритм который вернет пересчитанные нелинейно данные. Например 100 максимум ослабление нет (*1), а минимальные данные 10 нужно ослабить (например * 0.02). И желательно чтобы можно было менять кривизну ослабления (нелинейности). Через Логарифм непойму как сделать Log(x) просто степень возвращее, как это испоьзовать для ослабления данных непойму. Простите за простые вопросы.
  2. Хорошо спасибо попробую сделать обычный фильтр, делал через ВЧ фильтр, но он что-то давит сильно сигнал нужно поднимать усиление чтобы выйти из минуса в единицу, а на высоких чтобы больше единицы было, незнаю не делал такого, попробую А вот что привлекло внимание так это функция yulewalk в matlab, Scilab она как я понял для этих целей как раз оч подходит буду пробовать. В начале тоже поставлю железный фильтр на ОУ просто ради интереса пробую повсякому :rolleyes:
  3. SPACUM Можно линейный, но лучше не линейный поскольку и мощность в зависимости от расстояния до микрофона не линейно снижается. Только усиление от 1 до например в 2-3 раза на 10кГц При смешанном сигнале усилиться должны частоты тем больше чем ближе они к 10кГц - примерно в соответствии с графиком. qxov Я расчитывал разные только стандартные фильтры в Scilab, как расчитать фильтр с произвольной АЧХ понятия не имею, тем более нужно без FFT, так как это должно быть оч быстрое простое решение чтобы не создавать задержи между тактами оцифровки, иначе придется уменьшать частоту дескретизации. Примерно представление у меня такое нужно сделать что-то типа обратной связи в ОУ чтобы высокие на выходе подавались обратно на вход, в простейшем случае это конденсатор, а как это математически расчитать для коэф. свертки незнаю.
  4. Народ подскажите пожалуйста, есть микрофон он подключен к МК через усилок max9814, все отлично работает , но хочу усилить высокочастотную составляющую программно. Как это сделать чтобы усиление сигнала было ровно по всему спектру в зависимости от того какой сигнал оцифровывается в текущий момент пропорционально поднималось усиление. Своего рода АРУ с частотной компенсацией. Примерно как на графике или линейно если возможно.
  5. Вот описание функции: function cels=casc(x,z) //cels=casc(x,z) //Creates cascade realization of filter //from a matrix of coefficients // x :(4xN)-Matrix where each column is a cascade // :element, the first two column entries being // :the numerator coefficients and the second two // :column entries being the denominator coefficients // z :Character string representing the cascade variable // cels :Resulting cascade representation // //EXAMPLE: // x=[ 1. 2. 3. ; // 4. 5. 6. ; // 7. 8. 9. ; // 10. 11. 12. ] // // cels=casc(x,'z') // cels = // // ! 2 2 2 ! // ! 1 + 4z + z 2 + 5z + z 3 + 6z + z ! // ! ------------ ------------ ------------ ! // ! 2 2 2 ! // ! 7 + 10z + z 8 + 11z + z 9 + 12z + z ! //! cels=[]; for col=x, nf=[col(1:2);1]; nd=[col(3:4);1]; cels=[cels,syslin([],poly(nf,'z','c'),poly(nd,'z','c'))]; end, endfunction ---------------------- Нужно как я понимаю сформировать правильно матрицу коэффициентов, а casc пересчитает их по секциям видимо 2-х порядковым, вот как и что нужно сделать, а главное что возвращается? И что это за дроби она выдает в примере? // ! 1 + 4z + z 2 + 5z + z 3 + 6z + z ! // ! ------------ ------------ ------------ ! // ! 2 2 2 ! // ! 7 + 10z + z 8 + 11z + z 9 + 12z + z !
  6. Нашел функцию casc — cascade realization of filter from coefficients, что она делает и как ее юзать не пойму?
  7. Все понятно с коэффициентами. Подскажите по существу, по Scilab...
  8. Ребят кто разбирается в Scilab помогите еще, нужно рассчитать коэффициенты по секциям последовательно, как в программке ciirf1. Массивом получается, а по секциям не могу понять как разбить, рассчитать в Scilab. Вот код из AVR32 DSPlib (у меня урезанный только параметры коэффициенты и график кидаю весь код мало ли что-то по незнанию выкинул нужное): iir.rar
  9. Как ни странно все работает. Думаю так для производительности может сделали чтобы небыло лишних циклов записи чтения памяти она там флеш медленная. Вот по тем же параметрам посчитал в матлабе где тут что, где А где В. /* * Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool * * Generated by MATLAB(R) 7.9 and the Signal Processing Toolbox 6.12. * * Generated on: 15-Nov-2010 18:56:58 * */ /* * Discrete-Time IIR Filter (real) * ------------------------------- * Filter Structure : Direct-Form II, Second-Order Sections * Number of Sections : 1 * Stable : Yes * Linear Phase : No */ #define MWSPT_NSEC 3 const int NL[MWSPT_NSEC] = { 1,3,1 }; const real32_T NUM[MWSPT_NSEC][3] = { { 0.02771298587, 0, 0 }, { 1, 0, -1 }, { 1, 0, 0 } }; const int DL[MWSPT_NSEC] = { 1,3,1 }; const real32_T DEN[MWSPT_NSEC][3] = { { 1, 0, 0 }, { 1, -1.721542239, 0.9445739985 }, { 1, 0, 0 } };
  10. вот тот же код на Си из AVR32 DSPlib: { int n, m; S32 sum1, sum2; dsp16_t *px, *py; num_prediv = DSP16_QB - num_prediv; //15-3 den_prediv = DSP16_QB - den_prediv; //15-3 for(n=0; n<size; n++) { sum1 = 0; sum2 = 0; px = &x[n]; for(m=0; m<num_size; m++) sum1 += ((S32) num[m] * (S32) px[-m]); py = &y[n-1]; for(m=0; m<den_size; m++) sum2 += ((S32) den[m] * (S32) py[-m]); sum1 >>= num_prediv; //>>3 sum2 >>= den_prediv; //>>3 y[n] = sum1 - sum2; } } А с В поменять странно попробую, хотя все работает, немогу понять при расчете через Матлаб fdatool где там А... коэфф где В...
  11. В том то и дело что Матлаб не купленый... Мне покупать Матлаб только чтоб пару раз коэффициенты посчитать нет смысла я один ради интересса разбираюсь, выйдет что путное можно дальше о деньгах думать... вот код переписан из DSPlib AVR32: size = 1023 ' //1024 выборки For n = 0 To (size) sum1 = 0: sum2 = 0 For m = 0 To (ComboNum.ListCount - 1) ' кол-во коэф. "А" в списке 5-1 потому что в массиве от 0 sum1 = sum1 + (num(m) * Xn(n - m)) Next m For m = 0 To (ComboDen.ListCount - 1) 'коэф. "B" sum2 = sum2 + ((den(m) * Yn(n - m - 1))) ' //Yn(n) = (num(0) * Xn(n) + num(0) * Xn(n - 1) + num(0) * Xn(n - 2)) - (den(0) * Yn(n)+ den(1) * Yn(n-1) и т.д.) раньше так работало Next m Yn(n) = sum1 - sum2 Next n коэффициенты из ciirf1 семплирование - 11025Гц ПФ - 800-900Гц: секция 1 A: 0.000780 0.000000 -0.001561 0.000000 0.000780 B: 1.000000 -3.469910 4.930680 -3.332800 0.922566
  12. bahurin А что можно еще сказать когда ничего конкретного и конструктивного не сказано люди заходят усмехнуться и съязвить... Я не думаю что есть разница на чем писать. Мне если честно без разницы VB, ASM, C, Delphi просто результат нужен побыстрее, а программирую я поскольку постольку - редко, а на VB набросать быстренько инструмент для отладки пара пустяков и столько же минут. А на Си пишу для AVR, потому нет наработок и примеров для Си скачивать тоже искать нужно и разбираться на VB многое уже написано и понятно. Время крайне мало. Да и скорость выполнения не важна вот и пишу на VB. Также не думаю что большая разница где коэффициенты считать тут больше алгоритм важен простота использования, а Матлаб платная среда можно ли результаты вычислений использовать в своих проектах если они будут платными, думаю чтоб таких проблем не возникало Atmel использует все фришное AVR32 Studio, Си(gcc), Scilab. Еще подскажите как лучше промоделировать АЧХ у меня в программе сравнить так скажем задумка генерить с цикле синусоиды по возрастанию частоты и пропускать через фильтр и строить график
  13. Вам язык почесать негде? Или я что-то грубое сказал???
  14. TSerg Это если быстро сказать. На самом деле привел все к соответствию формулы, взял алгоритм из DSPlib AVR32 переписал на VB, а так как там через указатели, то я просто применил возможность игнорировать ошибки на VB результаты абсолютно одинаковые что на МК передаю массив и результат обратно что через VB на компе можно конечто через смещение сделать как в примере от Джеймс. DSPlib коэффициенты через Scilab расчитываются поэтому с этим разбираюсь от Матлаба не подходят, толи что-то не так делаю. Только из ciirf1 подходят коэффициенты.... Вот такие пироги.
  15. Все разобрался просто игнорирую ошибку выход из диапазона массива в цикле перемножения и сложения выборок и тогда все отлично работает :yeah: Всем за участие спасибо!
  16. ...Понимаю что гдето моя ошибка... Продумаю по внимательнее алгоритм по шагам...
  17. Джеймс Да вобщем и у меня так там последовательно складываются входные значения умноженные на коэффициенты еще подробней посмотрю расчитал в ciirf1 получается для 2-го порядка - 5 коэфф. а0,а1,а2 и в1,в2 в Матлабе всего 3 выкинул обратную связь чтоб только 3-мя коэфф. пользоваться все равно работает: Y(n) = (a(0) * X(n) + a(1) * X(n + 1) + a(2) * X(n + 2)) Вот сравниваю тут коэффициенты может нужно для ПФ разделить коэффициенты, первую половину получится как через НЧ фильтр прошел сигнал, потом его переписать во входной массив X(n) и пропустить через вторую половину коэффициентов как бы через ФВЧ получится ПФ. :laughing:
  18. Все вроде понятно по фильтрам. Задаешь частоты расчитываешь коэффициенты. Поэтому вопросы у меня как обычно чисто практические... x(n)=входной массив выборок АЦП (n=0…1023) y(n)=выходной массив стандартная формула Баттерворта на которую натыкаешься всюду: y(n)=( a0*x(n)+a1*x(n-1)+a2*x(n-2) - (b1*y(n)+b2*y(n-1)) ) так вот не могу понять как при начальном значении первого(нулевого) значения выборки по адресу x(0) может быть a1*x(n-1) запрашивается значение из массива x(0-1) этот же выход из диапазона массива? Массив от 0 до 1023 –> 1024 выборки сделал значения по порядку: y(n)=( a0*x(n)+a1*x(n+1)+a2*x(n+2) - (b1*y(n)+b2*y(n+1)) ) все заработало для ФВЧ, а для ПФ не работает толи коэффициенты не правильно подставляю, толи формула другая для ПФ там просто коэффициентов больше 5 вроде поэтому делаю так y(n)=( a0*x(n)+a1*x(n+1)+a2*x(n+2)+ a3*x(n+3)+ a4*x(n+4) - (b1*y(n)+b2*y(n-1)+ b3*y(n+2)+b3*y(n+3))) видел и такую формулу где-то: y(n)=( a0*x(n)+2*a1*x(n-1)+a2*x(n-2) - (b1*y(n)+b2*y(n-1)) ) В общем полная каша в голове, может для Чебышева иначе делается, подскажите плиз…
  19. Все получилось просто умножением! :rolleyes: Спасибо большое всем! Как и говорили :wassat: Получается я в самом начале ошибся чтобы привести сигнал к размаху как у входных (оба синуса одинаковые только частоты разные) с чего то решил брать значения корень из полученого произведения и получилась каша на FFT и графике...
  20. DRUID3 Я тоже понял после прочтения о смесителях что это что-то с умножением должно быть связано поэтому первым делом сделал умножение tmp1*tmp2 только от получ произведения взял корень чтобы размах сигнала снизить до примерно размаха входных сигналов тоже что-то непонятное получается после FFT частоты сдвигаются не получается разности и суммы входных частот. Sleepin' Cat... & DRUID3 Домой приду попробую еще раз по всякому вечером выложу графики.
  21. Кстати там еще нужен коэффициент нелинейности как я понимаю, если описывать мат-ки физ процессы происходящие например в смесителе простейшем на диоде, или мосте из диодов, то нелинейные свойства диода нужно как либо менять, например сильный изгиб хар-ки подставляю в прогу коэффициент соответствующий, небольшая кривизна соответственно другой коэффициент... что-то типа так…
  22. А есть какие нить обзоры видео материалы по СВЧ, софту например для моделирования СВЧ процессов, построение полосковых линий, антенн на полосковых линиях и просто антенн разных конфигураций... Способы согласовки и все такое... Давно хотел что-то подобное освоить посмотреть видео например чтобы в своих каких то разработках если потребуется рассчитать антенну промоделировать эффективноcть ну и все такое, прямо на плате вытравить и радоваться )) Интересуют диапазоны 800,900,1800,1900,2400 Мгц просто ради интереса и на всякий случай вдруг пригодится...
  23. DRUID3 я читал там (это еднсьвенный сайт где хоть чтото описано), но не понял особо что откуда берется, именно эти формулы sin(A) sin (B) = (1/2) cos(A + B) - (1/2) cos(A - B), 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: Что на что умножать делить мои переменные. Пишу просто программу для AVR32 на VB вот на этом остановился... Простое смешение реализовано скриншот как раз из программы.
  24. Ребят подскажите как сложить два сигнала уже писал на другом форуме (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х синусоид. ----------------------------------------------
×
×
  • Создать...