欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python编程实现分帧数据的fft变换

程序员文章站 2022-06-04 10:09:47
...

主要功能

续我上一个博客python编程实现语音数据分帧及分帧还原得到的语音分帧数据文件,继续对数据进行fft变换。

说明:本程序对输入数据为1列时能使用自己编写的fft程序进行fft,但运行效率较低,输入较大数据量不容易运行出来,同时也能调fft包实现,且效率较高。
对输入数据数据列数不为1列时只能调fft包进行fft(即自己编写的fft程序对输入数据为多列时不适用)

一 分帧数据的fft变换

程序

主要对分帧后的语音数据进行fft变换,采用调用fft包。

#语音数据进行fft(调包,只能处理大于1列数据的数据文件)
import numpy as np
import getopt
import sys
import wave
'''
    说明:本程序对输入数据为1列时能使用自己编写的fft程序进行fft,但运行效率较低,输入较大数据量不容易运行出来,同时也能调fft包实现,且效率较高
    对输入数据数据列数不为1列时只能调fft包进行fft(即自己编写的fft程序对输入数据为多列时不适用)
 	调包和不调包主要修改程序中的这两个语句:
 	 #fft_data = np.fft.fft(wave_data)
      fft_data = fft1(wave_data)  #自己编写的dft函数,但只能处理一列的数据文件,且运行效率很低
      上面一个语句为调fft包,下面一个语句为自己编写的fft程序
'''

def fft1(wave_data1):
    fft_data=[]
    k1 = np.arange(0, len(wave_data1), 1) #采样点数
    x=len(wave_data1)
    print('数据个数=',x)
    N=len(k1)
    #print('数据个数',N)
    for j in k1:
        fft_data1=0
        for i in range(0, len(wave_data1)):
            fft_data1=fft_data1+wave_data1[i]*complex(np.cos(2*np.pi*i*j/N),-np.sin(2*np.pi*i*j/N)) #f=j*fs/N ; t=i/fs
        fft_data.append(fft_data1)
    fft_data = np.array(fft_data)
    return fft_data
    
def main(argv):
    try:
         opts, args = getopt.getopt(argv[1:], "-i:-o:h", ["input=", "output=","help"])
    except getopt.GetoptError:
        print('输入格式错误,输入为语音数据文件,输出为进行fft变换之后的数据文件')
        print('命令行运行方式:python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt')
        sys.exit()

    # 处理 返回值options是以元组为元素的列表。
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            print("对音频数据进行FFT变换")
            print('命令行运行方式:')
            print('Englishframe1.txt为分帧后的语音数据')
            print('对分帧数据运行:python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt')
            print('test.txt为截取的English.txt的前256行数据')
            print('调包实现:python wavtxtfft.py -i test.txt -o fft_test1.txt')
            print('自己编写的fft程序实现:python wavtxtfft.py -i test.txt -o fft_test2.txt')
            sys.exit()
        elif opt in ("-i", "--input"):
            input = arg
        elif opt in ("-o", "--output"):
            output = arg

            wave_data = np.loadtxt(input, dtype=np.short)  #读取文件数据
            print(wave_data)
     
            #fft_data = np.fft.fft(wave_data)
            fft_data = fft1(wave_data)  #自己编写的dft函数,但只能处理一列的数据文件,且运行效率很低
            print(fft_data)
            length = len(fft_data.T)#得到数据文件列数,(前提是数据不止一列,如果数据只有一列,则得到的是数据的个数)
            #print('文件列数=',length)
            fft_len = len(fft_data)#数据文件行数
            print('文件行数=',fft_len)
            file = open(output, 'w+')
            m = (fft_data.T).ndim  # 判断数据是一维还是多维(对数据取转置,再判断维度,即判断输入数据列数为1列还是多列,1列和多列处理方法不一样)
            if m == 1:  # 如果数据为1列
                print('文件列数=1')
                for i in range(fft_len):
                    s = str(fft_data[i]).replace('[', ").replace('[',")
                    s = s.replace('(', '').replace(')', '') + ' '  # 去除小括号,每个数据加空格
                    s = s.replace("'", ").replace(',',")  # 去除单引号,逗号
                    file.write(s)  # 数据存文件
                    file.write('\n')  # 每行读取完以后换行
                file.close()
            else:
                print('文件列数=', length)
                for i in range(fft_len):
                    for j in range(length):
                    #for j in range(4):
                        s = str(fft_data[i,j]).replace('[', '').replace(']','')
                        #s = str(fft_data[i, j]).replace('[', ").replace(']',")
                        s = s.replace('(', '').replace(')', '') + ' '  # 去除小括号,每个数据加空格
                        s = s.replace("'", '').replace(',','')

                        file.write(s)    #数据存文件
                    file.write('\n')  # 每行读取完以后换行
                file.close()


if __name__ == "__main__":
    main(sys.argv)  #调用函数

#English.txt为1列的原始语音数据
#python wavtxtfft.py -i English.txt -o fft_English.txt
#Englishframe1.txt为分帧后的语音数据
#python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt
#test.txt为截取的English.txt的前256行数据
#python wavtxtfft.py -i test.txt -o fft_test1.txt
#python wavtxtfft.py -i test.txt -o fft_test2.txt

查看帮助文档

python wavtxtfft.py -h

结果:

对音频数据进行FFT变换
命令行运行方式:
Englishframe1.txt为分帧后的语音数据
对分帧数据运行:python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt
test.txt为截取的English.txt的前256行数据
调包实现:python wavtxtfft.py -i test.txt -o fft_test1.txt
自己编写的fft程序实现:python wavtxtfft.py -i test.txt -o fft_test2.txt


运行

python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt
#结果
[[  0 -24  -6 -18]
 [ -6 -18 -14   0]
 [-14   0 -24  -4]
 ...
 [ -8  -8   6  10]
 [  6  10  32  28]
 [ 32  28  34   0]]
[[-48. +0.j   6. +6.j  36. +0.j   6. -6.j]
 [-38. +0.j   8.+18.j  -2. +0.j   8.-18.j]
 [-42. +0.j  10. -4.j -34. +0.j  10. +4.j]
 ...
 [  0. +0.j -14.+18.j  -4. +0.j -14.-18.j]
 [ 76. +0.j -26.+18.j   0. +0.j -26.-18.j]
 [ 94. +0.j  -2.-28.j  38. +0.j  -2.+28.j]]
文件列数= 4
文件行数= 265651

保存文件结果:
python编程实现分帧数据的fft变换
分帧数据fft变换后保持原数据格式。

二 截短语音数据的fft变换(调包和不调包)

程序

输入数据为一行一个数据,分别进行调包的fft和自己编写的fft程序

#语音数据进行fft(调包,只能处理大于1列数据的数据文件)
import numpy as np
import getopt
import sys
import wave
'''
    说明:本程序对输入数据为1列时能使用自己编写的fft程序进行fft,但运行效率较低,输入较大数据量不容易运行出来,同时也能调fft包实现,且效率较高
    对输入数据数据列数不为1列时只能调fft包进行fft(即自己编写的fft程序对输入数据为多列时不适用)
 	调包和不调包主要修改程序中的这两个语句:
 	 #fft_data = np.fft.fft(wave_data)
      fft_data = fft1(wave_data)  #自己编写的dft函数,但只能处理一列的数据文件,且运行效率很低
      上面一个语句为调fft包,下面一个语句为自己编写的fft程序
'''

def fft1(wave_data1):
    fft_data=[]
    k1 = np.arange(0, len(wave_data1), 1) #采样点数
    x=len(wave_data1)
    print('数据个数=',x)
    N=len(k1)
    #print('数据个数',N)
    for j in k1:
        fft_data1=0
        for i in range(0, len(wave_data1)):
            fft_data1=fft_data1+wave_data1[i]*complex(np.cos(2*np.pi*i*j/N),-np.sin(2*np.pi*i*j/N)) #f=j*fs/N ; t=i/fs
        fft_data.append(fft_data1)
    fft_data = np.array(fft_data)
    return fft_data
    
def main(argv):
    try:
         opts, args = getopt.getopt(argv[1:], "-i:-o:h", ["input=", "output=","help"])
    except getopt.GetoptError:
        print('输入格式错误,输入为语音数据文件,输出为进行fft变换之后的数据文件')
        print('命令行运行方式:python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt')
        sys.exit()

    # 处理 返回值options是以元组为元素的列表。
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            print("对音频数据进行FFT变换")
            print('命令行运行方式:')
            print('Englishframe1.txt为分帧后的语音数据')
            print('对分帧数据运行:python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt')
            print('test.txt为截取的English.txt的前256行数据')
            print('调包实现:python wavtxtfft.py -i test.txt -o fft_test1.txt')
            print('自己编写的fft程序实现:python wavtxtfft.py -i test.txt -o fft_test2.txt')
            sys.exit()
        elif opt in ("-i", "--input"):
            input = arg
        elif opt in ("-o", "--output"):
            output = arg

            wave_data = np.loadtxt(input, dtype=np.short)  #读取文件数据
            #wave_data = np.loadtxt(input, dtype=np.float32)
            print(wave_data)
            # data = wave_data / np.max(wave_data)   # 归一化
            # fft_signal = np.fft.fft(data)

            #fft_data = np.fft.fft(wave_data)
            fft_data = fft1(wave_data)  #自己编写的dft函数,但只能处理一列的数据文件,且运行效率很低
            print(fft_data)
            length = len(fft_data.T)#得到数据文件列数,(前提是数据不止一列,如果数据只有一列,则得到的是数据的个数)
            #print('文件列数=',length)
            fft_len = len(fft_data)#数据文件行数
            print('文件行数=',fft_len)
            file = open(output, 'w+')
            m = (fft_data.T).ndim  # 判断数据是一维还是多维(对数据取转置,再判断维度,即判断输入数据列数为1列还是多列,1列和多列处理方法不一样)
            if m == 1:  # 如果数据为1列
                print('文件列数=1')
                for i in range(fft_len):
                    s = str(fft_data[i]).replace('[', ").replace('[',")
                    s = s.replace('(', '').replace(')', '') + ' '  # 去除小括号,每个数据加空格
                    s = s.replace("'", ").replace(',',")  # 去除单引号,逗号
                    file.write(s)  # 数据存文件
                    file.write('\n')  # 每行读取完以后换行
                file.close()
            else:
                print('文件列数=', length)
                for i in range(fft_len):
                    for j in range(length):
                    #for j in range(4):
                        s = str(fft_data[i,j]).replace('[', '').replace(']','')
                        #s = str(fft_data[i, j]).replace('[', ").replace(']',")
                        s = s.replace('(', '').replace(')', '') + ' '  # 去除小括号,每个数据加空格
                        s = s.replace("'", '').replace(',','')

                        file.write(s)    #数据存文件
                    file.write('\n')  # 每行读取完以后换行
                file.close()


if __name__ == "__main__":
    # sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。
    main(sys.argv) #调用函数

#English.txt为1列的原始语音数据
#python wavtxtfft.py -i English.txt -o fft_English.txt
#Englishframe1.txt为分帧后的语音数据
#python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt
#test.txt为截取的English.txt的前256行数据
#python wavtxtfft.py -i test.txt -o fft_test1.txt
#python wavtxtfft.py -i test.txt -o fft_test2.txt

查看帮助文档

python wavtxtfft1.py -h

结果:

对音频数据进行FFT变换
命令行运行方式:
Englishframe1.txt为分帧后的语音数据
对分帧数据运行:python wavtxtfft.py -i Englishframe1.txt -o fft_Englishframe1.txt
test.txt为截取的English.txt的前256行数据
调包实现:python wavtxtfft.py -i test.txt -o fft_test1.txt
自己编写的fft程序实现:python wavtxtfft.py -i test.txt -o fft_test2.txt

运行

1 调fft包:

python wavtxtfft1.py -i test.txt -o fft_test1.txt

结果:

[  0 -24  -6 -18 -14   0 -24  -4 -26 -24 -40 -24 -16 -26 -18 -20 -16 -24
 -24 -14   6 -10 -16  -8   0  -4   2 -16  -8 -20 -20 -16 -34 -16 -28 -16
 -18 -34 -20 -20 -22 -16 -10 -12 -12  22  -6   4 -20  -8   6  -8  -8 -18
 -16  -8  -4  -6   0  -6  -4   6  10 -10   4 -16  -8 -10 -16   4  -8 -16
 -34 -38 -20 -38 -16 -24 -26 -10 -12 -12   0  10 -10   0  -2   0   0  -2
 -10   2 -16 -16 -12 -16 -38 -24 -24 -24 -12 -10   4 -26 -22 -16   0  -6
  12 -12   8 -14 -18 -16  -8  -8 -30 -18 -26  -2 -12   0 -12   2   6  14
   8  -2  10  -8 -16 -22 -16   0  -8   8  -8 -10 -10  -2   6  -2  -6  14
   8   0   0  -8  16   8  20   6   6   0  -6 -20 -12  -8 -14  14   4  -6
 -24 -18  -6   0  12  -4   0   0  14   6   2  10   8  -2   4  -8   8  -2
   0  14   0   8  -2   0  20  16   8  14  18  14   4  -2   0  -6  -2  -8
   6  20   8   4  -8  -8  20  -8  -6  14  22  22  14   4   6  36  12  18
  16  14  30 -16  -4   8  22  18  -6  12  16  24   6   4 -10 -24  -8  28
  -8 -14  10  -8   0  -2 -14  -4   4  14   4   8   6   4  14 -16  18   4
   4   0  22  -8]
[-1.12000000e+03   +0.j          3.26317201e+01+1289.67006131j
 -3.14114972e+02 +324.15884006j -2.88559096e+02 +385.34662575j
  1.37776670e+02 +111.08207045j  1.09852148e+02 +104.66658682j
  1.38321927e+02 -160.74669664j  3.35866136e+01 +237.52599887j
 -1.03422079e+02 +678.02562007j  2.23567847e+02 +197.52937735j
 -2.50363799e+01 +107.3779786j  -5.73485295e+00 +141.88381605j
  6.49426995e+02 +121.47975419j -3.58887903e+02 -339.31342273j
 -1.64240578e+02  +35.25256554j -9.40938372e+00 -101.31205246j
 -2.11377617e+01 +126.94885254j  5.61393579e+01 -158.06722847j
  5.06534027e+01  +93.14639225j  6.44618573e+01   -4.65729124j
 -2.05496325e+02 +194.56543631j -4.88329246e+01  -77.6522581j
  6.08292462e+01  +23.95887762j  1.01689748e+02 -220.02928139j
 -3.71665454e+01  +43.8355504j  -7.29434341e+01 +106.71790794j
  7.25648891e+01  -67.77968779j  1.63928914e+01 +192.91602427j
 -1.39834630e+02 +327.00849715j -9.53096319e+01   +9.50717928j
 -1.52804041e+02 +103.08754253j -2.69092104e+00 -288.60230013j
 -6.92720779e+01 +267.20310217j -9.05944568e+01  +45.90490713j
  6.85787619e+01  -14.53603417j -1.38471579e+02 +122.29678766j
  1.15731179e+02  -41.14382907j  1.09243119e+02  +91.06248245j
  8.02673356e+01 +133.46652612j -1.28071882e+02  -26.54391661j
  1.47268299e+02 +222.57012231j  8.67452834e+00 -188.65662632j
 -9.98755716e+01 -132.29695462j -7.99752416e-02  -30.95954007j
  5.37962767e+01  -21.07907678j  1.98852061e+02  +46.86023676j
 -8.92550497e+00  +95.6694227j  -1.27283964e+02  +16.8150631j
 -2.57714079e+01  +92.16488999j -2.04348754e+02 +229.0303401j
 -2.59659178e+01  -44.9122868j   3.41526867e+01  +25.39941225j
 -4.80143489e+01 -338.66925463j  1.05804968e+02 -129.48944245j
  1.00849701e+02  -42.22585849j  8.33511926e+01 +229.67144457j
 -6.61357215e+01  +35.88739446j -2.38819980e+02  +33.13099703j
  3.83745070e+00  -91.6122539j   1.10790869e+02  +23.90575241j
  1.72514635e+01 +290.70604859j -1.30808298e+02 +107.63936458j
  5.83727293e+01 +137.02644056j -4.97487809e+01  -62.03846125j
 -9.80000000e+01  -10.j          4.93488614e+01  +16.46531581j
  1.30012602e+02 -103.10191317j  4.23136511e+01  +68.72684186j
  8.42721381e+01 -104.69640657j -1.12023272e+02  +44.23815107j
 -1.01577939e+02  +86.57065125j -1.66842805e+02   -3.39553883j
 -1.43328715e+02  -68.96242543j -8.01590342e+01  -13.42520001j
  4.51450310e+01 -178.66156381j -4.18788064e+01   +1.4930413j
 -4.75042589e+01  -88.04195587j  4.11984786e+01  -61.04705864j
  5.46231949e+01  +79.62887113j -3.01856256e+00  -11.99678606j
 -1.54230061e+00  +87.42982525j -7.01860973e+01  -38.91542255j
 -1.93295002e+02  -71.16097358j -1.22250090e+02  +59.39664243j
  2.20480913e+00  -83.22075219j -5.26233496e+01  -41.90820396j
 -5.65392700e+01   +8.75424358j  9.46934465e+01 -103.1632863j
  1.54401832e+02 -194.31748217j  6.74052284e+01  +63.61325522j
  1.15176861e+02 +148.48734762j -5.80638016e+01  +72.24585626j
  6.84024955e+01  +31.36929288j  1.53540652e+02  -78.33190479j
 -8.44635440e+01  -89.93794006j  7.87888516e+00  +52.95896683j
 -9.47279221e+01 +171.20310217j -6.29872030e+01  -14.60111885j
  3.99972538e+01  -86.50392352j  5.72507965e+01   +9.05829178j
  2.01647142e+02 +164.04471876j  1.38087139e+01  -42.31864912j
  1.65203714e+02  +95.83996265j  1.64227268e+01 +181.92064646j
 -3.86314367e+01  +62.09513219j -1.25511682e+02  -66.1112022j
 -8.41008059e+01  +86.21346721j  7.38986391e+01 +190.42542855j
  2.99869078e+02  -36.61017952j  3.84199597e+01  +53.7384078j
 -9.77614425e+01  -74.66531874j -4.98889595e+01  -91.09087479j
  1.64514702e+01 -173.78621219j  2.51033425e+01  -64.81756136j
  2.63685217e+02   -5.6394346j   1.28308700e+01  -73.65342137j
  2.24050818e+02  -95.10351096j -1.70965039e+02  -35.9969963j
  1.34022441e+02  -96.67427208j  7.37914246e+01 -171.14397181j
  7.01436631e+00  -31.67701356j  1.15695912e+02 -244.79920298j
 -1.32422541e+02  -69.4123163j   1.28572348e+02  +53.88308126j
  5.84204981e+01  -17.97390857j  1.28868412e+02   +2.13368659j
  2.29817507e+01   +6.76166581j  3.67605640e+01  -30.82624092j
  7.60000000e+01   +0.j          3.67605640e+01  +30.82624092j
  2.29817507e+01   -6.76166581j  1.28868412e+02   -2.13368659j
  5.84204981e+01  +17.97390857j  1.28572348e+02  -53.88308126j
 -1.32422541e+02  +69.4123163j   1.15695912e+02 +244.79920298j
  7.01436631e+00  +31.67701356j  7.37914246e+01 +171.14397181j
  1.34022441e+02  +96.67427208j -1.70965039e+02  +35.9969963j
  2.24050818e+02  +95.10351096j  1.28308700e+01  +73.65342137j
  2.63685217e+02   +5.6394346j   2.51033425e+01  +64.81756136j
  1.64514702e+01 +173.78621219j -4.98889595e+01  +91.09087479j
 -9.77614425e+01  +74.66531874j  3.84199597e+01  -53.7384078j
  2.99869078e+02  +36.61017952j  7.38986391e+01 -190.42542855j
 -8.41008059e+01  -86.21346721j -1.25511682e+02  +66.1112022j
 -3.86314367e+01  -62.09513219j  1.64227268e+01 -181.92064646j
  1.65203714e+02  -95.83996265j  1.38087139e+01  +42.31864912j
  2.01647142e+02 -164.04471876j  5.72507965e+01   -9.05829178j
  3.99972538e+01  +86.50392352j -6.29872030e+01  +14.60111885j
 -9.47279221e+01 -171.20310217j  7.87888516e+00  -52.95896683j
 -8.44635440e+01  +89.93794006j  1.53540652e+02  +78.33190479j
  6.84024955e+01  -31.36929288j -5.80638016e+01  -72.24585626j
  1.15176861e+02 -148.48734762j  6.74052284e+01  -63.61325522j
  1.54401832e+02 +194.31748217j  9.46934465e+01 +103.1632863j
 -5.65392700e+01   -8.75424358j -5.26233496e+01  +41.90820396j
  2.20480913e+00  +83.22075219j -1.22250090e+02  -59.39664243j
 -1.93295002e+02  +71.16097358j -7.01860973e+01  +38.91542255j
 -1.54230061e+00  -87.42982525j -3.01856256e+00  +11.99678606j
  5.46231949e+01  -79.62887113j  4.11984786e+01  +61.04705864j
 -4.75042589e+01  +88.04195587j -4.18788064e+01   -1.4930413j
  4.51450310e+01 +178.66156381j -8.01590342e+01  +13.42520001j
 -1.43328715e+02  +68.96242543j -1.66842805e+02   +3.39553883j
 -1.01577939e+02  -86.57065125j -1.12023272e+02  -44.23815107j
  8.42721381e+01 +104.69640657j  4.23136511e+01  -68.72684186j
  1.30012602e+02 +103.10191317j  4.93488614e+01  -16.46531581j
 -9.80000000e+01  +10.j         -4.97487809e+01  +62.03846125j
  5.83727293e+01 -137.02644056j -1.30808298e+02 -107.63936458j
  1.72514635e+01 -290.70604859j  1.10790869e+02  -23.90575241j
  3.83745070e+00  +91.6122539j  -2.38819980e+02  -33.13099703j
 -6.61357215e+01  -35.88739446j  8.33511926e+01 -229.67144457j
  1.00849701e+02  +42.22585849j  1.05804968e+02 +129.48944245j
 -4.80143489e+01 +338.66925463j  3.41526867e+01  -25.39941225j
 -2.59659178e+01  +44.9122868j  -2.04348754e+02 -229.0303401j
 -2.57714079e+01  -92.16488999j -1.27283964e+02  -16.8150631j
 -8.92550497e+00  -95.6694227j   1.98852061e+02  -46.86023676j
  5.37962767e+01  +21.07907678j -7.99752416e-02  +30.95954007j
 -9.98755716e+01 +132.29695462j  8.67452834e+00 +188.65662632j
  1.47268299e+02 -222.57012231j -1.28071882e+02  +26.54391661j
  8.02673356e+01 -133.46652612j  1.09243119e+02  -91.06248245j
  1.15731179e+02  +41.14382907j -1.38471579e+02 -122.29678766j
  6.85787619e+01  +14.53603417j -9.05944568e+01  -45.90490713j
 -6.92720779e+01 -267.20310217j -2.69092104e+00 +288.60230013j
 -1.52804041e+02 -103.08754253j -9.53096319e+01   -9.50717928j
 -1.39834630e+02 -327.00849715j  1.63928914e+01 -192.91602427j
  7.25648891e+01  +67.77968779j -7.29434341e+01 -106.71790794j
 -3.71665454e+01  -43.8355504j   1.01689748e+02 +220.02928139j
  6.08292462e+01  -23.95887762j -4.88329246e+01  +77.6522581j
 -2.05496325e+02 -194.56543631j  6.44618573e+01   +4.65729124j
  5.06534027e+01  -93.14639225j  5.61393579e+01 +158.06722847j
 -2.11377617e+01 -126.94885254j -9.40938372e+00 +101.31205246j
 -1.64240578e+02  -35.25256554j -3.58887903e+02 +339.31342273j
  6.49426995e+02 -121.47975419j -5.73485295e+00 -141.88381605j
 -2.50363799e+01 -107.3779786j   2.23567847e+02 -197.52937735j
 -1.03422079e+02 -678.02562007j  3.35866136e+01 -237.52599887j
  1.38321927e+02 +160.74669664j  1.09852148e+02 -104.66658682j
  1.37776670e+02 -111.08207045j -2.88559096e+02 -385.34662575j
 -3.14114972e+02 -324.15884006j  3.26317201e+01-1289.67006131j]
文件行数= 256
文件列数=1


保存文件结果:
python编程实现分帧数据的fft变换

2 自己编写的fft程序:

python wavtxtfft1.py -i test.txt -o fft_test2.txt

结果:

[  0 -24  -6 -18 -14   0 -24  -4 -26 -24 -40 -24 -16 -26 -18 -20 -16 -24
 -24 -14   6 -10 -16  -8   0  -4   2 -16  -8 -20 -20 -16 -34 -16 -28 -16
 -18 -34 -20 -20 -22 -16 -10 -12 -12  22  -6   4 -20  -8   6  -8  -8 -18
 -16  -8  -4  -6   0  -6  -4   6  10 -10   4 -16  -8 -10 -16   4  -8 -16
 -34 -38 -20 -38 -16 -24 -26 -10 -12 -12   0  10 -10   0  -2   0   0  -2
 -10   2 -16 -16 -12 -16 -38 -24 -24 -24 -12 -10   4 -26 -22 -16   0  -6
  12 -12   8 -14 -18 -16  -8  -8 -30 -18 -26  -2 -12   0 -12   2   6  14
   8  -2  10  -8 -16 -22 -16   0  -8   8  -8 -10 -10  -2   6  -2  -6  14
   8   0   0  -8  16   8  20   6   6   0  -6 -20 -12  -8 -14  14   4  -6
 -24 -18  -6   0  12  -4   0   0  14   6   2  10   8  -2   4  -8   8  -2
   0  14   0   8  -2   0  20  16   8  14  18  14   4  -2   0  -6  -2  -8
   6  20   8   4  -8  -8  20  -8  -6  14  22  22  14   4   6  36  12  18
  16  14  30 -16  -4   8  22  18  -6  12  16  24   6   4 -10 -24  -8  28
  -8 -14  10  -8   0  -2 -14  -4   4  14   4   8   6   4  14 -16  18   4
   4   0  22  -8]
数据个数= 256
[-1.12000000e+03+0.00000000e+00j  3.26317201e+01+1.28967006e+03j
 -3.14114972e+02+3.24158840e+02j -2.88559096e+02+3.85346626e+02j
  1.37776670e+02+1.11082070e+02j  1.09852148e+02+1.04666587e+02j
  1.38321927e+02-1.60746697e+02j  3.35866136e+01+2.37525999e+02j
 -1.03422079e+02+6.78025620e+02j  2.23567847e+02+1.97529377e+02j
 -2.50363799e+01+1.07377979e+02j -5.73485295e+00+1.41883816e+02j
  6.49426995e+02+1.21479754e+02j -3.58887903e+02-3.39313423e+02j
 -1.64240578e+02+3.52525655e+01j -9.40938372e+00-1.01312052e+02j
 -2.11377617e+01+1.26948853e+02j  5.61393579e+01-1.58067228e+02j
  5.06534027e+01+9.31463923e+01j  6.44618573e+01-4.65729124e+00j
 -2.05496325e+02+1.94565436e+02j -4.88329246e+01-7.76522581e+01j
  6.08292462e+01+2.39588776e+01j  1.01689748e+02-2.20029281e+02j
 -3.71665454e+01+4.38355504e+01j -7.29434341e+01+1.06717908e+02j
  7.25648891e+01-6.77796878e+01j  1.63928914e+01+1.92916024e+02j
 -1.39834630e+02+3.27008497e+02j -9.53096319e+01+9.50717928e+00j
 -1.52804041e+02+1.03087543e+02j -2.69092104e+00-2.88602300e+02j
 -6.92720779e+01+2.67203102e+02j -9.05944568e+01+4.59049071e+01j
  6.85787619e+01-1.45360342e+01j -1.38471579e+02+1.22296788e+02j
  1.15731179e+02-4.11438291e+01j  1.09243119e+02+9.10624825e+01j
  8.02673356e+01+1.33466526e+02j -1.28071882e+02-2.65439166e+01j
  1.47268299e+02+2.22570122e+02j  8.67452834e+00-1.88656626e+02j
 -9.98755716e+01-1.32296955e+02j -7.99752416e-02-3.09595401e+01j
  5.37962767e+01-2.10790768e+01j  1.98852061e+02+4.68602368e+01j
 -8.92550497e+00+9.56694227e+01j -1.27283964e+02+1.68150631e+01j
 -2.57714079e+01+9.21648900e+01j -2.04348754e+02+2.29030340e+02j
 -2.59659178e+01-4.49122868e+01j  3.41526867e+01+2.53994122e+01j
 -4.80143489e+01-3.38669255e+02j  1.05804968e+02-1.29489442e+02j
  1.00849701e+02-4.22258585e+01j  8.33511926e+01+2.29671445e+02j
 -6.61357215e+01+3.58873945e+01j -2.38819980e+02+3.31309970e+01j
  3.83745070e+00-9.16122539e+01j  1.10790869e+02+2.39057524e+01j
  1.72514635e+01+2.90706049e+02j -1.30808298e+02+1.07639365e+02j
  5.83727293e+01+1.37026441e+02j -4.97487809e+01-6.20384612e+01j
 -9.80000000e+01-1.00000000e+01j  4.93488614e+01+1.64653158e+01j
  1.30012602e+02-1.03101913e+02j  4.23136511e+01+6.87268419e+01j
  8.42721381e+01-1.04696407e+02j -1.12023272e+02+4.42381511e+01j
 -1.01577939e+02+8.65706512e+01j -1.66842805e+02-3.39553883e+00j
 -1.43328715e+02-6.89624254e+01j -8.01590342e+01-1.34252000e+01j
  4.51450310e+01-1.78661564e+02j -4.18788064e+01+1.49304130e+00j
 -4.75042589e+01-8.80419559e+01j  4.11984786e+01-6.10470586e+01j
  5.46231949e+01+7.96288711e+01j -3.01856256e+00-1.19967861e+01j
 -1.54230061e+00+8.74298253e+01j -7.01860973e+01-3.89154226e+01j
 -1.93295002e+02-7.11609736e+01j -1.22250090e+02+5.93966424e+01j
  2.20480913e+00-8.32207522e+01j -5.26233496e+01-4.19082040e+01j
 -5.65392700e+01+8.75424358e+00j  9.46934465e+01-1.03163286e+02j
  1.54401832e+02-1.94317482e+02j  6.74052284e+01+6.36132552e+01j
  1.15176861e+02+1.48487348e+02j -5.80638016e+01+7.22458563e+01j
  6.84024955e+01+3.13692929e+01j  1.53540652e+02-7.83319048e+01j
 -8.44635440e+01-8.99379401e+01j  7.87888516e+00+5.29589668e+01j
 -9.47279221e+01+1.71203102e+02j -6.29872030e+01-1.46011188e+01j
  3.99972538e+01-8.65039235e+01j  5.72507965e+01+9.05829178e+00j
  2.01647142e+02+1.64044719e+02j  1.38087139e+01-4.23186491e+01j
  1.65203714e+02+9.58399626e+01j  1.64227268e+01+1.81920646e+02j
 -3.86314367e+01+6.20951322e+01j -1.25511682e+02-6.61112022e+01j
 -8.41008059e+01+8.62134672e+01j  7.38986391e+01+1.90425429e+02j
  2.99869078e+02-3.66101795e+01j  3.84199597e+01+5.37384078e+01j
 -9.77614425e+01-7.46653187e+01j -4.98889595e+01-9.10908748e+01j
  1.64514702e+01-1.73786212e+02j  2.51033425e+01-6.48175614e+01j
  2.63685217e+02-5.63943460e+00j  1.28308700e+01-7.36534214e+01j
  2.24050818e+02-9.51035110e+01j -1.70965039e+02-3.59969963e+01j
  1.34022441e+02-9.66742721e+01j  7.37914246e+01-1.71143972e+02j
  7.01436631e+00-3.16770136e+01j  1.15695912e+02-2.44799203e+02j
 -1.32422541e+02-6.94123163e+01j  1.28572348e+02+5.38830813e+01j
  5.84204981e+01-1.79739086e+01j  1.28868412e+02+2.13368659e+00j
  2.29817507e+01+6.76166581e+00j  3.67605640e+01-3.08262409e+01j
  7.60000000e+01+4.67041511e-12j  3.67605640e+01+3.08262409e+01j
  2.29817507e+01-6.76166581e+00j  1.28868412e+02-2.13368659e+00j
  5.84204981e+01+1.79739086e+01j  1.28572348e+02-5.38830813e+01j
 -1.32422541e+02+6.94123163e+01j  1.15695912e+02+2.44799203e+02j
  7.01436631e+00+3.16770136e+01j  7.37914246e+01+1.71143972e+02j
  1.34022441e+02+9.66742721e+01j -1.70965039e+02+3.59969963e+01j
  2.24050818e+02+9.51035110e+01j  1.28308700e+01+7.36534214e+01j
  2.63685217e+02+5.63943460e+00j  2.51033425e+01+6.48175614e+01j
  1.64514702e+01+1.73786212e+02j -4.98889595e+01+9.10908748e+01j
 -9.77614425e+01+7.46653187e+01j  3.84199597e+01-5.37384078e+01j
  2.99869078e+02+3.66101795e+01j  7.38986391e+01-1.90425429e+02j
 -8.41008059e+01-8.62134672e+01j -1.25511682e+02+6.61112022e+01j
 -3.86314367e+01-6.20951322e+01j  1.64227268e+01-1.81920646e+02j
  1.65203714e+02-9.58399626e+01j  1.38087139e+01+4.23186491e+01j
  2.01647142e+02-1.64044719e+02j  5.72507965e+01-9.05829178e+00j
  3.99972538e+01+8.65039235e+01j -6.29872030e+01+1.46011188e+01j
 -9.47279221e+01-1.71203102e+02j  7.87888516e+00-5.29589668e+01j
 -8.44635440e+01+8.99379401e+01j  1.53540652e+02+7.83319048e+01j
  6.84024955e+01-3.13692929e+01j -5.80638016e+01-7.22458563e+01j
  1.15176861e+02-1.48487348e+02j  6.74052284e+01-6.36132552e+01j
  1.54401832e+02+1.94317482e+02j  9.46934465e+01+1.03163286e+02j
 -5.65392700e+01-8.75424358e+00j -5.26233496e+01+4.19082040e+01j
  2.20480913e+00+8.32207522e+01j -1.22250090e+02-5.93966424e+01j
 -1.93295002e+02+7.11609736e+01j -7.01860973e+01+3.89154226e+01j
 -1.54230061e+00-8.74298253e+01j -3.01856256e+00+1.19967861e+01j
  5.46231949e+01-7.96288711e+01j  4.11984786e+01+6.10470586e+01j
 -4.75042589e+01+8.80419559e+01j -4.18788064e+01-1.49304130e+00j
  4.51450310e+01+1.78661564e+02j -8.01590342e+01+1.34252000e+01j
 -1.43328715e+02+6.89624254e+01j -1.66842805e+02+3.39553883e+00j
 -1.01577939e+02-8.65706512e+01j -1.12023272e+02-4.42381511e+01j
  8.42721381e+01+1.04696407e+02j  4.23136511e+01-6.87268419e+01j
  1.30012602e+02+1.03101913e+02j  4.93488614e+01-1.64653158e+01j
 -9.80000000e+01+1.00000000e+01j -4.97487809e+01+6.20384612e+01j
  5.83727293e+01-1.37026441e+02j -1.30808298e+02-1.07639365e+02j
  1.72514635e+01-2.90706049e+02j  1.10790869e+02-2.39057524e+01j
  3.83745070e+00+9.16122539e+01j -2.38819980e+02-3.31309970e+01j
 -6.61357215e+01-3.58873945e+01j  8.33511926e+01-2.29671445e+02j
  1.00849701e+02+4.22258585e+01j  1.05804968e+02+1.29489442e+02j
 -4.80143489e+01+3.38669255e+02j  3.41526867e+01-2.53994122e+01j
 -2.59659178e+01+4.49122868e+01j -2.04348754e+02-2.29030340e+02j
 -2.57714079e+01-9.21648900e+01j -1.27283964e+02-1.68150631e+01j
 -8.92550497e+00-9.56694227e+01j  1.98852061e+02-4.68602368e+01j
  5.37962767e+01+2.10790768e+01j -7.99752416e-02+3.09595401e+01j
 -9.98755716e+01+1.32296955e+02j  8.67452834e+00+1.88656626e+02j
  1.47268299e+02-2.22570122e+02j -1.28071882e+02+2.65439166e+01j
  8.02673356e+01-1.33466526e+02j  1.09243119e+02-9.10624825e+01j
  1.15731179e+02+4.11438291e+01j -1.38471579e+02-1.22296788e+02j
  6.85787619e+01+1.45360342e+01j -9.05944568e+01-4.59049071e+01j
 -6.92720779e+01-2.67203102e+02j -2.69092104e+00+2.88602300e+02j
 -1.52804041e+02-1.03087543e+02j -9.53096319e+01-9.50717928e+00j
 -1.39834630e+02-3.27008497e+02j  1.63928914e+01-1.92916024e+02j
  7.25648891e+01+6.77796878e+01j -7.29434341e+01-1.06717908e+02j
 -3.71665454e+01-4.38355504e+01j  1.01689748e+02+2.20029281e+02j
  6.08292462e+01-2.39588776e+01j -4.88329246e+01+7.76522581e+01j
 -2.05496325e+02-1.94565436e+02j  6.44618573e+01+4.65729124e+00j
  5.06534027e+01-9.31463923e+01j  5.61393579e+01+1.58067228e+02j
 -2.11377617e+01-1.26948853e+02j -9.40938372e+00+1.01312052e+02j
 -1.64240578e+02-3.52525655e+01j -3.58887903e+02+3.39313423e+02j
  6.49426995e+02-1.21479754e+02j -5.73485295e+00-1.41883816e+02j
 -2.50363799e+01-1.07377979e+02j  2.23567847e+02-1.97529377e+02j
 -1.03422079e+02-6.78025620e+02j  3.35866136e+01-2.37525999e+02j
  1.38321927e+02+1.60746697e+02j  1.09852148e+02-1.04666587e+02j
  1.37776670e+02-1.11082070e+02j -2.88559096e+02-3.85346626e+02j
 -3.14114972e+02-3.24158840e+02j  3.26317201e+01-1.28967006e+03j]
文件行数= 256
文件列数=1

fft数据保存文件结果:
python编程实现分帧数据的fft变换

对比调用fft包和不调fft包的结果,发现在小数后的数会有细微差别,应该是计算精度的原因。

附件

程序文件中有两个程序,其中’’‘wavtxtfft.py’’‘为对数据进行fft变换的程序,包括分帧数据和原始语音数据,数据保存在文件中。’’‘Englishframe1.txt’’‘为分帧数据文件,经fft变换后的数据保存在’’‘fft_Englishframe1.txt’’‘文件中。对1列的数据进行fft变换,调包和不调包结果均实现,但输入数据文件不能太大。’’‘test.txt’’‘为截取的English.txt的前256行数据,调包的fft变换后的数据保存在’’‘fft_test1.txt’’‘文件中,不调包的fft变换后的数据保存在’’‘fft_test2.txt’’'文件中。
完整程序提取:
链接:https://pan.baidu.com/s/1VksJXhmpipJ9ex7gVVsuOA
提取码:xetn

相关标签: python编程