Transformación de audio de Fourier para agregar ruido y eliminar ruido (python bidimensional fft2, ifft2)

Introducción

Transformada rápida estándar de Fourier

fft  (a) [, n, eje, norma] )

Calcula la transformada discreta de Fourier 1D.

ifft  (a) [, n, eje, norma] )

Calcula la transformada de Fourier discreta inversa 1D.

fft2  (a) [, s, ejes, norma] )

Calcula la transformada de Fourier discreta 2-D.

ifft2  (a) [, s, ejes, norma] )

Calcula la transformada de Fourier discreta inversa 2-D.

fftn  (a) [, s, ejes, norma] )

Calcula la transformada discreta de Fourier n-dimensional.

ifftn  (a) [, s, ejes, norma] )

Calcula la transformada de Fourier discreta inversa N-dimensional.

Transformada real de Fourier

rfft  (a) [, n, eje, norma] )

Calcula la transformada de Fourier discreta 1D de la entrada real.

irfft  (a) [, n, eje, norma] )

Calcular  rft  .

rfft2  (a) [, s, ejes, norma] )

Calcula la FFT 2-D de una matriz real.

irfft2  (a) [, s, ejes, norma] )

Calcule  rfft2  .

rfftn  (a) [, s, ejes, norma] )

Calcula la transformada discreta de Fourier N-dimensional de la entrada real.

irfftn  (a) [, s, ejes, norma] )

Calcular  rfftn  .

Transformada rápida de Fourier de Hermitian

hfft  (a) [, n, eje, norma] )

Calcule la FFT de una señal con simetría hermitiana, es decir, el espectro verdadero.

ihfft  (a) [, n, eje, norma] )

Calcula la FFT inversa de una señal con simetría hermitiana.

rutina de ayuda

fftfreq  n(n) [, d] )

Devuelve la frecuencia de muestreo de la transformada discreta de Fourier.

rfftfreq  n(n) [, d] )

Devuelve la frecuencia de muestreo de la transformada discreta de Fourier (para rfft, irfft).

fftshift  (x) [, ejes] )

Mueva el componente de frecuencia cero al centro del espectro.

ifftshift  (x) [, ejes] )

Marcha atrás  fftshift  .

 Este artículo principalmente agrega ruido a la música de Xianxiafeng y elimina el ruido.

Nombre del archivo de recursos: spring.wav

Ruta completa del recurso: https://github.com/fengjun321/noise.git

Código central: test3.py

Si el archivo de recursos falla, puede ir a Baidu para descargar otra música en formato wav en lugar de spring.wav

# 用于保存音频
import wave
#数学库
import numpy as np
import matplotlib.pyplot as plt

#中文支持和布局调整
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['figure.figsize']=(15,8)

plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
                wspace=0.5, hspace=0.5)

def saveAudio(filename,data,params):
    with wave.open(filename + '.wav', 'wb') as wavfile:
        print(params)
        wavfile.setparams(params)
        wavfile.writeframes(bytes(data))

def wavread(path):
    wavfile = wave.open(path, "rb")
    params = wavfile.getparams()
    print(params)

    framesra, frameswav = params[2], params[3]
    datawav = wavfile.readframes(frameswav)
    wavfile.close()
    datause = np.frombuffer(datawav, dtype=np.short)
    datause.shape = -1, 2
    datause = datause.T
    time = np.arange(0, frameswav) * (1.0 / framesra)
    return datause, time, params

path = r"spring.wav"
wavdata, wavtime, params = wavread(path)

noise=np.random.rand(len(wavdata[0]))

noise_music = wavdata.copy() + noise
saveAudio("加噪后_spring", noise_music, params)

transformed=np.fft.fft2(noise_music)

avg1 = np.max(abs(transformed[0][1:]))/10000
avg2 = np.max(abs(transformed[1][1:]))/10000
transformed[0][np.where(abs(transformed[0])<=avg1)]=0+0j
transformed[1][np.where(abs(transformed[1])<=avg2)]=0+0j

noise_music = np.fft.ifft2(transformed).astype(int) #astype(int)很重要,过滤掉浮点过小信号

plt.subplot(231)
plt.title("原音频时序")
plt.plot(wavdata[0][4000:4500])

plt.subplot(232)
plt.title("原音频频域")
plt.plot(np.fft.fft(wavdata[0][4000:4200]))

plt.subplot(233)
plt.title("噪声音频时序")
plt.plot(noise_music[0][4000:4500])

plt.subplot(234)
plt.title("噪声音频频域")
plt.plot(np.fft.fft(noise_music[0][4000:4200]))

plt.show()
saveAudio("还原后_spring", noise_music, params)

Comparación de representaciones

La desventaja es que el ruido no es evidente en la imagen, porque la amplitud del ruido es pequeña y no es fácil de observar. Los lectores pueden ejecutar el código directamente para generar los archivos de audio correspondientes y la reproducción del efecto de sonido es más obvia. 

Supongo que te gusta

Origin blog.csdn.net/u013177138/article/details/124231615
Recomendado
Clasificación