绘图时尺寸不匹配

问题描述 投票:0回答:0

我正在尝试将一些信号处理技术应用于从 PhsioNet 检索的本地心电图数据。我设法绘制了原始数据,但在应用这些技术并开始绘制新信号后,我收到此错误:

发生异常:ValueError x 和 y 必须具有相同的第一维度,但具有形状 (1500,) 和 (12,) 文件“D: th_UGRF\Project_Parts\Mobile_Application\DSP_with_Python\DSP_4.py”,第 71 行,位于 ax1.plot(t, 信号) ValueError:x 和 y 必须具有相同的第一维度,但具有形状 (1500,) 和 (12,)

我尝试更改时间向量以适应新的去噪信号,但这是相同的错误。

您可以在这里找到数据示例。

import numpy as np
import wfdb
import matplotlib.pyplot as plt
from scipy.signal import butter, filtfilt, medfilt
import pywt

# Create the figure
fig, ax = plt.subplots(figsize=(17, 17))

# Add the axes/subplots using subplot2grid
ax1 = plt.subplot2grid(shape=(4, 4), loc=(0, 0))
ax2 = plt.subplot2grid(shape=(4, 4), loc=(0, 1))
ax3 = plt.subplot2grid(shape=(4, 4), loc=(0, 2))
ax4 = plt.subplot2grid(shape=(4, 4), loc=(0, 3))
ax5 = plt.subplot2grid(shape=(4, 4), loc=(1, 0))
ax6 = plt.subplot2grid(shape=(4, 4), loc=(1, 1))
ax7 = plt.subplot2grid(shape=(4, 4), loc=(1, 2))
ax8 = plt.subplot2grid(shape=(4, 4), loc=(1, 3))
ax9 = plt.subplot2grid(shape=(4, 4), loc=(2, 0))
ax10 = plt.subplot2grid(shape=(4, 4), loc=(2, 1))
ax11 = plt.subplot2grid(shape=(4, 4), loc=(2, 2))
ax12 = plt.subplot2grid(shape=(4, 4), loc=(2, 3))
ax13 = plt.subplot2grid(shape=(4, 4), loc=(3, 0), colspan=4)

try:
    # Load WFDB record into a wfdb.Record object
    record = wfdb.rdrecord(r'D:\16th_UGRF\Project_Parts\Mobile_Application\DSP_with_Python\Raw_Electrical_Signal_Data\a-large-scale-12-lead-electrocardiogram-database-for-arrhythmia-study-1.0.0\WFDBRecords\01\010\JS00001')

    # Define the new signal names and custom order
    new_signal_names = ['I', 'II', 'III', 'aVR', 'aVL', 'aVF', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6']
    custom_order = [0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11]

    # Get the sampling frequency
    fs = record.fs

    # Extract the first three seconds of all 12 signals
    duration = 3  # seconds
    num_samples = int(duration * fs)
    t = (1/fs) * np.arange(num_samples)  # Time vector for the first three seconds

    # Get the number of available signals (columns)
    num_signals = record.p_signal.shape[1]

    # Extract the 12 lead signals (transpose to have time in the rows)
    y = record.p_signal.T

    # Filter the signal data
    fcutlow = 0.5  # Lower cutoff frequency in Hz
    fcuthigh = 40  # Upper cutoff frequency in Hz
    b, a = butter(1, [fcutlow / (fs/2), fcuthigh / (fs/2)], 'bandpass')
    filtered_signal = np.zeros_like(y)
    for i in range(num_signals):
        filtered_signal[:, i] = filtfilt(b, a, y[:, i])

    # Amplify the filtered signal data
    amplified_signal = 2 * filtered_signal

    # Apply baseline correction to each lead of the amplified signal data
    baseline_corrected_signal = np.zeros_like(amplified_signal)
    for i in range(num_signals):
        baseline_corrected_signal[:, i] = amplified_signal[:, i] - medfilt(amplified_signal[:, i], int(fs/4))

    # Apply wavelet denoising to each lead of the baseline-corrected signal data
    denoised_signal = np.zeros_like(baseline_corrected_signal)
    for i in range(num_signals):
        denoised_signal[:, i] = pywt.threshold(baseline_corrected_signal[:, i], value=0.1, mode='soft')

    # ploting the signals
    # signal I
    signal = denoised_signal[:num_samples, 0]
    ax1.plot(t, signal)
    ax1.set_title(f'Signal I') 
    ax1.grid(True)

    # signal aVR
    signal = record.p_signal[:num_samples, 3]
    ax2.plot(t, signal)
    ax2.set_title(f'Signal aVR') 
    ax2.grid(True)

    # signal V1
    signal = record.p_signal[:num_samples, 6]
    ax3.plot(t, signal)
    ax3.set_title(f'Signal V1') 
    ax3.grid(True)

    # signal V4
    signal = record.p_signal[:num_samples, 9]
    ax4.plot(t, signal)
    ax4.set_title(f'Signal V4') 
    ax4.grid(True)

    # signal II
    signal = record.p_signal[:num_samples, 1]
    ax5.plot(t, signal)
    ax5.set_title(f'Signal II') 
    ax5.grid(True)

    # signal aVL
    signal = record.p_signal[:num_samples, 4]
    ax6.plot(t, signal)
    ax6.set_title(f'Signal aVL') 
    ax6.grid(True)

    # signal V2
    signal = record.p_signal[:num_samples, 7]
    ax7.plot(t, signal)
    ax7.set_title(f'Signal V2') 
    ax7.grid(True)

    # signal V5
    signal = record.p_signal[:num_samples, 10]
    ax8.plot(t, signal)
    ax8.set_title(f'Signal V5') 
    ax8.grid(True)

    # signal III
    signal = record.p_signal[:num_samples, 2]
    ax9.plot(t, signal)
    ax9.set_title(f'Signal III') 
    ax9.grid(True)

    # signal aVF
    signal = record.p_signal[:num_samples, 5]
    ax10.plot(t, signal)
    ax10.set_title(f'Signal AVF') 
    ax10.grid(True)


    # signal V3
    signal = record.p_signal[:num_samples, 8]
    ax11.plot(t, signal)
    ax11.set_title(f'Signal V3')
    ax11.grid(True)

    # signal V6
    signal = record.p_signal[:num_samples, 11]
    ax12.plot(t, signal)
    ax12.set_title(f'Signal V6')
    ax12.grid(True)

    # signal II
    signal = record.p_signal[:num_samples, 1]
    ax13.plot(t, signal)
    ax13.set_title(f'Signal II')
    ax13.grid(True)

except FileNotFoundError as e:
    print(f"Error: {e}")

plt.subplots_adjust(wspace=0.4, hspace=0.4)
plt.tight_layout()
plt.show()
python signals processing digital
© www.soinside.com 2019 - 2024. All rights reserved.