声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2240|回复: 3

[共享资源] [原创]基于matlab's fft的自定义myfft函数

[复制链接]
发表于 2007-12-20 19:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
刚学着用matlab的fft函数时,遇到一些问题:变换结果向量对应的频率向量是什么?画频谱图时如何手动规定显示频率范围?等。如是乎自定义了一个自己方便用的myfft函数:
% myfft       my fft program based on matlab's fft
% [X,f]=myfft(fs,x,fmax,p)
% inputs:     fs:sampling frequency
%             x:analysed signal(vector)
%             fmax:maximum frequency for display
%             p:plot or not
% outputs:    X:fft result(vector)
%             f:frequencies of X's elements(vector)
function [X,f]=myfft(fs,x,fmax,p)
if nargin==2
    fmax=fs/2;
    p='noplot';
end
if nargin==3
    p='noplot';
end
X=[];
f=[];
n=length(x);
t=[0:n-1].*(1/fs);
X=2*fft(x)/n;
X=X(1:ceil(fmax*n/fs));
f=linspace(0,fmax,ceil(fmax*n/fs));
if strcmp(p,'plot')
    subplot(2,1,1);
    plot(t,x,'k');
    set(gca,'Xlim',[0 t(end)]);
    title('Signal');
    xlabel('t(s)');
    ylabel('amp');
    subplot(2,1,2);
    plot(f,abs(X),'k');
    set(gca,'Xlim',[0 f(end)]);
    title('Spectrum');
    xlabel('f(Hz)');
    ylabel('amp');
end
调试程序如下:
fs=100;
t=0:1/fs:5;
x=5*sin(2*pi*10*t+pi/3);
figure(1);
[X,f]=myfft(fs,x,fs/2,'plot');

[ 本帖最后由 eight 于 2007-12-20 19:19 编辑 ]

评分

1

查看全部评分

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2007-12-20 19:17 | 显示全部楼层
结果如下:
myfft.bmp
发表于 2007-12-20 19:18 | 显示全部楼层
原帖由 hyl2323 于 2007-12-20 19:16 发表
刚学着用matlab的fft函数时,遇到一些问题:变换结果向量对应的频率向量是什么?画频谱图时如何手动规定显示频率范围?等。如是乎自定义了一个自己方便用的myfft函数:
% myfft       my fft program based on ...

这个在信号处理方法板块貌似讨论过,是一样的吗?
 楼主| 发表于 2007-12-21 08:08 | 显示全部楼层
回eight,好像讨论过,但或多或少带有点个人色彩,t=[0:n-1].*(1/fs);
这句话有点心得:整周期采样,如果包含整周期的最后一个点t=0:1/fs:T,出来的频谱就有泄漏,幅值与设定不符,这是我第一次用fft遇到的印象最深刻的问题。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 17:22 , Processed in 0.067028 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表