声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1458|回复: 13

[综合讨论] 声卡采样滤波后怎么输出来就变化呢

[复制链接]
发表于 2008-1-16 10:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请问高手,怎么我采样之后经声卡输出在示波器里看到的波形和采样滤波后的信号不一样呢?请高手帮忙

不知道怎么把采样滤波后的信号原样输出来,谢谢。

程序输出部分有问题吗?







ai = analoginput('winsound');
ch=addchannel(ai,1);
set(ai,'SampleRate',44100)
set(ai,'SamplesPerTrigger',44100*5);
start(ai)
[data,time] = getdata(ai);
delete(ai)



figure;
subplot(211),plot(time,data); %时域图
title('Time-Domain');
xlabel('time /s');ylabel('magnitude /V');


%cheby2型滤波
[b,a] = cheby2(9,20,300/22050);%设计9阶,带阻波纹20dB,不
                  %确定是从20开始,300/22050为归一化频率
[fil,zf]=filter(b,a,data); %zf为滤波器延迟
subplot(212),plot(time,fil);title('fitered signal');
xlabel('time /s');ylabel('magnitude /V');

                             
%进行FFT变换并做频谱图
y=fft(data);%进行fft变换
mag=abs(y);%求幅值
mag1=20*log10(mag);
f=(0:length(y)-1)'*44100/length(y);%进行对应的频率转换
figure;
subplot(211);
plot(f(1:64),mag1(1:64));%做频谱图
%axis([0,150,0,500]);
xlabel('Frequency /Hz');
ylabel('Magnitude /dB');
title('Samples FFT N=128');
grid;

%绘制功率谱
sq=mag1.^2;
subplot(212);
plot(f(1:64),sq(1:64));
xlabel('Frequency(Hz)');
ylabel('Power Spec');
title('Spec');
grid;



%处理信号输出
ao = analogoutput('winsound');
addchannel(ao,1);
set(ao,'SampleRate',44100);
set(ao,'TriggerType','Manual')
putdata(ao,fil);
start(ao);
trigger(ao);
waittilstop(ao,6)
stop(ao);
delete(ao);

[ 本帖最后由 sigma665 于 2008-1-16 10:46 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-1-16 12:44 | 显示全部楼层

回复 2楼 的帖子

版主不是万能的
耐心等待
发表于 2008-1-16 13:21 | 显示全部楼层
原帖由 theason 于 2008-1-16 10:40 发表
请问高手,怎么我采样之后经声卡输出在示波器里看到的波形和采样滤波后的信号不一样呢?请高手帮忙

不知道怎么把采样滤波后的信号原样输出来,谢谢。

程序输出部分有问题吗?







ai = analoginput ...

如果采样滤波后的信号是通过matlab分析后在图像窗口输出的,那么先检查你采的原始信号和示波器的输入信号是否有区别。如果区别不大,说明原始信号没问题。那就检查是否是滤波器设计不合理导致的波形失真,一步一步来信号源到处理的每个步骤来排除可能的错误。

评分

1

查看全部评分

 楼主| 发表于 2008-1-16 15:03 | 显示全部楼层
谢谢两位回答。
我检查了传感器信号和滤波后的信号相差不大,但是在声卡扬声器口输出时就变了
通过改动不同的ao的SampleRate变化也很大(示波器接在声卡输出端看到),通常是ao的SampleRate越大输出也越大,失真更厉害;如果不设置SampleRate值也有输出,却不清楚这个时候的SampleRate值是多大了
而现在我的目的就是想把那滤波后的信号原样输出来,私底下认为是信号输出程序有问题,不知道哪位有这个方面的经验,请赐教,拜谢
发表于 2008-1-20 21:28 | 显示全部楼层
排出程序问题的话,只可能两个原因:1采用率不够;2滤波器阈值设置有问题。

评分

1

查看全部评分

 楼主| 发表于 2008-1-23 18:32 | 显示全部楼层
采样频率的话,因为采用声卡,只有几个档位:8000,11025,22050,44010
按照采样定理,44100足够了,通常实验室的干扰都在100Hz内,即使超出也不会超出多少。

至于所说的滤波器,我采用的cheby2型带通滤波,没有涉及到那个值的设置吧,直接运用的matlab函数了

不过还是谢谢你的意见
我估计是输出程序的问题
还有一个请教是哪位有没有用matlab实时控制声卡输出的经验呢?
现在做了一个实时采集的,但是不会实时输出,请高手指教

[ 本帖最后由 eight 于 2008-1-23 18:38 编辑 ]
发表于 2008-1-24 09:30 | 显示全部楼层
楼主是用44100Hz通过声卡采集数据,就是说信号最高频率可达22050Hz。而楼主又用了一个低通滤波器,低通滤波器的截止频率是300Hz,所以滤波后的波形当然和原始采样的波形有很大的差别,高频都被滤去了。
 楼主| 发表于 2008-1-25 20:23 | 显示全部楼层
现在问题不是这个,而是想通过MATLAB编程实时输出实时采集到的信号,不知道哪位有办法?
 楼主| 发表于 2008-1-25 20:25 | 显示全部楼层
实时采集能够完成,但实时输出没有成功,希望各位能人指导,谢谢
发表于 2008-1-25 21:35 | 显示全部楼层
在实时采集后
ai = analoginput('winsound');
ch=addchannel(ai,1);
set(ai,'SampleRate',44100)
set(ai,'SamplesPerTrigger',44100*5);
start(ai)
[data,time] = getdata(ai);
delete(ai)

wavplay(data,44100);
便能输出声音了.

评分

1

查看全部评分

 楼主| 发表于 2008-1-27 13:45 | 显示全部楼层
谢谢,这样能实时输出吗?我实时采集参考别人的程序
我试试
 楼主| 发表于 2008-1-29 15:00 | 显示全部楼层
好像这个方案不行。实时采集程序都是采用回调函数处理的

[ 本帖最后由 eight 于 2008-1-29 15:36 编辑 ]
 楼主| 发表于 2008-2-1 16:01 | 显示全部楼层
希望高手指教哦
 楼主| 发表于 2008-2-17 21:47 | 显示全部楼层
大家都没有做个这个方面的吗?:'( :'(
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-10 22:15 , Processed in 0.103215 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表