用matlab编写实现fft的程序。

用matlab编写实现fft的程序。,第1张

function y=myditfft(x)

%本程序对输入序列实现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)

%

信号滤波后重建

具体的如果设置参数,就要看你的信号的特征了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12444026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存