|
用Audio Precision 2722來檢測音頻系統(tǒng)的頻響曲線,其中有一種方法是利用被檢測設(shè)備中聲音文件發(fā)出的頻率作為掃頻信號源,檢測系統(tǒng)的實(shí)際頻響效果。其中對這個(gè)掃頻信號是有較為嚴(yán)格的要求。具體要求(參考外部掃描規(guī)則設(shè)置External Sweep Rules)如下:
1. 在掃描的源1中,選擇模擬信號分析儀的讀數(shù)值A(chǔ)通道的頻率作為信號源。 起始頻率為20Hz,終止頻率為22kHz,中間頻率采用是對數(shù)方式增長。但是這些具體的頻率是多少呢,需要通過外部規(guī)則來設(shè)定。因此,需要打開"External Rules..."按鈕,做詳細(xì)設(shè)定。

在 External Sweep Setting窗口,包括起始條件(Start),中間讀數(shù)(Data)和終止條件(End)三個(gè)部分。分別包括了具體設(shè)定的數(shù)值,允許的讀數(shù)誤差。 在以下幾種情況下,才可能開始掃描(AP 2700系列產(chǎn)品用戶手冊第423頁)。
起始值設(shè)置:
1. 信號源的輸出在起始值+/-誤差范圍內(nèi);信號強(qiáng)度要超過設(shè)定的閾值;設(shè)定的讀數(shù)1-6都穩(wěn)定;信號源1的讀數(shù)穩(wěn)定超過1s。這幾個(gè)條件中,所有條件均必須滿足,才能開始掃描。
2. 信號源的輸出在起始值+/-誤差范圍或以上:信號強(qiáng)度要超過設(shè)定的閾值;設(shè)定的讀數(shù)1-6都穩(wěn)定;信號源1的讀數(shù)穩(wěn)定在誤差范圍內(nèi)或超出誤差范圍的時(shí)間超過1s。
3. 任意設(shè)定的讀數(shù)點(diǎn):源1的信號是不相關(guān)信號;信號強(qiáng)度要超過設(shè)定的閾值;設(shè)定的讀數(shù)1-6都穩(wěn)定。在此情況下收集的數(shù)據(jù)可能超出設(shè)定的起始值和終止值的范圍。
數(shù)據(jù)間隔問題:
1. 源1的讀數(shù)穩(wěn)定在前一讀數(shù)加數(shù)據(jù)間隔上;
2. 要采集的信號讀數(shù)必須大于或等于設(shè)定的讀數(shù)閾值;
3. 設(shè)定的讀數(shù)1-6都穩(wěn)定;
4. 信號源1的讀數(shù)穩(wěn)定在誤差范圍內(nèi)或超出誤差范圍的時(shí)間超過1s。
讀數(shù)閾值設(shè)定:此數(shù)值的設(shè)定主要是用來排除誤差干擾信號。對于低于設(shè)定值的信號不做處理。
終止條件設(shè)定:
終止值及誤差范圍:當(dāng)源1的測量讀數(shù)在此范圍時(shí),會自動停止掃描。
從以上信息中得知,對于用作掃描信號的信號波形,并不是連續(xù)光滑的掃頻曲線,而是基本上以1秒為單位的步長階梯,并且這些頻點(diǎn)是以對數(shù)頻率步進(jìn)。如果要掃描的范圍是22Hz-22000Hz,則起始范圍比1000,常用對數(shù)值為3。如果劃分為30個(gè)頻點(diǎn),每個(gè)頻點(diǎn)步長為常用對數(shù)0.1。如果劃分為120個(gè)頻點(diǎn),則步長為0.025。如果更進(jìn)一步,劃分到150個(gè)頻點(diǎn),則步長為0.02。每個(gè)頻點(diǎn)的最短時(shí)間為1s。假設(shè)其為1.1s,則需要掃描165s,外加10s的1kHz標(biāo)準(zhǔn)信號,則整個(gè)掃描過程最少需要175s才能完成。
在matlab上,可以用以下代碼實(shí)現(xiàn)。
%以下程序中生成正弦波并播放。
Fs = 192000; % 采樣頻率
%寫10s 1kHz數(shù)據(jù)
T = 10; % 時(shí)間長度
n = Fs*T; % 采樣點(diǎn)數(shù)
f = 1000; % 聲音頻率
nBitSize = 24; %量化精度(位深度)
y = sin(2*pi*f*T*linspace(0,1,n+1));
%sound(y,Fs); %播放音頻數(shù)據(jù)
nStartFreq =20; %起始頻率
nEndFreq=22000; %終止頻率
nSteps=160; %共掃描160個(gè)數(shù)據(jù)點(diǎn)
nLastT=1.1; %每個(gè)頻點(diǎn)延時(shí)1.1秒
nCount = Fs*nLastT;
nStepLog = log10(nEndFreq/nStartFreq)/nSteps; %頻率增加的對數(shù)步距
for (nFreqLog =0:nSteps-1)
fFreq = nStartFreq*10^(nFreqLog*nStepLog) %實(shí)際掃描頻點(diǎn)
y1=sin(2*pi*fFreq*nLastT*linspace(0,1,nCount+1)); %生成對應(yīng)頻率的正弦波數(shù)據(jù),頻率為計(jì)算的頻點(diǎn),時(shí)間1.1s
y=[y,y1]; %生成的數(shù)據(jù)與前面的波形數(shù)據(jù)合并
end
filename = 'd:\testfiles\Sweep_192K_24bit.wav';
audiowrite(filename, y, Fs, 'BitsPerSample',nBitSize,'Comment','Sweep_192K_24bit'); %保存聲音文件。
info = audioinfo(filename);
info %顯示音頻文件的主要信息
msgbox('程序運(yùn)行結(jié)束。');
程序運(yùn)行后的顯示結(jié)果如下(matlab 8.01 64位版本,運(yùn)行時(shí)間7s):
info =
Filename: 'D:\TestFiles\Sweep_192K_24bit.wav'
CompressionMethod: 'Uncompressed' <-----默認(rèn)的文件格式,未壓縮的PCM格式。
NumChannels: 1 <------未指定聲道數(shù),默認(rèn)為單聲道。
SampleRate: 192000
TotalSamples: 35712161
Duration: 186.0008 <-------音樂文件總時(shí)長,186s
Title: []
Comment: 'Sweep_192K_24bit' <---- 附加的信息。
Artist: []
BitsPerSample: 24
使用matlab的最大好處在于讀取和保存聲音文件非常方便。目前使用audioread, audiowrite 和 audioinfo函數(shù)替代了早期的wavread和wavwrite等函數(shù),把支持的音頻文件的格式擴(kuò)展到 WAV, OGG, FLAC,M4A,ALC等格式,全面支持24bit,32位,64位量化,以及各種采樣率的歸一化數(shù)據(jù),為音頻文件的處理提供了極大的靈活性。
使用 Audition 對該文件的頻譜做分析如下:

整體頻譜范圍在20-22kHz,前面一段10s 1KHz。

局部放大后,可以看到每個(gè)頻段的持續(xù)時(shí)間1S。在兩個(gè)不同頻點(diǎn)的連接處,可以看出頻譜很廣。

對波形數(shù)據(jù)做局部放大,可以看出,因?yàn)椴ㄐ螖?shù)據(jù)不連續(xù),導(dǎo)致其頻譜非常負(fù)載。
通過 matlab的強(qiáng)大運(yùn)算能力,可以對音頻數(shù)據(jù)的質(zhì)量做分析。以下的程序段用于將音頻數(shù)據(jù)文件讀到系統(tǒng)中,然后進(jìn)行FFT,獲取信號的頻譜。
%用fft方法分析 Wave波形文件的頻譜
%y 為音頻數(shù)據(jù)的存儲數(shù)組,F(xiàn)s為音頻數(shù)據(jù)的采樣率
%Pyy 用于保存音頻的歸一化幅度,Pyy_DB是轉(zhuǎn)換為dBV以后的數(shù)值。
%info用來獲取音頻文件的詳細(xì)信息,nBitSize是音頻文件的采樣率。
%nNormal 用于做歸一化使用的常數(shù),等于2^nBitSize。
%sigLength是音頻文件的總采樣個(gè)數(shù),halfLength是總采樣數(shù)的一半值。
%f是用于顯示頻率時(shí)的具體頻點(diǎn)值。
%##########################################################
clear; %清理當(dāng)前內(nèi)存變量
clc; %清理命令窗口
filename='D:\testfiles\1kHz_Sine_192kHz_24bit_2ch.wav';
[y,Fs]=audioread(filename); %讀數(shù)據(jù)文件
info = audioinfo(filename); %獲取音樂文件信息
nBitSize = info.BitsPerSample;%獲取文件中采樣深度
nNormal = 2^nBitSize; %做幅度歸一化時(shí)的最大值
y=y(:,1); %僅使用雙聲道數(shù)據(jù)中的第一列(左聲道數(shù)據(jù))
sigLength = length(y); %獲取數(shù)組長度
%Y1 = y.*hanning(sigLength); %使用Hanning窗變換?操作失敗,暫時(shí)去掉。
%完成FFT及獲取幅度值,以及幅度值的對數(shù)表示法(dBV)
Y=fft(y,sigLength); %做標(biāo)準(zhǔn)FFT變換
Pyy = abs(Y)*2/sigLength/nNormal; %求取變換結(jié)果的幅值部分,并做歸一化處理
Pyy_DB = 10*log10(Pyy); %取常用對數(shù),變成dBV單位。
%以下處理畫圖部分
halflength = floor(sigLength/2); %僅使用半長度做顯示
f=Fs*(0:halflength)/sigLength; %生成索要用的頻點(diǎn)
semilogx(f,Pyy_DB(1:halflength+1)); %畫x軸對數(shù)曲線
title('1K-192kHz-24bit-2CH正弦波頻譜'); %標(biāo)題
xlabel('頻率(Hz)'); %x軸標(biāo)記
ylabel('dBV');
grid on; %打開網(wǎng)格
msgbox('Done'); %提示結(jié)束
實(shí)際運(yùn)行的結(jié)果如下:
直接用Audition 生成的192KHz,24bit采樣的正弦波,其頻譜如下:

對比 44.1kHz采樣率,16bit的1KHz Sine的MP3 頻譜如下,可以看出增加了很多高次諧波分量。

直接用Audition 生成的44.1kHz 16bit, 1KHz Sine 的頻譜,相對來說高頻分量較MP3好很多。

目前這個(gè)算法還有一點(diǎn)問題,就是計(jì)算出來的幅度值嚴(yán)重偏離正常的設(shè)定值,還需要做進(jìn)一步的修訂。
|
|