返回信息流编了一个程序,先读进WAV文件,然后求功率谱密度,但出来的图形似乎不对,请高手指点~~!!万分感谢~~!!
程序如下:
%% Read Wave File
clear all
clc
FileName = 'C:\XY.wav';
[WData,Fs,NBITS] = wavread(FileName); % input wave file
time = 20; % sample time = 20s
T = 1:time*Fs; % range of sample
Wave = WData(T); % sample Wave
Wave = Wave/max(abs(Wave)); % normalization
WLen = length(T); % number of sample
t = linspace(0,time,time*Fs); % generate axis data
figure(1) % draw
plot(t,Wave);
xlabel('T/s');
ylabel('|y|');
title([FileName '----' num2str(time) '秒采样 时域图']);
conwave =Wave.';%转置
%% Power Spectral Density
n = length(conwave);
N = 2^nextpow2(n);%取最接近的较大2次幂
PF = fft(conwave,N);
PF = [PF(N/2+1:N) PF(1:N/2)]; % reshape
PF = reshape(PF,N,1);
PF = abs(PF);
f = linspace(-Fs/2,Fs/2,N);
figure(2)
plot(f,PF);
title('Power Spectral Density');
xlabel('f/Hz');
ylabel('|Y|');
这是一条镜像帖。来源:北邮人论坛 / matlab / #3615同步于 2008/5/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
【求助】请高手指点,求功率谱密度的问题
fpp
2008/5/9镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
具体说一下有什么问题吧
【 在 fpp (飞飘飘) 的大作中提到: 】
: 编了一个程序,先读进WAV文件,然后求功率谱密度,但出来的图形似乎不对,请高手指点~~!!万分感谢~~!!
: 程序如下:
: %% Read Wave File
: ...................
整个程序我看了一遍 编程过程基本正确 但是错在开头了
time = 20; % sample time = 20s
T = 1:time*Fs; % range of sample
我感觉你的错误出现在这里
按照你的程序,你把时域的抽样间隔就定成了20s(什么信号的时域抽样间隔能有这么大?)
转化到时域,频域的周期应该=1/20s=0.05Hz
我现在不知道wavread这个函数求出的Fs 的意思到底是什么
如果是信号的最大频率的话 那么Fs=0.05Hz/2=0.025HZ (我估计很有可能是这个意思)
显然你输入的信号得出来Fs肯定没这么小 如果是语音的话 起码 3400Hz
但是根据你的编程Fs=0.025HZ 是很矛盾的 所以你的功率普图形是错的
不知道我解释对不对
可以继续交流
我感觉只改一处 可能就行了
前提我是把[WData,Fs,NBITS] = wavread(FileName); 输出的Fs 看成是输入信号的最大频率
原来程序 T = 1:time*Fs; 现在改成 T=1:1/(2*Fs):20;
我认为 20s 是整个抽样信号的持续时间 1/(2*Fs)是时域抽样间隔 (频域周期的倒数是时域抽样间隔 而频域周期又等于信号最大频率的2倍)
这样符合实际语音信号情况
大家看看行不行
共同讨论啊