laoxuzi 发表于 2009-9-24 21:28

请高手将记录的一段波形进行傅立叶分析并画图

小弟我记录到一段波形,并保存为*.mat格式,请问如何在MATLAB将其转为可进行分析的函数,并进行傅立叶分析?
请高手给一个程序学习下.

附件为记录到的波形

ChaChing 发表于 2009-9-24 23:20

help load, fft

laoxuzi 发表于 2009-9-25 11:21

load之后怎么把这个文件变成可处理的数据呢?

laoxuzi 发表于 2009-9-25 11:47

我按书上例子做了以下程序,可以画出原波形,想问下,X轴怎么弄成跟原始图一样?

但傅立叶分析却有问题.
想问下,傅立叶分析中频率轴跟采样率有什么关系,我的采样率很高,有三万.FFT坐标轴该如何设?
那个f=1000*(0:2048)/4096; 这为什么要这样算频率?

d=load('D:\MATLAB\R2008a\work\medal2.0.mat');
y=d.medal_Ch1.values;
t=0:0.00003:25.6;
figure(1);
plot(y)
Y=fft(y,4096);
p=Y.*conj(Y)/4096;
f=1000*(0:2048)/4096;    %原来采样率是30000,
figure(2);
plot(f,p(1:2049))

[ 本帖最后由 laoxuzi 于 2009-9-25 11:49 编辑 ]

ChaChing 发表于 2009-9-25 14:34

load medal2.0.mat;
TimeData=medal_Ch1.values; SampleRate=1/medal_Ch1.interval;
Time='/SampleRate;
subplot(2,1,1); plot(Time,TimeData);
nfft=8192; noverlap=nfft/2; window=ones(nfft,1);
=spectrum(TimeData,nfft,noverlap,window,SampleRate);
subplot(2,1,2); plot(f,P(:,1))

ChaChing 发表于 2009-9-25 14:44

两点注意下
1.应该是f=30000*(1:2048)/4096;
2.LZ未去除趋势线, help detrend
LZ参考下楼上的东西

laoxuzi 发表于 2009-9-25 17:06

感谢楼上热心帮助.不太看得懂你的程序,看了趋势线的帮助,没理解.能把我的程序修改下吗?
另外,运行你的程序出现的结果好象不太对.

用自带的记录软件处理后,出现5HZ 10hz的二个波峰.

[ 本帖最后由 laoxuzi 于 2009-9-25 17:09 编辑 ]

ChaChing 发表于 2009-9-25 18:17

好奇?
有兴趣的频率(5/10Hz), 不高为何取样率取那麽大?

laoxuzi 发表于 2009-9-25 20:43

这个波形是通过电生理放大器记录的, 这个设备本是记录神经元放电的,所以采样频率大.
我现在记录的是一个金属棒放在水里的波形,用这个配套的软件的功率普功能处理得到10/5HZ的峰,但坐标轴也是到1500,不拉坐标轴也看到这个二个峰值的.
不知道能不能在MATLAB里处理,只显示0-100r 的坐标范围,这样是不是可以看出来?

谢谢帮助~

[ 本帖最后由 laoxuzi 于 2009-9-25 20:51 编辑 ]

ChaChing 发表于 2009-9-25 22:18

我将频域的解析度提高, 即改为nfft=length(TimeData)
亦找不到5/10HZ, 个人水平专业有限, 待高人路过!:@L
还有先前用的spectrum是v5.6版的函数, 新版好像改了
axis() 可以改变坐标范围,

laoxuzi 发表于 2009-9-25 23:27

难道不同的处理方法显示的频率会有差异?我用SPIKE 2处理的.

不过,几千至上万赫兹的信号,似乎也不太可能.
我们通常记录的交流电干扰也就是50/60HZ这样子.
我按我上面的程序处理时,坐标轴左(零点附近)有一个细线,但拉不开.

[ 本帖最后由 laoxuzi 于 2009-9-25 23:36 编辑 ]

laoxuzi 发表于 2009-9-25 23:37

load medal_2.0.mat;
y=Data1__Stopped__Ch1.values;
Fs=1/Data1__Stopped__Ch1.interval;
t=;
subplot(2,1,1);
plot(t,y)
Y=fft(y,512);
p=Y.*conj(Y)/512;
f=Fs*(0:256)/512;
subplot(2,1,2);
plot(f,p(1:257));
axis()

[ 本帖最后由 laoxuzi 于 2009-9-25 23:38 编辑 ]

ChaChing 发表于 2009-9-26 01:00

回复 12楼 laoxuzi 的帖子

看看楼主贴的图与程序, 有些问题
1. f=Fs*(0:256)/512; 表示f(2)=Fs/512= 58.12Hz, 但图121.jpg第二点约为2Hz??
2. untitled.jpg中在50ms中约有50个点, 所以取样率约为1000Hz??
楼主something is wrong!!

laoxuzi 发表于 2009-9-26 09:22

121图是采样率改成1000记录的.坐标拉开了.
我想做成图像untitled.jpg,untitled是书中的例子,也是1000采样.我也不知道哪里出错?我是一个初学者,还得请教.

songzy41 发表于 2009-9-26 10:39

LZ的信号中有很大的直流分量,在FFT分析前要去除直流分量。又按LZ要求画出500HZ以下的图
load medal2.0.mat
fs=1/medal_Ch1.interval;
x=medal_Ch1.values;
N=length(x);
t=(0:N-1)/fs;
subplot 211; plot(t,x); title('Signal');
xlabel('Time');
x=x-mean(x);
S=fft(x);
N2=N/2;
n2=1:N2;
df=fs/N;
F=(n2-1)*df;
subplot 212; plot(F,abs(S(n2))); grid;
xlim(); title('Signal Spectrum');
xlabel('Frequency (Hz)');
得到的图如下
页: [1] 2
查看完整版本: 请高手将记录的一段波形进行傅立叶分析并画图