张量流和短时傅立叶变换

时间:2019-04-02 06:55:44

标签: python tensorflow

我正在使用tensorflow 2.0版

现在我有一个wav文件,可以在此处加载

audio_file = tf.io.read_file(wav_path)
wav_array, sample_rate = tf.audio.decode_wav(
audio_file,
desired_channels=1)
wav_array = np.array(wav_array)
wav_array = wav_array.reshape(wav_array.shape[0])

然后我会使用

进行短时傅立叶变换
spec = tf.signal.stft(wav_array, window_fn=tf.signal.hann_window, 
frame_length=WIN_LEN, frame_step=HOP_LEN,fft_length=FFT_SIZE)

当我打印暗淡的东西时

  

频谱图形状:(748,257)

然后我尝试使用来求逆

inv = tf.signal.inverse_stft(spec,frame_length=WIN_LEN, 
frame_step=HOP_LEN,fft_length=FFT_SIZE, 
window_fn=tf.signal.hann_window)

但是我得到这个错误

  

AttributeError:“ int”对象没有属性“ value”

/usr/local/lib/python3.6/dist- 
packages/tensorflow/python/ops/signal/spectral_ops.py in 
inverse_stft(stfts, frame_length, frame_step, fft_length, window_fn, 
name)

if (frame_length_static is None or
real_frames.shape.ndims is None or
--> real_frames.shape[-1].value is None):
real_frames = real_frames[..., :frame_length]
real_frames_rank = array_ops.rank(real_frames)

1 个答案:

答案 0 :(得分:1)

深入研究问题,我找到了解决方法。对于function addDevice(params, token){ return axios({ url: 'http://localhost:5000/user/add-device', method: 'POST', headers: { 'Authorization': 'Bearer ' + token}, data: { data1: params.data1, data2: params.data2, data3: params.data3 } }) .then(function(response) { return response; }) .catch(function(error) { return error.response; }); } fft_length函数,TensorFlow要求inverse_stft参数为整数。如果未提供,它将按照docs中的描述进行计算。

由于某些原因,文件stft包含首先定义

的代码
spectral_ops.py

,然后尝试多次访问整数real_frames = fft_ops.irfft(stfts, [fft_length]) #line 235

.value

抛出

real_frames.shape[-1].value #lines 244, 255, 257

毫不奇怪。

删除对AttributeError: 'int' object has no attribute 'value' 的调用会使.value产生预期的结果。可以说这似乎是一个github问题。