bahurin 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба Давайте говорить честно - матлаб это модно. Столько функций, а главное дофига всего в книгах и интернете - почти не надо думать. Токо копируй и в консоль, или как там оно зовеЦЦо у него, вставляй... Все правильно в это и есть преймущество матлаба! Вы пользуетесь результатами других людей, которые положили много много времени чтобы дать вам этот инструмент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TViT 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба Это что еще за агрессия? Вообще то это у вас проблемы а не у нас. bahurin А что можно еще сказать когда ничего конкретного и конструктивного не сказано люди заходят усмехнуться и съязвить... Бегите от VB со всех ног в сторону С++. Это первое, второе бегите еще быстрее чем от VB от SCILab в сторону matlab или GNU Octave. Поверьте если результаты SCILab отличаются от matlab, то врет SCILab а не матлаб. Что касается dsp - matlab можно считать эталоном. Я не думаю что есть разница на чем писать. Мне если честно без разницы VB, ASM, C, Delphi просто результат нужен побыстрее, а программирую я поскольку постольку - редко, а на VB набросать быстренько инструмент для отладки пара пустяков и столько же минут. А на Си пишу для AVR, потому нет наработок и примеров для Си скачивать тоже искать нужно и разбираться на VB многое уже написано и понятно. Время крайне мало. Да и скорость выполнения не важна вот и пишу на VB. Также не думаю что большая разница где коэффициенты считать тут больше алгоритм важен простота использования, а Матлаб платная среда можно ли результаты вычислений использовать в своих проектах если они будут платными, думаю чтоб таких проблем не возникало Atmel использует все фришное AVR32 Studio, Си(gcc), Scilab. Еще подскажите как лучше промоделировать АЧХ у меня в программе сравнить так скажем задумка генерить с цикле синусоиды по возрастанию частоты и пропускать через фильтр и строить график Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба А что можно еще сказать когда ничего конкретного и конструктивного не сказано люди заходят усмехнуться и съязвить... А что можно сказать конструктивного если у вас в коде ошибка, а кода нет? У нас нет волшебных хрустальных шаров чтобы понять почему стандартная процедура IIR фильтрации у вас неправильно работает. Матлаб платная среда можно ли результаты вычислений использовать в своих проектах если они будут платными Можно матлаб для того и существует. Если конечно у вас матлаб лицензионный. Еще подскажите как лучше промоделировать АЧХ у меня в программе сравнить так скажем задумка генерить с цикле синусоиды по возрастанию частоты и пропускать через фильтр и строить график подставить в передаточную характеристику H(z) коэффициенты которой вы посчитали z=exp(j*w) и получите комплексный к-т передачи H(exp(jw)). АЧХ при этом модуль H(exp(jw)). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TViT 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 (изменено) · Жалоба В том то и дело что Матлаб не купленый... Мне покупать Матлаб только чтоб пару раз коэффициенты посчитать нет смысла я один ради интересса разбираюсь, выйдет что путное можно дальше о деньгах думать... вот код переписан из 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 Изменено 14 ноября, 2010 пользователем TViT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба Код понять не могу, т.к. на VB не пишу. Но одно кидается в глаза. У фильтра принято обозначать к-ты числителя ПФ через b, а к-ты знаменателя через A. У вас обозначения наоборот, потому что A[0] должно быть равно 1. Возможно в этом ваша ошибка. Построил в матлабе АЧХ фильтра с приведенными к-тами: B=[0.000780 0.000000 -0.001561 0.000000 0.000780]; A=[1.000000 -3.469910 4.930680 -3.332800 0.922566]; h = zeros(1,1024); h(2) = 1; h = filter(B,A,h); H = fft(h); Fs = 11025; f = Fs*(0:1023)/1024; plot(f,20*log10(H)); фильтр как фильтр, только В с А местами поменял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TViT 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба вот тот же код на Си из 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 где там А... коэфф где В... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба Не видел таких конструкций. не понятен смысл py = &y[n-1]; при n=0, не понятно на что будет указывать py. Аналогично sum1 += ((S32) num[m] * (S32) px[-m]); в цикле по m эта конструкция должна по идее должна приводить к эксцепшену по памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TViT 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 (изменено) · Жалоба Как ни странно все работает. Думаю так для производительности может сделали чтобы небыло лишних циклов записи чтения памяти она там флеш медленная. Вот по тем же параметрам посчитал в матлабе где тут что, где А где В. /* * 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 } }; Изменено 15 ноября, 2010 пользователем TViT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба NUM[MWSPT_NSEC][3] это B (числитель) DEN[MWSPT_NSEC][3] зто А (знаменатель) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlikM 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Но одно кидается в глаза. У фильтра принято обозначать к-ты числителя ПФ через b, а к-ты знаменателя через A. У вас обозначения наоборот, потому что A[0] должно быть равно 1. Интересно, это где же так принято и по каким книгам Вас учат (учили)? Вот ссылка на "библию начинающего радиоинженера" РтЦиС Гоноровского (в простонародии Гоноревич): Гоноровский И если взлянуть на страницу 500, то увидите что там как раз наоборот. Хотя это совсем не принципиально, а вот что принципиально- это если бы автор темы не поленился и взял и синтезировал этот фильтр 2-го порядка на бумажке собственными руками, то у него и для более сложных фильтров вопросов больше бы не возникло. А если надо быстро расчитать фильтр и получить его программную реализацию причем в С коде, тогда вам сюда FilterSolut Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PetrovichKR 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Интересно, это где же так принято и по каким книгам Вас учат (учили)? Во всех книгах по цифровой обработке сигналов, которые я видел, коэффициенты рекурсивной части фильтра обозначают через a, нерекурсивной части через b. Гоноровский к таким книгам не относится, поскольку в ней изложены основы радиотехники, и цифровая обработка затрагивается поверхностно. Но, опять же, это не принципиально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TViT 0 18 декабря, 2010 Опубликовано 18 декабря, 2010 (изменено) · Жалоба Ребят кто разбирается в Scilab помогите еще, нужно рассчитать коэффициенты по секциям последовательно, как в программке ciirf1. Массивом получается, а по секциям не могу понять как разбить, рассчитать в Scilab. Вот код из AVR32 DSPlib (у меня урезанный только параметры коэффициенты и график кидаю весь код мало ли что-то по незнанию выкинул нужное): iir.rar Изменено 18 декабря, 2010 пользователем TViT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lisstret 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 (изменено) · Жалоба У фильтра принято обозначать к-ты числителя ПФ через b, а к-ты знаменателя через A. Вопрос спорный, в России и в зарубежье они по разному обозначались, соответственно и в Матлабе они обозначаются как принято за бугром. А так как щас новые книжки ориентированны на матлаб, то и в книгах российских авторов приняты другие обозначения. В книжке Сергиенко даже есть сноска где это поясняется! Короче из за этого и различия. Гоноровский к таким книгам не относится, поскольку в ней изложены основы радиотехники, и цифровая обработка затрагивается поверхностно. Мне кажется что он писал так, как было принято у нас. А не из за того, что он чет не догонял. Изменено 19 декабря, 2010 пользователем lisstret Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TViT 0 20 декабря, 2010 Опубликовано 20 декабря, 2010 · Жалоба Все понятно с коэффициентами. Подскажите по существу, по Scilab... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TViT 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Нашел функцию casc — cascade realization of filter from coefficients, что она делает и как ее юзать не пойму? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться