как преобразовать частотную область во временную область

Я создал 3 сигнала с тремя разными частотами и отфильтровал сигнал, который мне не нужен. Но когда я использую ifft в Matlab, он показывает неправильный график. Как преобразовать мой спектр частотной области обратно в мой 3-секундный график временной области? Ниже мой код выглядит следующим образом:

clc
clear all
Fs = 8192;
T = 1/Fs;                                             
%create tones with different frequency
t=0:T:1;
t2=1:T:2;
t3=2:T:3;

y1 = sin(2*pi*220*t); 
y2 = sin(2*pi*300*t2);
y3 = sin(2*pi*440*t3);                          

at=y1+y2+y3;


figure;
plot(t,y1,t2,y2,t3,y3),title('Tones with noise');

[b,a]=butter(2,[2*290/Fs,2*350/Fs],'stop');
e=filter(b,a,at);
et=(ifft(abs(e)));
figure,
plot(et)

person Ambbie    schedule 26.12.2012    source источник
comment
вы стираете информацию о фазе, когда делаете abs(ffs(..   -  person bla    schedule 26.12.2012
comment
хм... не понял о чем ты   -  person Ambbie    schedule 26.12.2012
comment
Я вижу, вы отредактировали вопрос и удалили его...   -  person bla    schedule 26.12.2012


Ответы (1)


Как и сейчас, et находится в частотной области из-за БПФ. Вам не нужно фф. просто plot(e) и вы получите форму волны, отфильтрованную во временной области. Вы можете проверить производительность фильтра в freq. домен по fft, хотя, просто

plot(abs(fftshift(fft(fftshift(e)))));
xlim([4000 5000])

Изменить:

В вашем коде, как написано в вопросе, есть следующая ошибка: at содержит ровно 1 секунду информации (или 8192 элемента). Если вы plot(at), вы увидите сумму частот в порядке, но все они happen в одно и то же время. Вот как это исправить:

clear all
Fs = 8192; % or multiply by 3 if needed
T = 1/Fs;                                             
%create tones with different frequency
t=0:T:3;

y1 = sin(2*pi*220*t).*(t<1); 
y2 = sin(2*pi*300*t).*(t<2 & t>=1);
y3 = sin(2*pi*440*t).*(t>=2);                          

at=y1+y2+y3;

[b,a]=butter(2,[2*290/Fs,2*350/Fs],'stop');
e=filter(b,a,at);
figure,
plot(t,e)

введите здесь описание изображения

dt=t(2)-t(1);
N=length(at);
df=1/(N*dt);        % the frequency resolution (df=1/max_T)
if mod(N,2)==0
    f_vector= df*((1:N)-1-N/2);     % frequency vector for EVEN length vectors: f =[-f_max,-f_max+df,...,0,...,f_max-df]
else
    f_vector= df*((1:N)-0.5-N/2);   % frequency vector for ODD length vectors f =[-f_max,-f_max+fw,...,0,...,f_max]
end
freq_vec=f_vector;
fft_vec=fftshift(fft(e));

plot(freq_vec,abs(fft_vec))
xlim([0 1000])

введите здесь описание изображения

person bla    schedule 26.12.2012
comment
но как вернуться к временной области, которая составляет от 0 до 3 секунд, как я создал ранее. Мой вопрос заключается в том, чтобы отфильтровать 300 Гц ... поэтому ... я хочу показать свой сигнал без 300 Гц во временной области ... Вы знаете, как это сделать? - person Ambbie; 26.12.2012
comment
если я хочу полностью отфильтровать мои 300 Гц? Является ли это возможным? - person Ambbie; 26.12.2012
comment
ага...ты мне очень помогаешь..^^ реально большое тебе спасибо. Anywhere, Как спроектировать фильтр, который может полностью фильтровать 300 Гц? - person Ambbie; 26.12.2012
comment
И что означает этот код y1 = sin(2*pi*220*t).*(t‹1); ... зачем t нужно .*(t‹1)? - person Ambbie; 26.12.2012
comment
Если вы просто уменьшите нижний предел вашего фильтра с 290 до 250 и запустите код, вы убьете почти все вклады в 300 Гц. В основном вы можете играть с ограничениями (290 и 350 Гц), пока не оптимизируете свой фильтр... - person bla; 26.12.2012
comment
Спасибо, натан...^^ И что означает этот код y1 = sin(2*pi*220*t).*(t‹1); ... зачем t нужно .*(t‹1)? - person Ambbie; 26.12.2012
comment
это логическое условие, которое устанавливает условие true (или значение 1) для всех элементов t в диапазоне t‹1 и false (или 0) для остальных, таким образом делая y1 равным sin(2*pi*220*t) только в диапазоне [0, 1] и y1=0 для остального диапазона [1 3]. - person bla; 26.12.2012
comment
Привет, Натан, могу я спросить один вопрос? почему после fft моя частота 220 предположительно появляется в части 220, а там она появляется на 660 Гц? все м частоты умножить на три? - person Ambbie; 30.12.2012