求用C语言实现FFT变换的程序(见下面)
的有关信息介绍如下:你好,这是我的回答,希望可以帮到你。1)结果讨论一,如果对信号进行同样点数N的FFT变换,采样频率fs越高,则可以分析越高频的信号;与此同时,采样频率越低,对于低频信号的频谱分辨率则越好。二,假设采样点不在正弦信号的波峰、波谷、以及0电压处,频谱则会产生泄露(leakage)。三,对于同样的采样率fs,提高FFT的点数N,则可提高频谱的分辨率。四,如果采样频率fs小于2倍信号频率2*fs(奈圭斯特定理),则频谱分析结果会出错。五,对于(二)中泄露现象,可以通过在信号后面补零点解决。2)程序及注解如下%清除命令窗口及变量clc;clear all;%输入f、N、T、是否补零(补几个零)f=input('Input frequency of the signal: f\n');N=input('Input number of pointsl: N\n');T=input('Input sampling time: T\n');flag=input('Add zero too sampling signal or not? yes=1 no=0\n');if(flag) ZeroNum=input('Input nmber of zeros\n');else ZeroNum=0;end %生成信号,signal是原信号。signal为采样信号。fs=1/T;t=0:0.00001:T*(N+ZeroNum-1);signal=sin(2*pi*f*t); t2=0:T:T*(N+ZeroNum-1);signal2=sin(2*pi*f*t2);if (flag) signal2=[signal2 zeros(1, ZeroNum)];end%画出原信号及采样信号。figure;subplot(2,1,1);plot(t,signal);xlabel('Time(s)');ylabel('Amplitude(volt)');title('Singnal');hold on;subplot(2,1,1);stem(t2,signal2,'r');axis([0 T*(N+ZeroNum) -1 1]);%作FFT变换,计算其幅值,归一化处理,并画出频谱。Y = fft(signal2,N);Pyy = Y.* conj(Y) ;Pyy=(Pyy/sum(Pyy))*2;f=0:fs/(N-1):fs/2;4subplot(2,1,2);bar(f,Pyy(1:N/2));xlabel('Frequency(Hz)');ylabel('Amplitude');title('Frequency compnents of signal');axis([0 fs/2 0 ceil(max(Pyy))])grid on;祝你好运!我可以帮助你,你先设置我最佳答案后,我百度Hii教你。