我正在尝试使用 fft 和 ifft 增加/减少信号的频率。第一个图是1hz,第二个图是 2hz,我试图通过改变 fft 和 ifft 值来获得。
我可以在频域和时域之间切换,但是如何使用 fft / ifft 增加或减少信号的频率?
注意:是的,我知道我可以通过改变方程式的频率值来改变频率,但我只是将其用作测试信号。我将使用的信号没有将被导入的方程。
2hz 的情节是我试图通过调整 fft 和 ifft 值得到的
下面的示例代码:
clear all,clf
Fs = 100;% Sampling frequency
t=linspace(0,1,Fs);
%1a create signal
ya = .5*sin(2*pi*1*t);
%2a create frequency domain
ya_fft = fft(ya);
mag = abs(ya_fft);
phase = unwrap(angle(ya_fft));
ya_newifft=ifft(mag.*exp(i*phase));
%3a frequency back to time domain
ya_ifft=real(ifft(ya_fft));
%1b time domain plot
subplot(2,2,1),plot(t,ya)
title('1 Orginal Signal Time domain')
ylabel('amplitude')
xlabel('Seconds')
%2b frequency domain plot.
[xfreq,yamp]=rtplotfft(ya,Fs);
yamp2=(yamp(:,1)/max(abs(yamp(:,1)))*1); %keep at 1, amplitude levels adjustied in loop below
subplot(2,2,2),plot(xfreq,yamp)
title('2 Frequency domain')
xlabel('Frequency (Hz)')
ylabel('amplitude')
Ps:我正在使用与 matlab 一起使用的 octave 3.8.1