
看看下面的程序,应该能帮上你的忙,已经通过调试:
Fs=256;
%采样频率(Hz)
N=256;
%采样点数
t=[0:1/Fs:N/Fs];
%采样时刻
S=2+3cos(2pi10t+pi30/180)+cos(2pi20t+pi90/180);
%我的调试信号,你自己是电流电压数据的话,最开始通过load指令载入就是
Y
=
fft(S,N);
%做FFT变换
Ayy
=
abs(Y);
%取模
Ayy=Ayy/(N/2);
%换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)Fs/N;
%换算成实际的频率值,Fn=(n-1)Fs/N
stem(F(1:N/2),Ayy(1:N/2));
%显示换算后的FFT模值结果
title('幅度-频率曲线图');
1读取wav文件
# -- coding: utf-8 --
import wave
import pylab as pl
import numpy as np
# 打开WAV文档
f = waveopen(r"c:\WINDOWS\Media\dingwav", "rb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = fgetparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = freadframes(nframes)
fclose()
#将波形数据转换为数组
wave_data = npfromstring(str_data, dtype=npshort)
wave_datashape = -1, 2
wave_data = wave_dataT
time = nparange(0, nframes) (10 / framerate)
# 绘制波形
plsubplot(211)
plplot(time, wave_data[0])
plsubplot(212)
plplot(time, wave_data[1], c="g")
plxlabel("time (seconds)")
plshow()
2观察信号频谱
# -- coding: utf-8 --
import numpy as np
import pylab as pl
sampling_rate = 8000
fft_size = 512
t = nparange(0, 10, 10/sampling_rate)
x = npsin(2nppi15625t) + 2npsin(2nppi234375t)
xs = x[:fft_size]
xf = npfftrfft(xs)/fft_size
freqs = nplinspace(0, sampling_rate/2, fft_size/2+1)
xfp = 20nplog10(npclip(npabs(xf), 1e-20, 1e100))
plfigure(figsize=(8,4))
plsubplot(211)
plplot(t[:fft_size], xs)
plxlabel(u"时间(秒)")
pltitle(u"15625Hz和234375Hz的波形和频谱")
plsubplot(212)
plplot(freqs, xfp)
plxlabel(u"频率(Hz)")
plsubplots_adjust(hspace=04)
plshow()
频谱可用CPSD函数做:
cpsd(y,y,window,noverlap,nfft,fs)
这里window是加窗函数,一般默认就可以了,noverlap是覆盖数据个数,一般noverlap=05nfft,fs是采样频率
比如:t=0:001:100;采样频率是1/001=100Hz
y=(1+02sin(902pit)+02sin(1502pit))cos(108110^62pit)
那么cpsd(y,y,[],512,1024,100)
以上就是关于如何使用Matlab,对一组数据进行FFT变换,得到频谱分析,万分感谢。全部的内容,包括:如何使用Matlab,对一组数据进行FFT变换,得到频谱分析,万分感谢。、谁知道如何在python中用处理wav文件,并且对他的频谱进行分析的程序、麻烦matlab高手帮忙做出这个信号的频谱,我是菜鸟,刚接触matlab,真心不懂,请多指教!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)