%本程序对输入序列实现DIT-FFT基2算法,点数取大于等于长度的2的幂次
%------------------------------------
%
myditfft.c
%------------------------------------
m=nextpow2(x)
%求的x长度对应的2的最低幂次m
N=2^m
if length(x)<N
x=[x,zeros(1,N-length(x))]
%若的长度不是2的幂,补0到2的整数幂
end
nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1
%求1:2^m数列的倒序
y=x(nxd)
%将倒序排列作为的初始值
for mm=1:m
%将DFT做m次基2分解,从左到右,对每次分解作DFT运算乎耐
Nmr=2^mm
u=1
%旋转因子u初始化
WN=exp(-i*2*pi/Nmr)
%本次分解的基本DFT因子WN=exp(-i*2*pi/Nmr)
for j=1:Nmr/2
%本次跨越间隔内的各次碟形运算
for k=j:Nmr:N
%本次碟形运算的岁租春跨型租越间隔为Nmr=2^mm
kp=k+Nmr/2
%确定碟形运算的对应单元下标
t=y(kp)*u
%碟形运算的乘积项
y(kp)=y(k)-t
%碟形运算的加法项
y(k)=y(k)+t
end
u=u*WN
%修改旋转因子,多乘一个基本DFT因子WN
end
end
什么样的信号,频率范围是多少?是要隐春芹用FFT滤波,还是用其他的方式?补充一下,如果是用FFT滤波的话:对于给定的序列x(n),和采样频率fs等信息,先求其FFT频谱
y=abs(fft(x))
plot((1:length(x))*fs/length(x),y)title('信号的频谱')xlabel('频率')
然后你大概确定一下,你需要滤除的频带,上面的图形中可以看出噪声的频带。
比如说,你想要滤除森棚从f1~f2的噪声,最简单的方灶毕法就是在频域将这一段置零,
y(200:300)=0;
%这里我假设的是200到300这一段就是频率f1~f2的。这就是频率域滤波了,然后再反变换回去就行了
x=ifft(y)
%
信号滤波后重建
具体的如果设置参数,就要看你的信号的特征了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)