[問題] 如何壓縮頻譜圖的頻率 (DSP問題)

看板MATLAB作者 (你快樂我也快樂)時間10年前 (2015/06/29 19:02), 10年前編輯推噓4(405)
留言9則, 2人參與, 最新討論串1/1
大家好 我現在正在研究一個聲檔 用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://www.ptt.cc/bbs/MATLAB/M.1435575772.A.DD0.html

06/29 21:21, , 1F
lowpass filter 不行嗎?
06/29 21:21, 1F
我不是要濾掉高頻, 而是想讓新音檔的頻譜圖恰好是已知音檔的"頻域壓縮版本",壓縮成1/4 例如舊音檔在8KHz的能量是0.006, 我就需要新音檔在8KHz/4 = 2KHz的能量也是0.006, 同樣比例推移,以此類推 ※ 編輯: abcdeffg (123.205.139.56), 06/29/2015 23:08:05

06/30 08:40, , 2F
那就是 moving average了
06/30 08:40, 2F

06/30 08:44, , 3F
說錯~~~ 囧 別理我
06/30 08:44, 3F

06/30 08:50, , 4F
for kk=1 :壓縮率: length-壓縮率
06/30 08:50, 4F

06/30 08:50, , 5F
new_data = mean(data(kk:kk+壓縮率-1));
06/30 08:50, 5F

06/30 08:51, , 6F
end //for的邊界需要微調,因為我的要求沒有很精準
06/30 08:51, 6F

06/30 09:51, , 7F
不然直接調X軸間距好像也可以...
06/30 09:51, 7F
非常感謝, 的確頻譜圖做出來而且比較貼近我要的樣持, 不過轉換不回去時域,沒辦法錄製新音檔XD

06/30 09:58, , 8F
以上是在頻域圖的調法,如果是時域軸,fs=fs/4;試試看
06/30 09:58, 8F
保持了頻譜圖形狀不過聲檔速度慢了4倍XD 看來還是像您昨天所說的,用lowpass filter試試看我要研究的題目了, 謝謝~ ※ 編輯: abcdeffg (60.248.60.41), 06/30/2015 10:03:48

07/03 08:37, , 9F
"不過轉換不回去時域" <-- phase也要跟著處理
07/03 08:37, 9F
文章代碼(AID): #1LaINStG (MATLAB)
文章代碼(AID): #1LaINStG (MATLAB)