2015-05-25 5 views
2

Предположим, что мы имеем некоторое преобразование Фурье с мнимой и вещественной частью. Расчет величины для некоторой частоты прост, как показано в приведенном ниже коде.Учет перенапряжения мнимого аргумента в MATLAB

Однако, если частота, в данном случае p=1, составляет, например, 1000, тогда у нас есть проблема. Нам нужно учитывать тот факт, что мнимая часть должна находиться между -pi и pi.

Например. Предположим, что моя воображаемая часть - Im => w-100, а моя настоящая часть - только Re => 1.

Угол/фаза: arctan(Im/Re) = arctan(w-100). Простое замещение значения для w не будет работать. Нам нужно вычесть посторонние полные вращения и передать это функции arctan.

Как бы я это сделал?

p = 1; % Value given in argument 

x1 = exp(-4*(t-2))*cos(9*t)*heaviside(t); % define function 
F = fourier(x1,t,w); % fourier transformation 
sub1 = double(subs(F,w,p)); % SUBSTITUTE value for omega 

mod1 = abs(sub1) % print out modulus 
ang1 = angle(sub1) % print out phase angle 

ПРИМЕЧАНИЕ: Преобразование Фурье возвращает символическую функцию. Поэтому я перебрасываю его в double в sub1.

+0

Извините за предыдущий ответ, Я добавил, что числовое решение, а не символическое, должно было бы это отметить. – brodoll

+0

@ brodroll, так что тогда нет идеи? : p – Ortix92

+0

У меня мало опыта с символическими операциями Matlab. Idk, если функция ** atan2 ** будет работать для вашего фазового угла, а также не имеет способа проверить atm: x – brodoll

ответ

1

Проверить это Matlab функции, которая работает в некоторых случаях очень хорошо:) ... Я использовал его несколько случаев для решения спектров Фурье с хорошей «развернутом» фазой: D: D:

ang2=unwrap(ang1); 

Если это не сработает, попробуйте предварительно многократно после того, как и раньше, чтобы поместиться в pi фракции ....

EDIT

вы нуждаясь это:

% Fourier Transform 
syms t v; 
w=(0:1:100*pi)'; 
lw=length(w); 
x = exp(-4*(t-2))*cos(9*t)*heaviside(t); % Function 
F = fourier(x,t,v); % Fourier Transform 
F0= double(subs(F,v,w)); % Symbolic Substitution 
f = abs(F0); % Magnitude 
th = angle(F0); % Phase (unwrap not required) 
%th=unwrap(angle(F0)); % Unwrapped Phase 

% Plot 
ha=plotyy(w,f,w,th); 
title('Fourier Transform'); 
xlabel('Frequency - \omega'); 
ylabel(ha(1),'Magnitude - |f|'); 
ylabel(ha(2),'Phase - \theta'); 

Если да, то не требуется разворачивание фазы, которая Smoothy варьируется от pi/2 в w=-inf к -pi/2 в w=inf ....

enter image description here

Смежные вопросы