窗函数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