नीचे दिए गए कोड का उपयोग करके मैं एक साइन वेव बनाने में सक्षम हूं

def normalizedAmp(signalX, hz):
    '''extract correctly-normalized amplitude'''
    signalAmp = np.abs(signalX[0:len(hz)])
    signalAmp[1:] = 2*signalAmp[1:]
    return signalAmp

def sinWav(amp, freq, time, phase=0):
    return amp * np.sin(2 * np.pi * (freq * time - phase))

# simulation parameters
srate = 1000
time  = {
    0: np.arange(0, 4, 1/srate),
    1: np.arange(4, 8, 1/srate),
    2: np.arange(8, 12, 1/srate)
}

signal = sinWav(amp=0.25, freq=2, time=time[0])

plt.figure(figsize=(12,3))

# plot time-domain signal
plt.subplot2grid((1,3), (0,0))
plt.plot(time[0], signal)
plt.xlabel('Time (ms)')
plt.ylabel('Amplitude')
plt.title('Time domain')

enter image description here

मैं एक पाप तरंग बनाना चाहता हूं जो समय 4s, और 8s पर इसका आयाम बदल दे ताकि पाप तरंग नीचे की छवि की तरह दिखे

enter image description here

मुझे पता है कि उस img में 3 पाप तरंगों में से प्रत्येक को कैसे बनाया जाए, लेकिन मुझे नहीं पता कि उन्हें एक में कैसे जोड़ा जाए।

मैंने पहले दो को जोड़कर करने की कोशिश की है

np.concatenate(sinWav(amp=0.25, freq=2, time=time[0]), sinWav(amp=1, freq=2, time=time[0]))

और त्रुटि प्राप्त करें

ValueError: x and y must have same first dimension, but have shapes (4000,) and (8000,)
0
Sam 10 जिंदा 2021, 23:42
बस एक के बाद एक एक ही कुल्हाड़ियों पर प्लॉट करें (और सभी भूखंडों के लिए समान मान पर रंग सेट करें)
 – 
Stef
11 जिंदा 2021, 00:04

1 उत्तर

सबसे बढ़िया उत्तर

आप पैरामीटर के रूप में np.concatenate (जैसे np.concatenate([array1,array2,array3]) या टपल के रूप में: np.concatenate((array1,array2,array3))) :

import matplotlib.pyplot as plt
import numpy as np

def sinWav(amp, freq, time, phase=0):
    return amp * np.sin(2 * np.pi * (freq * time - phase))

# simulation parameters
srate = 1000
time = {0: np.arange(0, 4, 1 / srate),
        1: np.arange(4, 8, 1 / srate),
        2: np.arange(8, 12, 1 / srate)}

signal = sinWav(amp=0.25, freq=2, time=time[0])

plt.figure(figsize=(12, 3))

# plot time-domain signal
plt.plot(np.concatenate([time[0], time[1], time[2]]),
         np.concatenate([sinWav(amp=0.25, freq=2, time=time[0]),
                         sinWav(amp=1.0, freq=2, time=time[1]),
                         sinWav(amp=0.5, freq=2, time=time[2])]))
plt.xlabel('Time (ms)')
plt.ylabel('Amplitude')
plt.title('Time domain')
plt.tight_layout()
plt.show()

resulting plot

2
JohanC 11 जिंदा 2021, 00:09
plt.plot के लिए मेरा पहला तर्क गलत था। यह time[0] था जब इसे np.concatenate([time[0], time[1]]) होना चाहिए था
 – 
Sam
11 जिंदा 2021, 00:06
@ जोहानसी, अच्छा किया! केवल एक और बात। सीमाएं x 0 और 12 हैं, फिर plt.xlim([0, 12]) जोड़ें, आप इसे ठीक कर सकते हैं।
 – 
Juan Camilo Rivera Palacio
11 जिंदा 2021, 00:17
धन्यवाद। x-दिशा में वक्र फ़िट करने का सबसे सरल तरीका plt.margins(x=0) के साथ है। डिफ़ॉल्ट matplotlib 5% का मार्जिन छोड़ता है।
 – 
JohanC
11 जिंदा 2021, 00:58