Преобразуване на Фурие на два различни сигнала

Бих искал да генерирам някои цифри, за да покажа недостатъците на използването на трансформации на Фурие за анализ на времеви редове. Целта ми е да покажа, че 2 очевидно много различни сигнала имат спектри с много подобна форма. Като начало създавам моята серия:

t =  0:.01:2;
y = sin(2.*pi.*5.*t)+sin(2.*pi.*10.*t);
r1 = find(t <= 1);
r2 = find(t > 1);
y2a =  sin(2.*pi.*5.*t(r1));
y2b = sin(2.*pi.*10.*t(r2));
y2 = [y2a,y2b];

figure(1);
subplot(211);
plot(t,y,'k');
subplot(212);
plot(t,y2,'k');

Произвежда се: въведете описание на изображението тук

Сега бих искал да покажа, че техните спектри имат много сходни форми: въведете описание на изображението тук

Това са примери, взети от някои бележки на класа, които бих искал да възпроизведа в matlab. Срещам обаче трудности при възпроизвеждането на втория сюжет. Може ли някой да предложи как вторият график може да бъде произведен в matlab с предоставената информация?


person KatyB    schedule 09.12.2012    source източник
comment
пробвал ли си doc fft ? това също ще ви даде повече от намек: stackoverflow.com/questions/ 10758315/   -  person bla    schedule 09.12.2012
comment
@Kate това не е проблемът, но t трябва да бъде от 0 до 4, според бележките ви в класа, но вие сте го дефинирали от 0 до 2.   -  person Eitan T    schedule 09.12.2012
comment
Добре, като кажа, че го променя от 0 на 4, как ще възпроизведа втория график?   -  person KatyB    schedule 09.12.2012


Отговори (1)


Възпроизвеждането на тези сюжети е сравнително лесно. Обърнете внимание обаче на няколко неща:

  1. Във вашите бележки за класа графиките във времевата област са от t = 0 до t = 4 (а не t = 2, както направихте вие).
  2. Графиките на честотната област показват само положителните честоти, т.е. половината от честотния спектър. Честотният диапазон е от 0 до 20Hz, което означава, че честотата на семплиране е 40Hz.
  3. Количеството енергия трябва да остане същото, така че ако се показва само половината от спектъра, начертаните честотни компоненти трябва да се умножат по коефициент 2.

Въпреки това, ето пълния код (включително корекции на вашите диаграми във времевата област):

% # Time domain plots
fs = 40;
t = 0:(1 / fs):4;
y1 = sin(2 * pi * 5 * t)+ sin(2 * pi * 10 * t);
y2 = [sin(2 * pi * 5 * t(t <= 2)), sin(2 * pi * 10 * t(t > 2))];

figure
subplot(2, 1, 1), plot(t, y1)
subplot(2, 1, 2), plot(t, y2)

% # Frequency domain plots
Fy1 = abs(ifft(y1));
Fy2 = abs(ifft(y2));
N = numel(t);
idx = 1:numel(Fy1) / 2;    % # Indices of half the spectrum
f = fs * (0:(N - 1)) / N;  % # Actual frequencies

figure
subplot(2, 1, 1), plot(f(idx), 2 * Fy1(idx))
subplot(2, 1, 2), plot(f(idx), 2 * Fy2(idx))

Графиките във времевата област са:

въведете описание на изображението тук

и съответните диаграми на честотната област са:

въведете описание на изображението тук

person Eitan T    schedule 09.12.2012
comment
Страхотно, благодаря много. Използвах функцията за периодограма, за да изчисля спектрите на мощността, но както казахте, графиките показват само положителните честоти, това предизвика известно объркване. - person KatyB; 09.12.2012
comment
@Kate Ах, открих грешка в диаграмата на честотата си: графиката показва само половината от спектъра, следователно всичко (включително пиковете) трябва да е два пъти по-високо, за да се поддържа същото количество енергия. Затова промених отговора си, като умножих начертаните Fy1 и Fy2. - person Eitan T; 09.12.2012