[問題]新手請教FFT 已回收

看板MATLAB作者 (我像是個壞人嗎?)時間13年前 (2010/11/27 12:02), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串1/1
小弟是MATLAB新手 目前的CODE是參考HELP內,想把z轉換成頻域並秀圖 z(i)=sin(x(i)*10)+0.1*sin(x(i)*30+0.2)+0.05*sin(x(i)*70+0.1) +0.2*sin(x(i)*100+0.1); 在頻域中卻發現除了10.30.70.100以外的點也會有值(範例的其他點為零) 真的令我很困惑,是我的CODE寫錯? 可以幫我看一下嗎,謝謝大家~~ L=1.28; delt=0.01; Fs=1/delt; N=128; Fs=1/delt; for i=1:128 x(i)=(i-1)/100; z(i)=sin(x(i)*10)+0.1*sin(x(i)*30+0.2)+0.05*sin(x(i)*70+0.1)... +0.2*sin(x(i)*100+0.1); NFFT = 2^nextpow2(N); end Y = fft(z,NFFT)/NFFT; f = 2*pi*Fs/2*linspace(0,1,NFFT/2); xlabel('w'); ylabel('|Y(w)|'); hold on; plot(f,2*abs(Y(1:NFFT/2)),'o-'); axis([0 125 0 1.5]) 其實我已經有點不知道自己在算什麼了,f也是參考help硬湊出來的 我這張圖與範列有兩點不同 1.每個高峰值的X軸座標(10.30.70.100)卻不是在正確位置 而是有所偏離約少了0.04左右 2.除了高峰值的點,其他算出來的點應該要為零但是我算出來卻是有很小的值 因為沒修過相關課程,講出來的名詞有誤的話請多多包涵 感謝耐心看完的各位~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.116.138.34

11/27 21:19, , 1F
和頻域的resolution 有關
11/27 21:19, 1F

11/27 22:41, , 2F
您好~所以我必須把delt變小或增加fft的取樣點嗎
11/27 22:41, 2F

11/28 09:43, , 3F
找DSP的書來看吧
11/28 09:43, 3F

11/28 10:00, , 4F
z有四個SIN波,照理應該會有四個點在頻域
11/28 10:00, 4F

11/28 10:00, , 5F
所以我想知道用fft這指令是否有無特殊條件會形成誤差
11/28 10:00, 5F

11/28 12:00, , 6F

11/29 03:35, , 7F
是解析頻率的問題,已解絕。 謝謝各位~~
11/29 03:35, 7F
文章代碼(AID): #1Cy8BddW (MATLAB)