# 计算带有自定义频率和权重的声压级 fp_tab = [ (25, 1), (31.5, 0.891), (40, 0.794), (50, 0.708), (63, 0.631), (80, 0.562), (100, 0.501), (125, 0.447), (160, 0.398), (200, 0.355), (250, 0.316), (315, 0.282), (400, 0.251), (500, 0.224), (630, 0.200), (800, 0.178), (1000, 0.158), (1250, 0.141), (1600, 0.126), (2000, 0.112), (2500, 0.100), (3150, 0.089), (4000, 0.079), (5000, 0.071), (6300, 0.063), (8000, 0.056), (10000, 0.050), (12500, 0.045), (16000, 0.040) ] spl = [] for f, w in fp_tab: mask = (freqs >= f - 1/6*f) & (freqs < f + 1/6*f) spl.append(np.max(fft_db[mask])) # 绘制图形 plt.stairs(range(len(fp_tab)), spl) plt.xticks(range(len(fp_tab)), [str(f) for f, _ in fp_tab])报错raise ValueError('Size mismatch between "values" and "edges". ' ValueError: Size mismatch between "values" and "edges". Expected `len(values) + 1 == len(edges)`, but `len(values) = 29` and `len(edges) = 29`.帮我修改正确的代码
时间: 2023-09-02 11:14:52 浏览: 35
这段代码是计算带有自定义频率和权重的声压级,并绘制图形。出现错误的原因是在绘制图形时,`plt.stairs`函数的`values`和`edges`参数长度不一致。你需要将`edges`的长度加1,使其等于`values`的长度加1。
下面是修改后的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
freqs = np.arange(1, 20001)
# 假设fft_db是一个长度为20000的numpy数组
fft_db = np.random.rand(20000)
fp_tab = [
(25, 1), (31.5, 0.891), (40, 0.794), (50, 0.708), (63, 0.631),
(80, 0.562), (100, 0.501), (125, 0.447), (160, 0.398), (200, 0.355),
(250, 0.316), (315, 0.282), (400, 0.251), (500, 0.224), (630, 0.200),
(800, 0.178), (1000, 0.158), (1250, 0.141), (1600, 0.126), (2000, 0.112),
(2500, 0.100), (3150, 0.089), (4000, 0.079), (5000, 0.071), (6300, 0.063),
(8000, 0.056), (10000, 0.050), (12500, 0.045), (16000, 0.040)
]
spl = []
for f, w in fp_tab:
mask = (freqs >= f - 1/6*f) & (freqs < f + 1/6*f)
spl.append(np.max(fft_db[mask]))
# 修改这里
plt.stairs(range(len(fp_tab)+1), [0]+spl+[0])
plt.xticks(range(len(fp_tab)), [str(f) for f, _ in fp_tab])
plt.show()
```
修改方法是在`plt.stairs`函数的`values`参数前面添加一个0,同时将`edges`参数的长度加1,使其等于`values`的长度加1。这样就可以正常绘制图形了。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)