【发布时间】:2015-02-27 00:09:51
【问题描述】:
我正在尝试使用 fft 和 ifft 增加/减少信号的频率。第一个图是1hz,第二个图是2hz,我试图通过改变fft和ifft值来获得。
我可以在频域和时域之间切换,但是如何使用 fft / ifft 增加或减少信号的频率?
注意:是的,我知道我可以通过改变方程式的频率值来改变频率,但我只是将其用作测试信号。我将使用的信号没有将被导入的方程。
我想通过调整 fft 和 ifft 值来获得 2hz 的图
示例代码如下:
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:我使用的是 octave 3.8.1,它适用于 matlab
【问题讨论】:
-
您是否知道频域中的水平移动对应于时域中的频率变化?例如,将函数的 FFT 滑动 +50Hz 会将该函数的频率增加 50Hz。
-
@eigenchris - 我正要提到这一点。 +1 为您的评论。 Rick T - 为什么不简单地将所有频率分量转换为正数?
-
@eigenchris 我尝试改变频域线 ya_fft = fft(ya);通过添加 1 和 2。我还尝试更改行中的相位 phase = unwrap(angle(ya_fft));这不会创建第二个情节我在您的评论中遗漏了什么吗?