numpy 我被要求在Python中绘制一个正弦函数,我们应该导入一个名为mdt的文件,而不是使用np.sin

hyrbngr7  于 2022-11-29  发布在  Python
关注(0)|答案(1)|浏览(126)

文件中的代码如下所示:

import numpy as np
import math
from scipy.fftpack import fft
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
sd_found = False
try:
    import sounddevice as sd
    sd_found = True
except:
    print('Das Modul "sounddevice" fehlt. Es lässt sich per "pip install sounddevice" im "Anaconda Prompt" installieren.')

def playSound(sound, fs):
    sd.play(sound/10, fs)

def spectrum(Messwerte, Abtastrate): 
    N=len(Messwerte)
    u_cmplx=fft(Messwerte)
    u_abs=np.abs(u_cmplx[0:N//2])/N
    u_abs[1:] *= 2
    f=np.linspace(0,Abtastrate//2,N//2)
    return (f,u_abs)

def dataRead(**kwargs):
    argListMust = {'amplitude', 'samplingRate', 'duration', 'channels', 'resolution', 'outType'}
    argList = {'amplitude', 'samplingRate', 'duration', 'channels', 'resolution', 'outType', 'continues'}
    for key in kwargs:
        if key not in argList:
            print('Folgende Argumente müssen übergeben werden: amplitude=[V], samplingRate=[Hz], duration=[s], channels=[[,]], resolution=[bits], outType=\'volt\' oder \'codes\')')
            return None
    for key in argListMust:
        if key not in kwargs:
            print('Folgende Argumente müssen übergeben werden: amplitude=[V], samplingRate=[Hz], duration=[s], channels=[[,]], resolution=[bits], outType=\'volt\' oder \'codes\')')
            return None
    amplitude = kwargs['amplitude']
    samplingRate = kwargs['samplingRate']
    duration = kwargs['duration']
    channels = kwargs['channels']
    resolution = kwargs['resolution']
    outType = kwargs['outType']
    if 'continues' not in kwargs.keys():
        continues = False
    else:
        continues = kwargs['continues']
        if type(continues) != bool:
            print('continues muss vom Typ bool sein')
            return None
    if not all(i < 4 for i in channels):
        print('Mögliche Kanäle sind 0 bis 4')
        return None
    if len(channels) > len(set(channels)):
        print('Kanäle dürfen nicht doppelt auftauchen')
        return None

    
    outtType = outType.capitalize()
    if outtType != 'Volt' and outtType != 'Codes':
        print(outtType)
        print('outType = \'Volt\' oder \'Codes\'')
        return None
    
    u_lsb = 2*amplitude/(2**resolution-1)
    bins = [-amplitude+u_lsb/2+u_lsb*i for i in range(2**resolution-1)]
    

    ai_voltage_rngs = [1,2,5,10]
    if amplitude not in ai_voltage_rngs:
        print('Unterstützt werden folgende Amplituden:')
        print(ai_voltage_rngs)
        return None
    
    for channel in channels:
        if resolution < 1 or resolution > 14:
            print(f'Die Auflösung muss zwischen 1 und 14 Bit liegen')
            return None
    
    if samplingRate > 48000:
        print(f'Mit dieser Kanalanzahl beträgt die höchste Abtastrate 48000 Hz:')
        return None
    
    
    if continues:
        print('Die Liveansicht ist nicht verfügbar.')
    else:
        t = np.arange(0,duration,1/samplingRate)
        data = np.zeros( (len(channels),t.size))
        data[0,:] = 2.5*np.sin(2*np.pi*50*t+np.random.rand()*np.pi*2)
        data[data>amplitude] = amplitude
        data[data<-amplitude] = -amplitude
        data = np.digitize(data,bins)
        if outtType == 'Volt':
            data = data*u_lsb-amplitude
        print(f"Die Messung wurde durchgeführt mit einer virtuellen Messkarte \n Messbereich: +/-{amplitude:1.2f} Volt\n samplingRate: {samplingRate:1.1f} Hz\n Messdauer: {duration:1.3f} s\n Auflösung: {resolution:d} bit\n Ausgabe in: {outtType:s}")

    return data

我的代码看起来像这样,当我绘图时,我得到一个空白的数字:

import numpy as np
import matplotlib.pyplot as plt 
import mdt

data = mdt.dataRead(amplitude = 5,samplingRate = 48,duration = 10,channels = [0],resolution = 14,outType = 'Volt',continues=False)
z = np.linspace(0,0.02,80)
plt.plot(data)
5lhxktic

5lhxktic1#

我想通了。我会把正确的代码留给下面的这个任务,如果有兴趣的话,看看吧。

import numpy as np
import matplotlib.pyplot as plt 
import mdt
data =read=mdt.dataRead(**{'amplitude': 5,'samplingRate':48000,'duration':0.2,'channels':[0],'resolution':14,'outType':'volt'})
data1 = data[0]
np.save('messung.npy',data1)
Mess=np.load('messung.npy')
y = Mess[100:550]
t = np.linspace(0,0.02,Mess.shape[0])
t_1 = t[100:550]
plt.figure(1)
plt.subplot(2,1,1)
plt.plot(t,Mess)
plt.xlabel("Zeit(ms)")
plt.ylabel("Spannung(V)")
plt.title("Messung der Karte")

plt.subplot(2,1,2)
plt.plot(t_1,y,'red')
plt.xlabel("Zeit(s)")
plt.ylabel("Spannung(V)")
plt.title("Ausschnitt der Messung")
plt.tight_layout()
  • 这最初是作为问题的revision 5添加的。*

相关问题