日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

音频处理五:(音频的FFT计算)

發布時間:2025/3/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 音频处理五:(音频的FFT计算) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序設計五:音頻的FFT計算

完整工程文件:

鏈接:https://pan.baidu.com/s/1dcoTGhIeDxsRz-RUr2Paxw 提取碼:jy48

一:需求分析

通過使用快速傅立葉變換來增加語音諧波的幅度,從而提高語音質量:將時域信號轉換為頻域,然后處理頻譜,然后將其轉換回時域。我們的目的在于增加振幅,改善語音質量,確保音頻沒有削波或失真。將產生的時域信號另存為WAV(16位)并將其包括在提交中。指定增加諧波幅度的量以及聲音的變化方式。

wavtxtfft -i yyy.txt -o fft.txt

yyy.txt可以是一行一個數的格式。

也可以是:一行,空格分隔的多個數。

1 2 3 4 5 6

fft.txt格式:

1+i3 3+i-4 ...

1+i3 3+i-4 。。。

yyy.txt還可以是分幀的輸出格式

則FFT輸出格式對應于yyy.txt的分幀格式。(文件存矩陣)

二:參考知識

1.本地.txt信息

BAC009S0003W0121.txt 聲道數1 采樣率16000 量化位數2的BAC009S0003W0121.wav的采樣值 frame01.txt BAC009S0003W0121.wav進行幀長200 幀移100的分幀信息

2.fft后結果

fft.txt frame01.txt分幀所產生的FFT數據 fft_BAC009S0003W0121.txt BAC009S0003W0121.txt沒有分幀產生的FFT數據

三: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('將讀取到的采樣點,包括分幀后的數據進行快速傅里葉變換')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('將讀取到的采樣點,包括分幀后的數據進行快速傅里葉變換')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 # 轉置是為了下面打印與fft的結果一致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#判斷數據是一維還是二維#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('[',")#去除[],這兩行按數據不同,可以選擇# s = str(data[i, 0]).replace('[', ").replace('[',")s = str(fft_signal[j, i]).replace('[', ").replace(']',")s = s.replace('(', '').replace(')', '') + ' ' # 去除小括號,每個數據加空格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:]為要處理的參數列表,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

四:實現結果

1.請求幫助

python holiday05.py -h

2.分幀數據FFT

  • -i 輸入采樣值點的文件(分幀數據)
  • -o 保存的文件
python holiday05.py -i frame01.txt -o fft.txt

3.無分幀數據的FFT

  • -i 輸入采樣值點的文件
  • -o 保存的文件
python holiday05.py -i BAC009S0003W0121.txt -o fft_BAC009S0003W0121.txt

五:結果顯示

1.fft.txt

frame01.txt分幀所產生的FFT數據

2.fft_BAC009S0003W0121.txt

BAC009S0003W0121.txt沒有分幀產生的FFT數據

總結

以上是生活随笔為你收集整理的音频处理五:(音频的FFT计算)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。