音频处理五:(音频的FFT计算)
生活随笔
收集整理的這篇文章主要介紹了
音频处理五:(音频的FFT计算)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
程序設(shè)計五:音頻的FFT計算
完整工程文件:
鏈接:https://pan.baidu.com/s/1dcoTGhIeDxsRz-RUr2Paxw 提取碼:jy48一:需求分析
通過使用快速傅立葉變換來增加語音諧波的幅度,從而提高語音質(zhì)量:將時域信號轉(zhuǎn)換為頻域,然后處理頻譜,然后將其轉(zhuǎn)換回時域。我們的目的在于增加振幅,改善語音質(zhì)量,確保音頻沒有削波或失真。將產(chǎn)生的時域信號另存為WAV(16位)并將其包括在提交中。指定增加諧波幅度的量以及聲音的變化方式。
wavtxtfft -i yyy.txt -o fft.txtyyy.txt可以是一行一個數(shù)的格式。
也可以是:一行,空格分隔的多個數(shù)。
1 2 3 4 5 6fft.txt格式:
1+i3 3+i-4 ...或
1+i3 3+i-4 。。。yyy.txt還可以是分幀的輸出格式
則FFT輸出格式對應(yīng)于yyy.txt的分幀格式。(文件存矩陣)
二:參考知識
1.本地.txt信息
BAC009S0003W0121.txt 聲道數(shù)1 采樣率16000 量化位數(shù)2的BAC009S0003W0121.wav的采樣值 frame01.txt BAC009S0003W0121.wav進行幀長200 幀移100的分幀信息2.fft后結(jié)果
fft.txt frame01.txt分幀所產(chǎn)生的FFT數(shù)據(jù) fft_BAC009S0003W0121.txt BAC009S0003W0121.txt沒有分幀產(chǎn)生的FFT數(shù)據(jù)三:python代碼
holiday05.py import numpy as np import sys import getoptdef main(argv):try:#opts, args = getopt.getopt(argv, "-h-i:-f:-o:", ["help", "input=", "framelength", "overlap"])opts, args = getopt.getopt(argv, "-h-i:-o:", ["help", "input=", "output="])except getopt.GetoptError:print('將讀取到的采樣點,包括分幀后的數(shù)據(jù)進行快速傅里葉變換')print('python holiday05.py -i frame01.txt -o fft.txt')sys.exit(2)# 處理 返回值options是以元組為元素的列表。for opt, arg in opts:if opt in ("-h", "--help"):print("音頻的FFT")print('將讀取到的采樣點,包括分幀后的數(shù)據(jù)進行快速傅里葉變換')print('python holiday05.py -i frame01.txt -o fft.txt')sys.exit()elif opt in ("-i", "--input"):input = argelif opt in ("-o", "--output"):output = argwave_data = np.loadtxt(input, dtype=np.float32)# signal = wave_data / np.max(wave_data) # 歸一化,標準化# fft_signal = np.fft.fft(signal)fft_signal = np.fft.fft(wave_data)#fft_data = fft(wave_data)fft_signal = fft_signal.T # 轉(zhuǎn)置是為了下面打印與fft的結(jié)果一致length = len(fft_signal)fft_len = len(fft_signal.T)file = open(output, 'w')# np.savetxt(fft_signal, fft_signal, fmt='%s', delimiter=' ') # 寫入train_output.txt(此處是一股腦的全寫進去,并沒有做任何的分行處理)c1=fft_signal.ndim#判斷數(shù)據(jù)是一維還是二維#print(c1)if c1==2:for i in range(fft_len):for j in range(length):# s = str(bins[i,0]).replace('[',").replace('[',")+'\t'+str(data[i]).replace('[',").replace('[',")#去除[],這兩行按數(shù)據(jù)不同,可以選擇# s = str(data[i, 0]).replace('[', ").replace('[',")s = str(fft_signal[j, i]).replace('[', ").replace(']',")s = s.replace('(', '').replace(')', '') + ' ' # 去除小括號,每個數(shù)據(jù)加空格s = s.replace("'", ").replace(',',")file.write(s)file.write('\n') # 每行讀取完以后換行file.close()else:np.savetxt(output,fft_signal )#, fmt='%s', delimiter=' 'if __name__ == "__main__":# sys.argv[1:]為要處理的參數(shù)列表,sys.argv[0]為腳本名,所以用sys.argv[1:]過濾掉腳本名。main(sys.argv[1:])#python holiday05.py -i frame01.txt -o fft.txt #python holiday05.py -i BAC009S0003W0121.txt -o fft_BAC009S0003W0121.txt #python holiday05.py -i BAC009S0003W0121.txt -o fft02_BAC009S0003W0121.txt四:實現(xiàn)結(jié)果
1.請求幫助
python holiday05.py -h2.分幀數(shù)據(jù)FFT
- -i 輸入采樣值點的文件(分幀數(shù)據(jù))
- -o 保存的文件
3.無分幀數(shù)據(jù)的FFT
- -i 輸入采樣值點的文件
- -o 保存的文件
五:結(jié)果顯示
1.fft.txt
frame01.txt分幀所產(chǎn)生的FFT數(shù)據(jù)
2.fft_BAC009S0003W0121.txt
BAC009S0003W0121.txt沒有分幀產(chǎn)生的FFT數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的音频处理五:(音频的FFT计算)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 音频处理四:(音频的分帧)
- 下一篇: 音频处理六:(音频的反FFT)