关闭

用步进正弦激励法测量计算机声卡输出输入幅值频响函数

标签: 计算机声卡幅频audiorecorsound
1368人阅读 评论(0) 收藏 举报
分类:

一. 实验目的

(1) 通过对计算机声卡系统的实测加深对频响函数的理解;
(2) 对声音振动及测量有直观了解;
(3) 对计算机声卡系统的频响特性有直观的认识。

二. 实验内容

(1) 用声卡发出的步进正弦输出信号再由声卡通过音频线直接采集为输入信号,由此分析声卡的幅值的频率特性曲线

三. 实验步骤

(1) 将计算机声卡的麦克风输入口和耳机或音箱输出口用音频线连上,如图1。声卡类型如图2。
(2) 利用MatLab控制声卡发出正弦信号,信号幅值为0.4,同时利用matlab进行录音,记录此正弦信号。然后利用傅里叶变换,计算出记录信号的幅值。
(3) 保持正弦信号输出的幅值不变,改变正弦信号的频率,重复以上过程。考虑到计算机与外设之间速度的不匹配,需要加入延时,详细设置见Matlab程序。

这里写图片描述
图 1音频线连接输入和输出口

这里写图片描述
图 2声卡类型

maltab代码:

fs = 22050;  %采样频率
bits = 16;  %量化位数
chan = 1;   %单通道
tf = 5; %播音时间

rec = audiorecorder(fs, bits, chan);        %设置录音器

t = 1/fs : 1/fs : tf;
M = [10:1:40, 41:10:201, 202:100:3002, 3003:500:8003, 8003:100:11000];   %正弦信号的频率

rlt = zeros(size(M));
i = 0;

for f = M
    i = i + 1;
    y = 0.4 * sin(2 * pi * f * t);

    sound(y, fs, bits);     %播音,非阻塞函数,(f为声音的频率,fs为采样频率)
    record(rec, tf);        %录音,非阻塞函数
    pause(tf * 2);  %延时同步

    mydat = getaudiodata(rec);      %获取波形数据

    mydat1 = mydat(end - fs + 1 : end);     %从波形数据中取后1s中的数据
    mydat1 = abs(fft(mydat1)) ./ length(mydat1);    %进行傅里叶变换
    rlt(i) = max(mydat1) * 2;   %获取记录波形的幅值
end

plot(M, rlt)就会显示幅频响应曲线
这里写图片描述

四. 结论

对于采样频率为22050Hz,16位量化单通道的设置,从测试的结果来看,在10Hz~8000Hz,幅频特性曲线平坦,这是从幅值上考虑声音不失真的条件。由于采样频率22050Hz,根据采样定律,理论上最多能够覆盖11025Hz以下的频率,而该声卡在8000Hz以下都能保持平坦的幅频特性,从这个角度考虑,该声卡应该算不错了(声卡的评价指标很多,除了幅频特性外,还有相频特性,总谐波失真和互调失真等等,幅频好不代表声卡好,但是好的声卡一定有好的幅频特性)。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:258827次
    • 积分:3457
    • 等级:
    • 排名:第10176名
    • 原创:90篇
    • 转载:7篇
    • 译文:1篇
    • 评论:33条
    最新评论