當前位置:首頁 » 編程語言 » python波形顯示

python波形顯示

發布時間: 2023-01-09 23:13:23

A. 在python 中打開波形文件 ︰ 未知的格式 ︰ 49.究竟怎麼了

投票
2
回答
1K
查看
我嘗試打開波形文件與 wave模塊,但是老是同樣的錯誤我試著不管。 包含錯誤的行是以下 ︰
wav = wave.open(f)

這是錯誤消息 ︰
Traceback (most recent call last):
File "annotate.py", line 47, in <mole>
play(file)
File "annotate.py", line 33, in play
wav = wave.open(f)
File "C:\Program Files (x86)\Python\lib\wave.py", line 498, in open
return Wave_read(f)
File "C:\Program Files (x86)\Python\lib\wave.py", line 163, in __init__
self.initfp(f)
File "C:\Program Files (x86)\Python\lib\wave.py", line 143, in initfp
self._read_fmt_chunk(chunk)
File "C:\Program Files (x86)\Python\lib\wave.py", line 269, in _read_fmt_chunk
raise Error('unknown format: %r' % (wFormatTag,))
wave.Error: unknown format: 49

字元串 f是路徑。WAV 文件,它工作在任何我的媒體播放器播放時。 我當然導入 wave的模塊。 我試過 f,作為一個相對和絕對路徑。 我試著用"wav"取代"WAV"。
錯誤什麼導致的?
投票
Python 的波模塊工作與特定類型的 WAV: PCM (WAVE_FORMAT_PCM: 0x0001)。
在您的情況下,您使用 WAV 類型 WAVE_FORMAT_GSM610[0x0031 = hex(49)].
你可以使用像大膽或者一些程序轉換的編解碼器,WAV 文件的類型更改為 lib。

B. 如何用Python顯示出一維波動方程的動態圖像

Python有一些繪圖的功能,使用turtle模塊。
在命令行輸入
python.exe -m turtledemo
可以打開Python安裝時,系統自帶的一些演示程序。
感覺功能還是比較多的。
程序實現其實還是比較簡單,主要是得搞懂倒是給的文獻,還得跟導師交流如何演示出效果。

C. Python科學計算——任意波形擬合

任意波形的生成 (geneartion of arbitrary waveform) 在商業,軍事等領域都有著重要的應用,諸如空間光通信 (free-space optics communication), 高速信號處理 (high-speed signal processing),雷達 (radar) 等。在任意波形生成後, 如何評估生成的任意波形 成為另外一個重要的話題。

假設有一組實驗數據,已知他們之間的函數關系:y=f(x),通過這些信息,需要確定函數中的一些參數項。例如,f 是一個線型函數 f(x)=k*x+b,那麼參數 k 和 b 就是需要確定的值。如果這些參數用 p 表示的話,那麼就需要找到一組 p 值使得如下公式中的 S 函數最小:

這種演算法被稱之為 最小二乘擬合 (least-square fitting)。scipy 中的子函數庫 optimize 已經提供實現最小二乘擬合演算法的函數 leastsq 。下面是 leastsq 函數導入的方式:

scipy.optimize.leastsq 使用方法

在 Python科學計算——Numpy.genfromtxt 一文中,使用 numpy.genfromtxt 對數字示波器採集的三角波數據導入進行了介紹,今天,就以 4GHz三角波 波形的擬合為案例介紹任意波形的擬合方法。

在 Python科學計算——如何構建模型? 一文中,討論了如何構建三角波模型。在標准三角波波形的基礎上添加了 橫向,縱向的平移和伸縮特徵參數 ,最後添加了 雜訊參數 模擬了三角波幅度參差不齊的隨機性特徵。但在波形擬合時,並不是所有的特徵參數都要納入考量,例如,雜訊參數應是 波形生成系統 的固有特徵,正因為它的存在使得產生的波形存在瑕疵,因此,在進行波形擬合並評估時,不應將雜訊參數納入考量,最終模型如下:

在調用 scipy.optimize.leastsq 函數時,需要構建誤差函數:

有時候,為了使圖片有更好的效果,需要對數據進行一些處理:

leastsq 調用方式如下:

合理的設置 p0 可以減少程序運行時間,因此,可以在運行一次程序後,用擬合後的相應數據對 p0 進行修正。

在對波形進行擬合後,調用 pylab 對擬合前後的數據進行可視化:

均方根誤差 (root mean square error) 是一個很好的評判標准,它是觀測值與真值偏差的平方和觀測次數n比值的平方根,在實際測量中,觀測次數n總是有限的,真值只能用最可信賴(最佳)值來代替.方根誤差對一組測量中的特大或特小誤差反映非常敏感,所以,均方根誤差能夠很好地反映出測量的精密度。

RMSE 用程序實現如下:

擬合效果,模型參數輸出:

leastsq 函數適用於任何波形的擬合,下面就來介紹一些常用的其他波形:

D. python plt.plot怎麼把圖顯示出來

1, 導入matplotlib.pyplot, numpy 包:
import numpy as np
import matplotlib.pyplot as plt

2,添加主題樣式:
plt.style.use('mystyle')

3, 設置圖的大小,添加子圖:
fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(111)

4,繪制sin, cos:
x = np.arange(-np.pi, np.pi, np.pi / 100)
y1 = np.sin(x)
y2 = np.cos(x)
sin, = ax.plot(x, y1, color='red', label='sin')
cos, = ax.plot(x, y2, color='blue', label='cos')
ax.set_ylim([-1.2, 1.2])

第二種方式 拆分顯示
sin_legend = ax.legend(handles=[sin], loc='upper right')
ax.add_artist(sin_legend)
ax.legend(handles=[cos], loc='lower right')

plt.show()
import numpy as np
import matplotlib.pyplot as plt

# 添加主題樣式
plt.style.use('mystyle')

# 設置圖的大小,添加子圖
fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(111)

for color in ['red', 'green']:
n = 750
x, y = np.random.rand(2, n)
scale = 200.0 * np.random.rand(n)
ax.scatter(x, y, c=color, s=scale,
label=color, alpha=0.3,
edgecolors='none')
ax.legend()
ax.grid(True)
plt.show()

E. 利用python掌握雷克子波製作

# -*- coding: UTF-8 -*-

import wave

import numpy as np

import matplotlib.pyplot as plt

# 打開wav文件 ,open返回一個的是一個Wave_read類的實例,通過調用它的方法讀取WAV文件的格式和數據。

f = wave.open(r"D:\project\REC001.wav","rb")

# 讀取格式信息

# 一次性返回所有的WAV文件的格式信息,它返回的是一個組元(tuple):聲道數, 量化位數(byte單位), 采

# 樣頻率, 采樣點數, 壓縮類型, 壓縮類型的描述。wave模塊只支持非壓縮的數據,因此可以忽略最後兩個信息

params = f.getparams()

[nchannels, sampwidth, framerate, nframes] = params[:4]

# 讀取波形數據

# 讀取聲音數據,傳遞一個參數指定需要讀取的長度(以取樣點為單位)

str_data = f.readframes(nframes)

f.close()

# 將波形數據轉換成數組

# 需要根據聲道數和量化單位,將讀取的二進制數據轉換為一個可以計算的數組

wave_data = np.fromstring(str_data,dtype = np.short)

# 將wave_data數組改為2列,行數自動匹配。在修改shape的屬性時,需使得數組的總長度不變。

wave_data.shape = -1,2

# 轉置數據

wave_data = wave_data.T

# 通過取樣點數和取樣頻率計算出每個取樣的時間。

time=np.arange(0,nframes/2)/framerate

# print(params)

plt.figure(1)

# time 也是一個數組,與wave_data[0]或wave_data[1]配對形成系列點坐標

plt.subplot(211)

plt.plot(time,wave_data[0])

plt.xlabel("time/s")

plt.title('Wave')

N=44100

start=0

# 開始采樣位置

df = framerate/(N-1)

# 解析度

freq = [df*n for n in range(0,N)]

# N個元素

wave_data2=wave_data[0][start:start+N]

c=np.fft.fft(wave_data2)*2/N

# 常規顯示采樣頻率一半的頻譜

plt.subplot(212)

plt.plot(freq[:round(len(freq)/2)],abs(c[:round(len(c)/2)]),'r')

plt.title('Freq')

plt.xlabel("Freq/Hz")

plt.show()

F. python畫正餘弦函數圖像

用python怎樣畫出如題所示的正餘弦函數圖像? 如此編寫代碼,使其中兩個軸、圖例、刻度,大小,LaTex公式等要素與原圖一致,需要用到的代碼如下,沒有縮進:


#-*-codeing:utf-8;-*-

from matplotlib import pyplot as plt

import numpy as np

a=np.linspace(0,360,980)

b=np.sin(a/180*np.pi)

c=np.cos(a/180*np.pi)

fig = plt.figure()

ax = fig.add_subplot(111)

ax.set_xlim([0, 360])

ax.plot(a,b,label=r"$y=sin( heta)$")

ax.plot(a,c,label=r"$y=cos( heta)$")

ax.grid(True)

ax.set_ylabel(r"$y$")

ax.set_xlabel(r"$ heta$")

plt.xticks(np.arange(0,360+1,45))

plt.title("Sine & Cosine Waves")

plt.legend()

plt.savefig("SinCosWaveDegFont.jpg")

plt.show()


代碼輸出的文件的圖

熱點內容
手機如何設密碼鎖屏 發布:2025-07-10 14:17:06 瀏覽:803
java求絕對值 發布:2025-07-10 14:10:55 瀏覽:653
usb調試開關在哪裡安卓 發布:2025-07-10 13:59:55 瀏覽:78
資料庫維度 發布:2025-07-10 13:54:31 瀏覽:799
c語言位域的賦值 發布:2025-07-10 13:54:30 瀏覽:583
查成績密碼忘了怎麼辦 發布:2025-07-10 13:52:21 瀏覽:819
java死 發布:2025-07-10 13:51:30 瀏覽:996
車輛設施配置有哪些 發布:2025-07-10 13:42:28 瀏覽:820
java的成員 發布:2025-07-10 13:38:59 瀏覽:720
荒島餘生ftp 發布:2025-07-10 13:36:46 瀏覽:923