上述代码出现以下问题尝试修改为可以运行代码ValueError: could not broadcast input array from shape (1024,1) into shape (1024,)
时间: 2024-03-26 15:39:54 浏览: 108
ValueError: Could not find a format to read the specified file in mode ‘i’
这个错误通常是由于数组的形状不匹配而导致的。为了解决这个问题,我们需要将B007DEOverlap和B007FFT变量中的每个样本从形状为(1024, 1)的二维数组转换为形状为(1024,)的一维数组。可以通过numpy的ravel()函数来实现这个转换。以下是修改后的代码:
```python
import scipy.io
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
data = scipy.io.loadmat('C:\\Users\\nysy\\Desktop\\B007DE.mat')
B007DE = data['B007DE']
# 重叠采样
sample_length = 1024
step_size = 100
num_samples = 1000
B007DEOverlap = np.zeros((num_samples, sample_length))
for i in range(num_samples):
start_idx = i*step_size
end_idx = start_idx+sample_length
B007DEOverlap[i] = B007DE[start_idx:end_idx].ravel() # 将二维数组转换为一维数组
# 傅里叶变换
B007FFT = np.fft.fft(B007DEOverlap)
# 绘图
fig, axs = plt.subplots(3, 1, figsize=(10, 10))
# 原始数据可视化
axs[0].plot(range(len(B007DE)), B007DE)
axs[0].set_title('Original Data')
axs[0].set_xlabel('Time')
axs[0].set_ylabel('Amplitude')
# 重叠采样第一个样本可视化
axs[1].plot(range(sample_length), B007DEOverlap[0])
axs[1].set_title('Overlapped Sample 1')
axs[1].set_xlabel('Time')
axs[1].set_ylabel('Amplitude')
# 傅里叶变换第一个样本可视化
axs[2].plot(range(sample_length), np.abs(B007FFT[0]))
axs[2].set_title('FFT of Sample 1')
axs[2].set_xlabel('Frequency')
axs[2].set_ylabel('Amplitude')
plt.tight_layout()
plt.show()
```
这样就可以成功运行代码并绘制图像了。
阅读全文