|
Простой анализ спектра простого сигнала |
|
|
|
Dec 22 2006, 17:36
|
Группа: Новичок
Сообщений: 8
Регистрация: 21-12-06
Пользователь №: 23 755

|
если нужно разложить любой сигнал в спектр, то делаем следующее: берется функция входного сигнала, определяется ее период и раскладывается на компоненты ряда Фурье, затем берется среднее геометрическое a(n) и b(n), и строится спектрограмма - зависимость энергии гармоники, от ее номера n.
|
|
|
|
|
Dec 22 2006, 18:56
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(Punk @ Dec 22 2006, 15:31)  Препод понимает C, Pascal, qBasic объектноориентированное непонимает. А Матлаб понимает? Прогга на нём покороче будет. Например: Код A=(sin(.25*[1:1000])+sin(.1*[1:1000])); plot (A) figure plot (abs(fft(A)))
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Dec 25 2006, 10:50
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039

|
Цитата(Punk @ Dec 25 2006, 11:18)  понимает..... Задача именно под ДОС написать.
Как я понял спектрограмма строится на период исследуемой функции ? Для паскаля под дос ищите архив Russian SWAG (там куча разных библиотек с исходниками). Можно поискать либы для Free Pascal или TMT Pascal или просто готовый сырец ;-) В свое время для преобразования Фурье использовал библиотеку fftw P.S. Если функция периодическая, то она разлагается в ряд Фурье, если же апериодическая -- то в интеграл Фурье....
--------------------
Программа выполнила невыполнимое и допустила недопустимое
|
|
|
|
|
Dec 25 2006, 12:23
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Punk @ Dec 25 2006, 12:18)  понимает..... Задача именно под ДОС написать. Есть такой ЯП Python. Для него существует (свободно скачивается) библиотека pylab. При наличии установленного питона и оной библиотеки код, приведенный Станиславом, будет практически без изменений (пару инклюдов надо будет сделать) годиться к выполнению. Включая построение графиков. Питон для ДОС: http://www.caddit.net/pythond.php.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Dec 25 2006, 17:53
|

Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 19-06-06
Из: Новосибирск
Пользователь №: 18 167

|
я всеже хочу найти простой метод без библиотек в котором смогу самостоятельно разобраться. методом перерывания инфы вот че нашел из "ИСКУССТВО СХЕМОТЕХНИКИ" в главе посвященной цифровой фильтрации,..код на фортране A=EXP(-TS/TC) B=1.-A DO 10I=2,N 10X(I)=A*X(I-1)+B*X(I) где Х-массив данных TS-интервал времени между отсчетами TC-выбранная постоянная времени фильтра я сравнил эту формулу с формулами из литературы посвященной БПФ  и пришел к выводу что спектрограмму можно построить при помощи неё, я прав ?
|
|
|
|
|
Dec 25 2006, 18:43
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Punk @ Dec 25 2006, 17:53)  я всеже хочу найти простой метод без библиотек в котором смогу самостоятельно разобраться. методом перерывания инфы вот че нашел из "ИСКУССТВО СХЕМОТЕХНИКИ" в главе посвященной цифровой фильтрации,..код на фортране A=EXP(-TS/TC) B=1.-A DO 10I=2,N 10X(I)=A*X(I-1)+B*X(I) где Х-массив данных TS-интервал времени между отсчетами TC-выбранная постоянная времени фильтра я сравнил эту формулу с формулами из литературы посвященной БПФ  и пришел к выводу что спектрограмму можно построить при помощи неё, я прав ? Нет, это цифровой фильтр НЧ первого порядка. К анализу спектра отношения не имеет. А ДПФ для точки номер "k" рассчитывается так: Код
a=b=0.0; for (i=0; i<N; i++) { a += fcos(2*pi*i*k/N) * signal[i]; b += fsin(2*pi*i*k/N) * signal[i]; }
|
|
|
|
|
Dec 26 2006, 07:57
|

Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 19-06-06
Из: Новосибирск
Пользователь №: 18 167

|
Цитата Нет, это цифровой фильтр НЧ первого порядка. К анализу спектра отношения не имеет. А ДПФ для точки номер "k" рассчитывается так: Код
a=b=0.0; for (i=0; i<N; i++) { a += fcos(2*pi*i*k/N) * signal[i]; b += fsin(2*pi*i*k/N) * signal[i]; } Из этого цикла выходят два коэффициента a и b че сопсна с имя делать, и как определить число k, равно ли оно N ? если че простите за тупизну и настойчивость.
|
|
|
|
|
Dec 26 2006, 16:32
|

Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 19-06-06
Из: Новосибирск
Пользователь №: 18 167

|
Цитата Тяжелый случай... k это номер выборки спектральной ф-ции в частотной области. Вычисляется для всех k от 0 до N-1. Коэфф. a и b дают на выходе X(k) = a+j*b где j сами попробуйте догадаться что. Случай действительно тяжелый так как я математику ни черта не знаю а ща пытаюсь восполнить все пробелы. В общем я разобрался всем спасибо. P.S. а j это наверно мнимая еденица ,...может быть
|
|
|
|
|
Dec 26 2006, 18:46
|
Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 7-06-06
Пользователь №: 17 825

|
Цитата(SM @ Dec 25 2006, 18:43)  Цитата(Punk @ Dec 25 2006, 17:53)  я всеже хочу найти простой метод без библиотек в котором смогу самостоятельно разобраться. методом перерывания инфы вот че нашел из "ИСКУССТВО СХЕМОТЕХНИКИ" в главе посвященной цифровой фильтрации,..код на фортране A=EXP(-TS/TC) B=1.-A DO 10I=2,N 10X(I)=A*X(I-1)+B*X(I) где Х-массив данных TS-интервал времени между отсчетами TC-выбранная постоянная времени фильтра я сравнил эту формулу с формулами из литературы посвященной БПФ  и пришел к выводу что спектрограмму можно построить при помощи неё, я прав ? Нет, это цифровой фильтр НЧ первого порядка. К анализу спектра отношения не имеет. А ДПФ для точки номер "k" рассчитывается так: Код
a=b=0.0; for (i=0; i<N; i++) { a += fcos(2*pi*i*k/N) * signal[i]; b += fsin(2*pi*i*k/N) * signal[i]; } SM, не путайте Punk-а. Формула, которую он привел, действительно ДФП. WN**kn = exp(-j*2*pi*k*n/N), где j мнимая единица. Хотя на фильтр (правда не НЧ и не 1-го порядка) это действительно похоже. Что и не удивительно, поскольку БФП N-того порядка можно трактовать как набор из N фильтров: по одному на каждую "выходную" частоту.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|