0

fft と ifft を使用して信号の周波数を増減しようとしています。最初のプロットは1hz で、2 番目のプロットは 2hz で、fft と ifft の値を変更して取得しようとしています

周波数ドメインと時間ドメインの間を移動できますが、fft / ifft を使用して信号の周波数を増減するにはどうすればよいですか?

注:はい、方程式の周波数値を変更することで周波数を変更できることは知っていますが、それをテスト信号として使用しているだけです。使用する信号には、インポートされる方程式がありません。

プロット 1hz

2hz のプロットは、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: matlab で動作するオクターブ 3.8.1 を使用しています

4

1 に答える 1