亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

譜減法語音降噪的Python實(shí)現(xiàn)

系統(tǒng) 3525 0

轉(zhuǎn)自:https://github.com/itaa/soja-box/tree/master/enhance_speach

譜減法語音降噪

譜減法語音降噪的Python實(shí)現(xiàn)_第1張圖片

?

            
              #!/usr/bin/env python
import numpy as np
import wave
import nextpow2
import math

# 打開WAV文檔
f = wave.open("input_file.wav")
# 讀取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
fs = framerate
# 讀取波形數(shù)據(jù)
str_data = f.readframes(nframes)
f.close()
# 將波形數(shù)據(jù)轉(zhuǎn)換為數(shù)組
x = np.fromstring(str_data, dtype=np.short)
# 計(jì)算參數(shù)
len_ = 20 * fs // 1000 # 樣本中幀的大小
PERC = 50 # 窗口重疊占幀的百分比
len1 = len_ * PERC // 100  # 重疊窗口
len2 = len_ - len1   # 非重疊窗口
# 設(shè)置默認(rèn)參數(shù)
Thres = 3
Expnt = 2.0
beta = 0.002
G = 0.9
# 初始化漢明窗
win = np.hamming(len_)
# normalization gain for overlap+add with 50% overlap
winGain = len2 / sum(win)

# Noise magnitude calculations - assuming that the first 5 frames is noise/silence
nFFT = 2 * 2 ** (nextpow2.nextpow2(len_))
noise_mean = np.zeros(nFFT)

j = 0
for k in range(1, 6):
    noise_mean = noise_mean + abs(np.fft.fft(win * x[j:j + len_], nFFT))
    j = j + len_
noise_mu = noise_mean / 5

# --- allocate memory and initialize various variables
k = 1
img = 1j
x_old = np.zeros(len1)
Nframes = len(x) // len2 - 1
xfinal = np.zeros(Nframes * len2)

# =========================    Start Processing   ===============================
for n in range(0, Nframes):
    # Windowing
    insign = win * x[k-1:k + len_ - 1]
    # compute fourier transform of a frame
    spec = np.fft.fft(insign, nFFT)
    # compute the magnitude
    sig = abs(spec)

    # save the noisy phase information
    theta = np.angle(spec)
    SNRseg = 10 * np.log10(np.linalg.norm(sig, 2) ** 2 / np.linalg.norm(noise_mu, 2) ** 2)


    def berouti(SNR):
        if -5.0 <= SNR <= 20.0:
            a = 4 - SNR * 3 / 20
        else:
            if SNR < -5.0:
                a = 5
            if SNR > 20:
                a = 1
        return a


    def berouti1(SNR):
        if -5.0 <= SNR <= 20.0:
            a = 3 - SNR * 2 / 20
        else:
            if SNR < -5.0:
                a = 4
            if SNR > 20:
                a = 1
        return a

    if Expnt == 1.0:  # 幅度譜
        alpha = berouti1(SNRseg)
    else:  # 功率譜
        alpha = berouti(SNRseg)
    #############
    sub_speech = sig ** Expnt - alpha * noise_mu ** Expnt;
    # 當(dāng)純凈信號小于噪聲信號的功率時(shí)
    diffw = sub_speech - beta * noise_mu ** Expnt
    # beta negative components

    def find_index(x_list):
        index_list = []
        for i in range(len(x_list)):
            if x_list[i] < 0:
                index_list.append(i)
        return index_list

    z = find_index(diffw)
    if len(z) > 0:
        # 用估計(jì)出來的噪聲信號表示下限值
        sub_speech[z] = beta * noise_mu[z] ** Expnt
        # --- implement a simple VAD detector --------------
    if SNRseg < Thres:  # Update noise spectrum
        noise_temp = G * noise_mu ** Expnt + (1 - G) * sig ** Expnt  # 平滑處理噪聲功率譜
        noise_mu = noise_temp ** (1 / Expnt)  # 新的噪聲幅度譜
    # flipud函數(shù)實(shí)現(xiàn)矩陣的上下翻轉(zhuǎn),是以矩陣的“水平中線”為對稱軸
    # 交換上下對稱元素
    sub_speech[nFFT // 2 + 1:nFFT] = np.flipud(sub_speech[1:nFFT // 2])
    x_phase = (sub_speech ** (1 / Expnt)) * (np.array([math.cos(x) for x in theta]) + img * (np.array([math.sin(x) for x in theta])))
    # take the IFFT

    xi = np.fft.ifft(x_phase).real
    # --- Overlap and add ---------------
    xfinal[k-1:k + len2 - 1] = x_old + xi[0:len1]
    x_old = xi[0 + len1:len_]
    k = k + len2
# 保存文件
wf = wave.open('en_outfile.wav', 'wb')
# 設(shè)置參數(shù)
wf.setparams(params)
# 設(shè)置波形文件 .tostring()將array轉(zhuǎn)換為data
wave_data = (winGain * xfinal).astype(np.short)
wf.writeframes(wave_data.tostring())
wf.close()
            
          

譜減法語音降噪的Python實(shí)現(xiàn)_第2張圖片

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本成片| 久久人人爽人人爽人人片av不 | 久久久久久久99久久久毒国产 | 不卡视频免费在线观看 | 操熟美女又肥又嫩的骚屁股 | 国产日本欧美在线观看 | 成人国产一区二区三区 | 欧美日韩亚洲国产综合 | 五月天亚洲视频 | 九九伦理影院手机观看 | 国产亚洲精品在天天在线麻豆 | 亚洲精品综合一区二区三区在线 | 思思影院| 国产福利视屏 | 国产精品人成在线播放新网站 | 综合久久久久综合体桃花网 | 2019精品国产品免费观看 | 国产在线精品一区二区高清不卡 | 高清波多野结衣一区二区三区 | 亚洲精品区在线播放一区二区 | 91福利合集 | 亚洲va国产日韩欧美精品色婷婷 | 国内色视频 | 精品一区二区三区三区 | 国产精品久久永久免费 | 久久天堂网| 亚洲香蕉网综合久久 | 性欧美视频a毛片在线播放 性欧美视频在线观看 | 国产在线观看一区二区三区 | 国产在线综合网 | 久久精品国产一区二区三区不卡 | 激情五月婷婷网 | 亚洲久操 | 四虎永久在线精品免费影视 | 婷婷视频在线观看 | 欧美日韩性猛交xxxxx免费看 | 日本在线观看一级高清片 | 精品国产一区二区三区2021 | 欧美日韩加勒比一区二区三区 | 久久精品无码一区二区三区 | 国产成人久久久精品毛片 |