独孤一1984 发表于 2011-4-24 13:34

大家看看这个程序 fft变换的

程序如下:
m=load('30002.txt');
N=length(m);
fs=3200;%设定采样频率
n=0:N-1;

for i=1:N;
q(i,1)=m(i,2);
end;
d=q';
s0=d;
change=1024;
s1=abs(s0);
plot(1:change,s1(1:change))
title('原始信号')
grid;
%进行FFT变换并做频谱图
y=fft(s1);%进行fft变换
F=y(1:N/2+1)*2/N;
mag=abs(F);%求幅值
f=(0:length(F)-1)'*fs/length(F);%真实频率
figure(2);
plot(f,mag);%做频谱图
axis();
xlabel('频率(Hz)');
ylabel('幅值');
title('幅频谱图');
grid;
数据TXT和频域时域图如下:

file:///C:/Users/nanyi/Desktop/2.jpg

独孤一1984 发表于 2011-4-24 13:35

为什么频域图里突变的振幅出现在32Hz?应该在基频50Hz的,怎么回事 请高手解释!

vib001 发表于 2011-4-24 17:02

看不明白这个程序。
这个话题应该在信号处理版块讨论吧

impulse 发表于 2011-4-29 09:44

本帖最后由 impulse 于 2011-4-29 09:44 编辑

你这个程序问题一堆,找本基础书看看吧,首先你的信号SF=10KHz,而你人为设为3200Hz,其次,FFT不是你这么做的。

独孤一1984 发表于 2011-4-29 10:00

回复 4 # impulse 的帖子

大侠 !能推荐一段FFT程序给我吗?

gczhang 发表于 2011-4-29 10:57

本帖最后由 gczhang 于 2011-4-29 10:59 编辑

独孤一1984 发表于 2011-4-24 13:34 static/image/common/back.gif
程序如下:
m=load('30002.txt');
N=length(m);

你程序中fft变换前的绝对值处理不知何意?

fft变换之前需要去均值, 并且常常需要加窗处理。
另外,变换后的幅值需要归一化处理以得到正确的幅值:
x= x - mean(x)
L = length(x);
Wind = hann(L);               %hanning窗
WinX = Wind.*x;            %数据加窗
fftx = fft(WinX);                %FFT变换
Mag = abs(fftx)/(L/2);       %求幅值并归一化
fft_freq = (1:L)*(Fs/L);      %Fs为采样频率
Freq = ; %绘制幅值谱用的频率变量
plot(Freq, Mag);               %绘制幅值谱



impulse 发表于 2011-4-29 11:05

clc;
clear;
wave=load('30002.txt');
M=length(wave);
N=M;%4*1024;
for i=1:N;
t(i)=wave(i,1)/1000;%采样时间数据
end;

for i=1:N;
x(i)=wave(i,2); %波形数据
end;
x=detrend(x);%去趋势项
dt=t(2)-t(1);
fs=1/dt;%采样频率
f=0:fs/N:(N-1)*fs/N;

subplot(211)
plot(t,x);
title('波形信号')

y=4*abs(fft(x))/N;
subplot(212)
plot(f(1:N/2+1),y(1:N/2+1))
title('频谱')

独孤一1984 发表于 2011-4-29 14:06

回复 7 # impulse 的帖子

多谢 大侠 有什么问题再沟通

独孤一1984 发表于 2011-4-29 14:07

回复 6 # gczhang 的帖子

我试试看 多谢关注
页: [1]
查看完整版本: 大家看看这个程序 fft变换的