[問題] FFT已回收
我的問題是 當我用程式一 使喇叭輸出sin波 音效
用第二個程式 利用mic 收音 作fft
發現 我丟單頻sin波 比方說 40Hz
可是 fft 顯示 我的喇叭產生 40 80 120 160 ...Hz etc 之倍頻
但是我希望看到 是只有40 Hz 之 peak!!!
有高手知道為何如此嗎??
以下程式可將 sin波 以60Hz 由筆電或電腦喇叭輸出
停止可輸入 stop(ao)
Hz = 60;
Repeat_time = 10000; % in second
A=150;
TT = 1000;
ao = analogoutput('winsound');
addchannel(ao,1);%-- 2010/5/28 下午 3:55 --%
set(ao,'SampleRate',Hz*TT)
set(ao,'repeatoutput',Repeat_time*Hz-1)
x = linspace(-pi, pi, TT)';
data3 = A*sin(x);
putdata(ao,data3)
ao
start(ao)
fprintf('done\n');
以下程式 是由麥克風收集聲音 3秒 (可改) 做fft 作圖
圖一是振幅
圖二是功率譜
clear all
fs = 44100; % Sampling frequency
T = 1/fs; % Sample time
N = 10000;
duration = 3;
t = [0:N-1]'/N;
t = t*duration;
fprintf('ok! Push any putton will start for %g sec;', duration);pause
fprintf('working!');
y = wavrecord(duration*fs,fs); % n = d*f = samples; fs = sampling
frequency.
%y = sin(2*pi*50*t);
p = abs(fft(y))/(N/2); % why N/2 ?
p = p(1:N/2).^2; % why ^2
freq = [0:N/2-1]/duration;
y(1:N);
subplot(2,1,1)
plot(t',y(1:N))
%axis([0 3 -1 1])
subplot(2,1,2)
plot(freq,p)
semilogy(freq,p)
axis([0 500 0 1]);
%fprintf('Over!\n');pause
%wavplay(y,fs)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.72.3
→
06/18 17:57, , 1F
06/18 17:57, 1F
→
06/18 18:00, , 2F
06/18 18:00, 2F
→
06/18 18:01, , 3F
06/18 18:01, 3F
→
06/18 18:04, , 4F
06/18 18:04, 4F
→
06/20 12:00, , 5F
06/20 12:00, 5F
→
06/20 12:01, , 6F
06/20 12:01, 6F
→
06/20 12:03, , 7F
06/20 12:03, 7F