You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性预测音频信号代码报错:'float' object is not subscriptable

线性预测音频信号频率响应代码的TypeError排查与解决

问题背景

编写原始音频信号的线性预测代码时,实现频率响应模块出现TypeError,核心代码及报错如下:

错误代码

omega = np.pi*m

x_real = np.zeros(m)
x_imaj = np.zeros(m)

for i in range(0, int(m/2)):
    for j in range(1, t_lag): 
        x_real[i] += inv_a[j]*np.cos(j*omega[i])
        x_imaj[i] += inv_a[j]*np.sin(j*omega[i])
            
    x_real[i] = 1-x_real[i]
    
H_2 = 1/np.sqrt(x_real**2+x_imaj**2)

#Frequency Response for Linear Prediction
h_real = np.zeros(m)
h_imaj = np.zeros(m)

for i in range(0, int(m/2)):
    for j in range(1, t_lag): 
        h_real[i] += a[j]*np.cos(j*omega[i])
        h_imaj[i] += a[j]*np.sin(j*omega[i])
    h_real[i] = 1-h_real[i]

H_1 = 1/np.sqrt(h_real**2+h_imaj**2)

#Plotting Frequency Response 
fig, ax = plt.subplots(figsize=(40,20))
ax.plot(H_1, color='red', label='A Omega')
ax.plot(H_2, color='blue', label='H Omega')
ax.set_title("Response Frequency",font="times new roman", size=55)
ax5.set_xlabel('Ohm', fontsize='x-small')
ax5.set_ylabel('Magnitude', fontsize='x-small')
fig.tight_layout()
ax.legend(fontsize=50)
plt.show()

报错信息

TypeError                                 Traceback (most recent call last)
c:\Users\Armand S\Desktop\Python Biomodelling File\[FP BIOMOD]Linear Prediction_Armand Faris A Surbakti_5023201051.ipynb Cell 12 in <cell line: 8>()
      8 for i in range(0, int(m/2)):
      9     for j in range(1, t_lag): 
---&gt; 10         x_real[i] += inv_a[j]*np.cos(j*omega[i])
     11         x_imaj[i] += inv_a[j]*np.sin(j*omega[i])
     13     x_real[i] = 1-x_real[i]

TypeError: 'float' object is not subscriptable

问题分析

  1. omega定义错误:omega = np.pi*m中,m是音频长度(标量/整数),因此omega是单个float值而非数组。代码中尝试用omega[i]访问下标,直接触发"float不可下标访问"的错误。频率响应需要的是从0到π的连续频率轴数组。
  2. 绘图变量错误:代码中使用ax5.set_xlabel和ax5.set_ylabel,但实际创建的轴对象是ax,后续会引发未定义错误。
  3. 潜在索引风险:需确保t_lag不超过inv_a和a的长度,避免出现索引越界问题。

修复方案

1. 修正omega的生成

将omega改为生成从0到π的m个均匀采样点,符合频率响应的计算需求:

omega = np.linspace(0, np.pi, m)

2. 修复绘图变量名

把未定义的ax5替换为实际创建的轴对象ax,同时修正x轴标签为更准确的含义:

ax.set_xlabel('Frequency (rad/sample)', fontsize='x-small')
ax.set_ylabel('Magnitude', fontsize='x-small')

3. 可选:向量化优化(替代循环)

原双层循环效率较低,可改用numpy向量化操作提升性能,示例如下:

# 生成lag索引数组
j_arr = np.arange(1, t_lag)
# 计算x_real和x_imaj的向量化操作
cos_terms = np.cos(j_arr[:, None] * omega[:int(m/2)])
sin_terms = np.sin(j_arr[:, None] * omega[:int(m/2)])
x_real[:int(m/2)] = 1 - np.sum(inv_a[j_arr, None] * cos_terms, axis=0)
x_imaj[:int(m/2)] = np.sum(inv_a[j_arr, None] * sin_terms, axis=0)

# 同理处理h_real和h_imaj
cos_terms_h = np.cos(j_arr[:, None] * omega[:int(m/2)])
sin_terms_h = np.sin(j_arr[:, None] * omega[:int(m/2)])
h_real[:int(m/2)] = 1 - np.sum(a[j_arr, None] * cos_terms_h, axis=0)
h_imaj[:int(m/2)] = np.sum(a[j_arr, None] * sin_terms_h, axis=0)

完整修复代码

import numpy as np
import matplotlib.pyplot as plt

# 假设m、t_lag、inv_a、a已提前定义
omega = np.linspace(0, np.pi, m)

x_real = np.zeros(m)
x_imaj = np.zeros(m)

for i in range(0, int(m/2)):
    for j in range(1, t_lag): 
        x_real[i] += inv_a[j]*np.cos(j*omega[i])
        x_imaj[i] += inv_a[j]*np.sin(j*omega[i])
            
    x_real[i] = 1-x_real[i]
    
H_2 = 1/np.sqrt(x_real**2+x_imaj**2)

#Frequency Response for Linear Prediction
h_real = np.zeros(m)
h_imaj = np.zeros(m)

for i in range(0, int(m/2)):
    for j in range(1, t_lag): 
        h_real[i] += a[j]*np.cos(j*omega[i])
        h_imaj[i] += a[j]*np.sin(j*omega[i])
    h_real[i] = 1-h_real[i]

H_1 = 1/np.sqrt(h_real**2+h_imaj**2)

#Plotting Frequency Response 
fig, ax = plt.subplots(figsize=(40,20))
ax.plot(H_1, color='red', label='A Omega')
ax.plot(H_2, color='blue', label='H Omega')
ax.set_title("Frequency Response", font="times new roman", size=55)
ax.set_xlabel('Frequency (rad/sample)', fontsize='x-small')
ax.set_ylabel('Magnitude', fontsize='x-small')
fig.tight_layout()
ax.legend(fontsize=50)
plt.show()

内容的提问来源于stack exchange,提问作者Armand Surbakti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:40:30