![]() |
|
![]() ![]() ![]() |
|
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
Сгенерял я сигнал с частотой 1000Гц, сделал Фурье и получил и что в сигнале присутствуют много разных частот, от 500 и до 1500 (примерно), причем амплитуды у них довольно большие. Делаю опять Фурье получаю вроде бы исходный сигнал, но он совершенно не похож на оригинал. Подскажите как быть?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
А какой именно сигнал и как ты сгенерил?
|
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
синусойда, сгенерял в CoolEdit (редактор wav-ников если кто незнает)
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Чистая синусоида - это не сигнал. Она не несет информации. Сигнал же несет информацию. А информация - это какие-либо нерегулярности. Допустим, модулированная синусоида - это уже сигнал. Чем-нибудь модулировал синусоиду? Чистая она или нет? Какой алгоритм преобразования применял? БПФ или в лоб ДПФ?
Такой уж я буквоед ![]() |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
немодулированая, просто синусоида, ДПФ. Про сигнал: ну лана не сигнал, а отсчеты
![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
![]() Ну я понимаю, если бы БПФ с каким-то окном. Там имеется "натяжка": предполагается, что за пределами окна сигнал продолжается периодически. Отсюда некоторый гемморой. Ну а у тебя что? Последствия дискретизации, квантования? Можешь как-нибудь нарисовать или кинуть код? |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Вот пример расчетая прямого и обратного преобразования Фурье... Проверь, как у тебя...
#define Pi 3.141592 #define Window 160 #define HalfWin 80 double rex[HalfWin+1]; double imx[HalfWin+1]; double workbuf[Window]; //тут лежит твой сигнал void DFT()//Discret Fourier Transform function { unsigned int i; unsigned int k; double w; w=2*Pi/Window; for(k=0;k<=HalfWin;k++) { rex[k]=0; imx[k]=0; } for(k=0;k<=HalfWin;k++) for(i=0;i<Window;i++) { rex[k]=rex[k]+workbuf[i]*cos(w*k*i); imx[k]=imx[k]-workbuf[i]*sin(w*k*i); } void IDFT()//Inverse Discret Fourier Transform function { for(k=0;k<=HalfWin;k++) { rex[k]=rex[k]/HalfWin; imx[k]=-imx[k]/HalfWin; } rex[0]=rex[0]/2; rex[HalfWin]=rex[HalfWin]/2; for(i=0;i<Window;i++) workbuf[i]=0; for(k=0;k<=HalfWin;k++) for(i=0;i<Window;i++) { workbuf[i]=workbuf[i]+rex[k]*cos(w*k*i); workbuf[i]=workbuf[i]+imx[k]*sin(w*k*i); } } void main() { Ввести массив workbuf; DFT(); IDFT(); //рассчитали прямое и обратное Фурье… Сигнал не изменился } -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
На, поиграйся с моим БПФ
![]()
|
|||
|
||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
А выборку на оконную функцию домножать не пробовали ? -
есть такие, имеющие колоколообразную форму. Используйте, скажем, окно Хэмминга - из наиболее известных. f = 0.54 - 0.46 * cos(x) |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
И не только на Хэмминга ![]() |
|||
|
||||
Iskanderus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Уважаемый podval, в ваши функции исходный сигнал передается в виде
complex<double> *sig Обяъсните, пожалуйста, каким образом этот сигнал превращается в массив комплексных чисел типа double? |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
В функцию передали указатель на массив. Далее делаем, что хотим.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |