How to correctly make FFT of sound set?
2 ビュー (過去 30 日間)
古いコメントを表示
During 7 sec 7 tones plays with frequences (all in Hz), one tone -- one sec. Code:
Fs=44100;f=[261.63 293.67 329.63 349.23 392.00 440 493.88];
duration=7;octava=2;f=f/octava;Df=duration*Fs;FF=2*pi/Fs*f;
len = length(f);tau=Df/len;
n=1:Df;y=zeros(1,Df);
for i = 1:len
amplitude=(n>(i-1)*tau)&(n<i*tau);
y = y + sin(FF(i)*n).*amplitude;
end
soundsc(y, Fs);
This question rather for mathematicians. Now I have to see Fourier tranformation. Perhaps it will not accurate vertical Dirac bars but what?
Code:
Y1=fft(y);plot(abs(Y1))
Two bar on edges? How to make beauty picture? And what frequencies will be?
0 件のコメント
採用された回答
Rick Rosson
2011 年 6 月 17 日
Maybe this will help:
%%Parameters:
playAudio = false;
%%Time domain:
Fs = 44100;
dt = 1/Fs;
StartTime = 0;
StopTime = 1;
t = (StartTime:dt:StopTime-dt)';
%%Cosine waves:
Fc = [261.63 293.67 329.63 349.23 392.00 440 493.88];
y = cos(2*pi*t*Fc);
N = size(y,2);
%%Reshape signal to a single column vector:
y = y(:);
%%Reformulate time domain:
StopTime = N*StopTime;
t = (StartTime:dt:StopTime-dt)';
M = size(t,1);
%%Frequency domain:
dF = Fs/M;
f = -Fs/2:dF:Fs/2-dF;
Y = (N/M)*fftshift(fft(y));
%%Play the music:
if playAudio
sound(y,Fs);
end
%%Plot time domain:
figure;
plot(t,y);
%%Plot frequency domain:
figure;
plot(f,abs(Y));
HTH.
Rick
4 件のコメント
Rick Rosson
2011 年 6 月 17 日
Also, there are a few things about this script that are not quite optimal. Can you figure out what they are and how to fix them?
Danilo Persico
2021 年 7 月 9 日
Hello Mr. Rosson, I would like if you could give an explaination of the code, thank you!
その他の回答 (2 件)
Daniel Shub
2011 年 6 月 15 日
The fft assumes that the signal is cyclical. You need to match up your edges (or zero pad) to get delta functions. The fft also returns both positive and negative frequencies. I would read the documentation about fft and fftshift.
0 件のコメント
Rick Rosson
2011 年 6 月 16 日
Please try the following:
dt = 1/Fs;
len = duration*Fs;
n = dt*(0:len-1);
Df = Fs/len;
f = -Fs/2:Df:Fs/2-Df;
Also:
Y1 = fftshift(fft(y));
plot(abs(Y1));
HTH.
参考
カテゴリ
Help Center および File Exchange で Audio I/O and Waveform Generation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!