Цитата(Stefan1 @ Nov 22 2012, 13:32)

Все работает, только вот что-то не похоже на 1-ю гармонику (т.е. синусоиду). Может быть из-за того что я не то число ставлю вместо length(u1), т.к. у меня сигнал модулирован низкой частотой и первая гармоника здесь соответствует модулирующиму сигналу, а не несущей. Как бы теперь выделить первую гармонику несущей - наверно в ручную подбирать? т.к. частот модулирующего сигнала я не знаю.
Возьмем 8-точеный пример:
1) Загоним туда косинусоиду (удобна тем, что ее спектр действителен):
Код
x = [0:7] // команда
x =
0 1 2 3 4 5 6 7 // отклик МатЛаба
y = cos(2*pi/8*x) // команда
y =
1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 // отклик МатЛаба
2) Делаем fft
Код
u=fft(y) // команда
u =
-0.0000 4.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 4.0000 // отклик МатЛаба
u' // команда напечатать в столбик
-0.0000 // u(1) постоянная составляющая
4.0000 // u(2) амплитуда первой гармоники (самой медленной)
0.0000 // u(3) амплитуда второй гармоники
-0.0000 // u(4) амплитуда третей гармоники
0.0000 // u(5) амплитуда четвертой гармоники, частота Найквиста (самая быстрая)
-0.0000 // u(6) зеркальное комплексносопряженное от u(4)
0.0000 // u(7) зеркальное комплексносопряженное от u(3)
4.0000 // u(8) зеркальное комплексносопряженное от u(2)
Ось симметрии проходит через частоту Найквиста.
Постоянная составляющая своего отражения не имеет.
"Комплексносопряженное" означает, что действительная часть числа сохраняется, а мнимое изменяет свой знак.
3) Обнуляем ненужные гармоники
Кроме u(2) надо оставить незануленной еще и ее отражение u(8).
Когда в массиве не 8 элементов, а больше, то надо рассчитать номер зеркального отражения.
Для первой гармоники он самый последний в ряду:
Код
u([1 3:length(u)-1])=0
u =
0 4.0000 0 0 0 0 0 4.0000
4) Делаем обратное преобразование Фурье
Код
y2=ifft(u)
y2 =
1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071
Готово! Поскольку у нас изначально была только 1-ая гармоника, то она и осталась.