DFT的事情拖了很久了,上个学期就一直纠缠着,始终没有理解,去逸夫楼上课每次下课空教室的时候就喜欢一个人“过瘾”,在黑板上写DFT
的表达式,总想着程序实现。大概那样过了一个月,还是没有理解(智商是硬伤),这几天看了stanford的视频,老师挺逗的,感觉好像懂了,
于是重新写DFT。在matlab下实现了 。。。。
个人觉得<The Scientist and Engineer‘s Guide to Digital Signal Processing>这本书还是很好的。很值得一看,如果对DSP有兴趣的话。
好吧,开源,上代码:
%% *************************************************************************************** % code writer :EOF % code date : 2014.03.11 % e-mail : jasonleaster@gmail.com % code purpose : % This code is demo for DFT. I would like to share my code with % someone who is interesting in DSP. If there is something wrong with % my code, please touche me by e-mail. Thank you! % %% *************************************************************************************** TotalSample = 400; %The number of all the signal that our sensor got circle = TotalSample/10; %We assume that the preiod of the signal we generated is ‘circle‘; SignalInS = zeros(circle,1); %This varible is used for recording the signal in frequency domain SignalInT = zeros(TotalSample,1); %This varible is used for recording the signal which were processed by inverse-DFT in time domain OriginalSignal = zeros(TotalSample,1); %This varible is used for recording the original signal that we got. %% initialize a square wave for SampleNumber = -(TotalSample/2):(TotalSample/2)-1 if (mod(abs(SampleNumber),circle) < (circle/2))&&(SampleNumber>0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 5; elseif (mod(abs(SampleNumber),circle) >= (circle/2))&&(SampleNumber>0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 0; elseif (mod(abs(SampleNumber),circle) < (circle/2))&&(SampleNumber<0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 0; elseif (mod(abs(SampleNumber),circle) >= (circle/2))&&(SampleNumber<0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 5; end end %We show the original signal in time domain. figure(1); plot( -(TotalSample/2):(TotalSample/2)-1,OriginalSignal,‘.-‘); title(‘The original signal‘); %% forward-DFT for frequency = -(circle/2):(circle/2)-1 % You must knew what is "Shannon sampling theorem" and you will knew that why frequency is from -(circle/2) to (circle/2)-1 for SampleNumber = -(TotalSample/2):(TotalSample/2)-1%Nothingelse, just from 1 to TotalSample SignalInS((circle/2)+1+frequency) = ... SignalInS((circle/2)+1+frequency) + ... OriginalSignal((TotalSample/2)+1+SampleNumber)*exp(-2*pi*(frequency/circle)*(SampleNumber+(TotalSample/2)+1)*i); end end %We show the real part of processed signal in frequency domain. figure(2); plot(-(circle/2):(circle/2)-1,real(SignalInS),‘-‘); title(‘The real part of signal after processed‘); %We show the imagine part of processed signal in frequency domain. figure(3); plot(-(circle/2):(circle/2)-1,imag(SignalInS),‘-‘); title(‘The imagine part of signal after processed‘); %% inverse-DFT for frequency = -(circle/2):(circle/2)-1 for SampleNumber = -(TotalSample/2):(TotalSample/2)-1 SignalInT((TotalSample/2)+1+SampleNumber) = ... SignalInT((TotalSample/2)+1+SampleNumber) + ... (1/TotalSample)*SignalInS((circle/2)+1+frequency)*exp(2*pi*(frequency/circle)*(SampleNumber+(TotalSample/2)+1)*i); end end %Just show the signal that we rebuilt by inverse-DFT figure(4); plot(-(TotalSample/2):(TotalSample/2)-1,SignalInT,‘-‘); title(‘The rebuilt signal after processed‘);
阿里实习生电面题目:输出给定字符串的全部连续子串,布布扣,bubuko.com
原文:http://blog.csdn.net/ns_code/article/details/21043665