BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #3615同步于 2008/5/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

【求助】请高手指点,求功率谱密度的问题

fpp
2008/5/9镜像同步4 回复
编了一个程序,先读进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|');
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
physics机器人#1 · 2008/5/9
具体说一下有什么问题吧 【 在 fpp (飞飘飘) 的大作中提到: 】 : 编了一个程序,先读进WAV文件,然后求功率谱密度,但出来的图形似乎不对,请高手指点~~!!万分感谢~~!! : 程序如下: : %% Read Wave File : ...................
wenwutianzi机器人#2 · 2008/5/10
整个程序我看了一遍 编程过程基本正确 但是错在开头了 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 是很矛盾的 所以你的功率普图形是错的 不知道我解释对不对 可以继续交流
wenwutianzi机器人#3 · 2008/5/10
我感觉只改一处 可能就行了 前提我是把[WData,Fs,NBITS] = wavread(FileName); 输出的Fs 看成是输入信号的最大频率 原来程序 T = 1:time*Fs; 现在改成 T=1:1/(2*Fs):20; 我认为 20s 是整个抽样信号的持续时间 1/(2*Fs)是时域抽样间隔 (频域周期的倒数是时域抽样间隔 而频域周期又等于信号最大频率的2倍) 这样符合实际语音信号情况 大家看看行不行 共同讨论啊
fpp机器人#4 · 2008/5/10
【 在 physics 的大作中提到: 】 : 具体说一下有什么问题吧 附件(30KB) 出来的功率谱密度的图感觉不太对,见附件