import numpy as np
import librosa.display # 导入音频及绘图显示包
import matplotlib.pyplot as plt # 导入绘图工作的函数集合
times = librosa.get_duration(filename='D:\\信号与音频\\录音文件\\dingding.wav') # 获取音频时长
# 返回音频采样数组及采样率
y, sr = librosa.load('D:\\信号与音频\\录音文件\\dingding.wav', sr=8000, offset=0.0, duration=None)
x = np.arange(0, times, 1/sr)
def pre_fun(x): # 定义预加重函数
signal_points=len(x) # 获取语音信号的长度
signal_points=int(signal_points) # 把语音信号的长度转换为整型
# s=x # 把采样数组赋值给函数s方便下边计算
for i in range(1, signal_points, 1):# 对采样数组进行for循环计算
x[i] = x[i] - 0.98 * x[i - 1] # 一阶FIR滤波器
return x # 返回预加重以后的采样数组
pre_emphasis = pre_fun(y) # 函数调用
plt.plot(x, pre_emphasis) # 绘出图形
plt.xlabel('times') # x轴时间
plt.ylabel('amplitude') # y轴振幅
plt.title('run.wav.wav', fontsize=12, color='black') # 标题名称、字体大小、颜色
plt.show() # 显示
pre_fun(x)里为什么要return x
你把输入的list给改了,可不成直线了吗
不要改形参,重新定义一个list起名叫y,return y
你以为你改x和实参没有关系,实际上list是个可变值类型,所以传入的y被直接改掉了
然后x和y其实值是一样的,所有x=y的点连线可不是直线是什么
第17行 赋值应该是signal_points
signal_points[i] = x[i] - 0.98 * x[i - 1] # 一阶FIR滤波器