Nickel89
27.4.2010, 21:37
Всем доброго времени суток. Нужен алгоритм быстрого (именно конкретно БПФ) преобразования Фурье для MATLAB. Просто на сколько я знаю FFT(x) - это просто преобразование Фурье, а уж быстрое оно или обычное решает система.
Короче говоря вот что требуется: "Провести вычисления 8-точечного ДПФ с помощью алгоритма БПФ с прореживанием по времени".
P.S. Все это добро нужно сделать в м-файле с выводом всех графиков и всякой лабуды для иллюстрации. Сюда просто текст программы. Выручайте бедного студента. Заранее спасибо!
Vik-2304
27.4.2010, 22:19
Nickel89
27.4.2010, 23:35
Цитата(Vik-2304 @ 27.4.2010, 23:19)
Лабы... Последнюю в этом семестре сдать осталось. Как-то в мае не особо-то и хотелось чем-то заниматься - вот и скидываю все пораньше.
Vik-2304
27.4.2010, 23:40
а че хоть за предмет, я учился такого че та не помню...не теория относительности ли ???
Explosion
27.4.2010, 23:44
t=0:0.0005:1;
x=sin(2*pi*200*t)+0.4*sin(2*pi*150*t)+0.4*sin(2*pi*250*t);
y=x+2*randn(size(t));
plot(y(1:100),'b')
Y=fft(y,1024);
Pyy=Y.*conj(Y)/1024;
f=2000*(0:150)/1024;
plot(f,Pyy(1:151)),grid
Цитата(Vik-2304 @ 28.4.2010, 0:40)
а че хоть за предмет, я учился такого че та не помню...не теория относительности ли ???
Преобразования Фурье
КМС23region
27.4.2010, 23:58
Цитата(Nickel89 @ 27.4.2010, 21:37)
Всем доброго времени суток. Нужен алгоритм быстрого (именно конкретно БПФ) преобразования Фурье для MATLAB. Просто на сколько я знаю FFT(x) - это просто преобразование Фурье, а уж быстрое оно или обычное решает система.
Короче говоря вот что требуется: "Провести вычисления 8-точечного ДПФ с помощью алгоритма БПФ с прореживанием по времени".
P.S. Все это добро нужно сделать в м-файле с выводом всех графиков и всякой лабуды для иллюстрации. Сюда просто текст программы. Выручайте бедного студента. Заранее спасибо!
Такое ощущение, что меня сейчас крайне культурно послали...
Цитата(Explosion @ 28.4.2010, 0:44)
t=0:0.0005:1;
x=sin(2*pi*200*t)+0.4*sin(2*pi*150*t)+0.4*sin(2*pi*250*t);
y=x+2*randn(size(t));
plot(y(1:100),'b')
Y=fft(y,1024);
Pyy=Y.*conj(Y)/1024;
f=2000*(0:150)/1024;
plot(f,Pyy(1:151)),grid
со студента пиво...
Цитата(Explosion @ 28.4.2010, 0:44)
t=0:0.0005:1;
...
Да, блин, это тебе покруче нанотехнологий
Вектрафил
28.4.2010, 4:00
БПФ в спектральном анализе - вещь незаменимая. Но, к сожалению, это не для средних умов: надо обязательно обладать математическим складом ума. А так - просто передрать, - написать и забыть...
Помню, когда поступил на первый курс, пошёл в книжный магазин и купил себе две книжки: "Манифест коммунистической партии" и "Людвиг Фейербах и конец немецкой классической философии". Они мне показались важными в начале жизненного пути и я решил, что обе достойны стать моими настольными книгами
.
Более того, отправившись к тётке в Самарканд на поезде, я взял их с собой, чтобы на досуге почитать
. Понятное дело, что я даже не притронулся к ним, но положил их на столик в купе. Утром я проснулся от громких голосов и смеха: какой-то мужик, как он представился "с Севера", подсевший к нам ночью и ехавший до Самары, увидев эти мои книжки, был страшно поражён. "Покажите мне хозяина!"- орал он на всё купе.
Увидев, что это я - отрок 17 годов, он вытаращил глаза, пожал мне руку и сказал, что гордится мною и спокоен за нашу страну!
Nickel89
28.4.2010, 22:45
Цитата(Explosion @ 28.4.2010, 0:44)
t=0:0.0005:1;
x=sin(2*pi*200*t)+0.4*sin(2*pi*150*t)+0.4*sin(2*pi*250*t);
y=x+2*randn(size(t));
plot(y(1:100),'b')
Y=fft(y,1024);
Pyy=Y.*conj(Y)/1024;
f=2000*(0:150)/1024;
plot(f,Pyy(1:151)),grid
Спасибо, но это не совсем то, что нужно. Тут подразумевается БПФ еще на програмном уровне (функция fft(x)), но в моей задаче нужно именно проиллюстрировать алгоритм БПФ. Ответ fft преподавателя не устроил. Т.е. нужно делить матрицу на четные и нечетные коэффициенты и т.д. Умную книжку я тоже вчера вечером прочитал - там только теория относительно этого.
Nickel89
29.4.2010, 21:20
Посидев до 2-х часов ночи практически сам ответил на свой вопрос. Вот листинг, может кому еще пригодится:
x=[6 2 3 9 5 2 7 8];
x1=[x(1,1) x(1,3) x(1,5) x(1,7)];
x2=[x(1,2) x(1,4) x(1,6) x(1,8)];
y1=fft(x1);
y2=fft(x2);
XV(1,1)=y1(1,1)+y2(1,1);
XV(1,5)=y1(1,1)-y2(1,1);
XV(1,2)=y1(1,2)+y2(1,2)*exp(-(2*pi/8)*i*1);
XV(1,6)=y1(1,2)-y2(1,2)*exp(-(2*pi/8)*i*1);
XV(1,3)=y1(1,3)+y2(1,3)*exp(-(2*pi/8)*i*2);
XV(1,7)=y1(1,3)-y2(1,3)*exp(-(2*pi/8)*i*2);
XV(1,4)=y1(1,4)+y2(1,4)*exp(-(2*pi/8)*i*3);
XV(1,8)=y1(1,4)-y2(1,4)*exp(-(2*pi/8)*i*3);
В принципе работает и достаточно точно, по сравнению с обычным fft(x), где х - матрица, приведенная в проге, погрешность составляет где-то 1-5 милллионных. Это конечно не совсем БПФ с прореживанием по времени, однако тут я добился прореживания до 2-х 4-точечных преобразования, т.е. проредив не 8 раз, а 2. Завтра понесу показывать.