窗函数fftc语言 窗函数类型

求用C语言实现FFT变换的程序(见下面)

你好,这是我的回答,希望可以帮到你。

发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及白乌鱼等,在重庆网站建设公司成都全网营销、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。

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;4

subplot(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教你。

请问如何在C程序中使用窗函数对时域信号进行加窗处理(没有库函数)

没那么复杂,可以用简单的余弦窗代替,我试过做降噪和变调,效果挺好的。

例如:

double Data_real[1024];

double Data_imagine[1024];

w=2*PI/1024;

for(long i=0;i1024;i++)

{

Data_real[i]*=(0.5*(cos(w*(i-1024*0.5+0.5))+1));//余弦窗

};

FFT(1024,false,Data_real,Data_imagine,real_out,imagine_out);

需要注意的是加窗之后,各处理段之间要进行重叠混合处理。

如何用C语言实现FFT算法(比如窗函数算法),求高手指点一二

参见 数字信号处理第三版 程佩清 著,算法导论里也有讲FFT的

英飞凌单片机又不是DSP 应该没有内嵌的算法,所以应该可以直接套用通用的C语言程序


文章标题:窗函数fftc语言 窗函数类型
链接URL:http://scjbc.cn/article/doicjej.html

其他资讯