作者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/m.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