作者abcdeffg (你快乐我也快乐)
看板MATLAB
标题[问题] 如何压缩频谱图的频率 (DSP问题)
时间Mon Jun 29 19:02:49 2015
大家好
我现在正在研究一个声档
用Matlab绘出频谱图如下
http://imgur.com/HtSEkVe
[y, fs]=wavread(fileName);
s=60; % s: sampling length
Sample=s*fs; % fs: original sampling frequency
NFFT=2^nextpow2(Sample);
Y=fft(y,NFFT)/Sample;
f=fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
figure(1)
plot(f,2*abs(Y(1:NFFT/2+1)))
现在我想要操作音档,使新的音档保留同样的频谱图形状,但是压缩频率成1/4,
(有点像是线性地压缩)
新音档的频谱图变成下面的图形
http://imgur.com/Csorr3V
我有试过直接降频
但是降频1/4会破坏掉形状,并不是我要的
所以想请问有没有人知道正确的作法?
以上感谢看完~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.60.41
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1435575772.A.DD0.html
1F:推 s4300026: lowpass filter 不行吗? 06/29 21:21
我不是要滤掉高频,
而是想让新音档的频谱图恰好是已知音档的"频域压缩版本",压缩成1/4
例如旧音档在8KHz的能量是0.006,
我就需要新音档在8KHz/4 = 2KHz的能量也是0.006,
同样比例推移,以此类推
※ 编辑: abcdeffg (123.205.139.56), 06/29/2015 23:08:05
2F:→ s4300026: 那就是 moving average了 06/30 08:40
3F:推 s4300026: 说错~~~ 囧 别理我 06/30 08:44
4F:推 s4300026: for kk=1 :压缩率: length-压缩率 06/30 08:50
5F:→ s4300026: new_data = mean(data(kk:kk+压缩率-1)); 06/30 08:50
6F:→ s4300026: end //for的边界需要微调,因为我的要求没有很精准 06/30 08:51
7F:→ s4300026: 不然直接调X轴间距好像也可以... 06/30 09:51
非常感谢,
的确频谱图做出来而且比较贴近我要的样持,
不过转换不回去时域,没办法录制新音档XD
8F:→ s4300026: 以上是在频域图的调法,如果是时域轴,fs=fs/4;试试看 06/30 09:58
保持了频谱图形状不过声档速度慢了4倍XD
看来还是像您昨天所说的,用lowpass filter试试看我要研究的题目了,
谢谢~
※ 编辑: abcdeffg (60.248.60.41), 06/30/2015 10:03:48
9F:推 banco: "不过转换不回去时域" <-- phase也要跟着处理 07/03 08:37