关于频谱显示,频率分辨率的问题
我在对医学信号进行频谱分析,采样率为60hz,做fft时取256个信号点,fft(x,N)中的N=36000,想得到的频率分辨率为1/60,且只想观察到0.5到5hz的频谱,请问x轴怎么显示啊???下面是我的源程序和图,我怎么得到的是0到30hz,且频率分辨率为何是5??
clear all;
close all;
clc;
load ecgdatat.txt
x=ecgdatat;
Fs=360;%原始信号的采样率
l=size(x);%4096个点
%对前4080个点采用几点平均法对原信号进行重采样fs=60
k=6;
s=zeros(680,1);
for i=1:680
s(i)=mean(x((1+(i-1)*k):(1+(i-1)*k+k-1)));
end
fs=60;%重采样后的采样率
%低通滤波海明窗
n=64;%滤波器阶数
wn=15/180;%归一化截至频率1对应(fs/2)处
b1=fir1(n,wn,'low');%默认海明窗
y=filter(b1,1,s);
figure(1);
freqz(b1,1);
figure(2);
subplot(211);
plot(s);
subplot(212);
plot(y);
%频谱分析
N=3600;
py=fft(s(1:256),N);
mag=abs(py)*2/N;
f=(0:length(py)-1)*fs/length(py);
%f=(30:1:300)*(1/60);
figure(5);
plot(f(1:N/2),mag(1:N/2));%关键是plot的x轴不会显示,要求0.5到5hz
grid on;
[ 本帖最后由 eight 于 2008-4-22 17:26 编辑 ] 数据太大传不上去,图怎么也帖不上呢
在线等 这是我得到的频谱图 再次试传下数据:@o 图跟数据都上传了,请大家帮忙分析下,感激不尽谢谢!!!:handshake 原帖由 yyfei11 于 2008-4-22 15:41 发表 http://www.chinavib.com/forum/images/common/back.gif
我在对医学信号进行频谱分析,采样率为60hz,做fft时取256个信号点,fft(x,N)中的N=36000,想得到的频率分辨率为1/60,且只想观察到0.5到5hz的频谱,请问x轴怎么显示啊???
下面是我的源程序和图,我怎么得到的是0到30hz,且频率分辨率为何是5??
因为在FFT变换中,频谱在N/2+1时对应于fs/2(N/2时对应fs/2之前的1条谱线),楼主在s中采样频率为60hz,fs/2便是30hz,所以plot(f(1:N/2),mag(1:N/2))是显示了从0到fs/2之前的1条谱线。
而楼主认为频率分辨率为何是5,不知是如何来的?
按楼主的要求:“频率分辨率为1/60,且只想观察到0.5到5hz的频谱”,把程序稍作修改(前面部分都没变,只把稍作改动的部分列出):
%频谱分析
N=3600;
s=s-mean(s);
py=fft(s(1:256),N);
mag=abs(py)*2/length(s);
df=fs/N;
f=(0:length(py)-1)*df;
%f=(30:1:300)*(1/60);
figure(5);
plot(f(1:N/2),mag(1:N/2));%关键是plot的x轴不会显示,要求0.5到5hz
axis(); grid on;
得图有
[ 本帖最后由 songzy41 于 2008-4-22 20:39 编辑 ] 多谢楼上的,:handshake
刚做这方面,感觉不是很懂,差不多都是照猫画虎
我再仔细看看,以后还要多请教你了
这样做了后的频率分辨率是1/60吗?
还有我不太明白:频率分辨率是1/60, 是不是就是说图形显示时每小格是1/60?这个我不是很懂,老师说让我求得的FFT的频率分辨是1/60,我的理解是每小格必须是1/60,这样频谱显示的时候就细致了。这样对吗? 在FFT中它的频率分辨率是指两条谱线之间的频率间隔,我在程序中用df来表示:
df=fs/N=60/3600=1/60
所以频率分辨率是1/60。而画图时的打格线可以人为地去划分,如果在0.5-5Hz的这张图中,以1/60Hz来打格,则整张图都是打格线了。 :@) :@) :@) :@) :@)
谢谢,我明白了
学学
呵呵学习下
刚开始基础小波分析
数据分析软件
有需要对各种振动信号采集和分析仪器,数据分析的请关注以下网址http://www.vipc.com.cn/ {:{39}:},一直不断学习中。。。。
页:
[1]