cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2668|回复: 12

用matlab与labview混编设置一个高通滤波器调用出问题

[复制链接]
发表于 2008-4-27 22:36:09 | 显示全部楼层 |阅读模式
matlab可以 完好执行,    但是在lavview里面 运行老是在close activX那里出错,  望达人帮忙, 谢谢


matlab代码如下:

function butterwasD_H
fp=300;
fs=400;
rs=40;
rp=0.5;
Fs=1000;
[H,W]=butterD(fp,fs,rp,rs,Fs);
plot(W*Fs/(2*pi),abs(H));
grid



function [H,W]=butterD(fp,fs,rp,rs,Fs);
wp=2*fp*pi;
ws=2*pi*fs;
[N,Wn]=buttord(wp,ws,rp,rs,'s');    %选择滤波器阶数
[z,p,k]=buttap(N);
[A,B,C,D]=zp2ss(z,p,k);
[At,Bt,Ct,Dt]=lp2hp(A,B,C,D,Wn);    %实现低通到高通的转换
[num1,den1]=ss2tf(At,Bt,Ct,Dt);
[num,den]=bilinear(num1,den1,Fs);
[H,W]=freqz(num,den);

[ 本帖最后由 s_yjxu 于 2008-4-27 22:45 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2008-4-28 13:54:20 | 显示全部楼层
高手不要吝启金口啊 呵呵 ^_^
 楼主| 发表于 2008-4-28 19:01:33 | 显示全部楼层
发表于 2008-4-28 20:17:56 | 显示全部楼层
从外形上看,没有问题。那么问题就是:COM组件打包的时候没有做好,第二个原因,注册控件有问题。第三,matlab版本不太好用,建议用matlab2006a及其以后的最新版本。
 楼主| 发表于 2008-4-28 21:50:47 | 显示全部楼层
风定云远  原来你的qq就是787053185阿^_^

后2个问题基本没有, 注册成功, 用的是matlab2008的.。   那么第一个问题 怎么判断COM组件有没有打包好呢(用了你的那份技术,貌似打包的时候都是成功的哩^_^)
 楼主| 发表于 2008-4-29 11:41:12 | 显示全部楼层
 楼主| 发表于 2008-4-29 22:27:10 | 显示全部楼层
   ·············              ···········
发表于 2008-5-2 19:56:29 | 显示全部楼层
matlab程序你记得下面的原则才可以做COM:
1、写成多个函数,m文件;不要把子程序放在一个m文件内;
2、函数没有声明正确 ,应该将后面需要输出的数据作为定义,比如[x,y]=function(a,b);如果没有输出,内部画图的话,则只需声明函数头即可;
3、不能将m文件的设置参数选择放在m程序内。
发表于 2008-5-2 19:59:42 | 显示全部楼层
算了,我自己去测试下吧,给你说的功夫让你思考,不知道什么时间可以出结果。你先等等。
发表于 2008-5-2 20:25:03 | 显示全部楼层
matlab 数字滤波器设计 简单示例
     频率滤波器大概分为带通、带阻、高通、低通。特性不同的模拟滤波器中经典滤波器有Butterworth 和 Chebyshev 。其中,Butterworth 滤波器特点是通带处幅值特性平坦,而 Chebyshev 滤波器则比前者的截至特性要好,但通带处的幅值有振荡。前面提到,对于数字滤波器而言,可以采用不同阶数逼近相应滤波器,滤波器性能还与滤波器的阶数有关,一般而言,阶数越高,则逼近越精确,但计算代价也随之上升,所以性能与代价总需要寻求一个平衡点。对性能要求一定的情况下,如果对频率截至特性没有特殊要求,考虑采用Butterworth IIR滤波器。因为 Chebeshev 滤波器的波纹可能大多数情况下不能忍受。
      Matlab 内建有设计Filter 的函数。例如 Butter,其语法格式为:

        [B,A] = butter(N,Wn,S)
其中
        N  为要求设计的滤波器阶数
        S  为字符串,表明设计的滤波器类型,low低通/high高通/stop带阻
        Wn 为要求的标准化截至频率,单位为rad/sample,如果是带阻滤波器,则Wn为长度为2的向量[w1 w2]。关于标准化的频率计算为:设要求的频率为f(Hz),采样率为Fs(Hz),则Wn = (2*pi*f/Fs)/pi = 2*f/Fs,所以,标准化截至频率在区间[0,1]内。
        

一、巴特沃斯IIR滤波器的设计

在MATLAB下,设计巴特沃斯IIR滤波器可使用butter函数。

Butter函数可设计低通、高通、带通和带阻的数字和模拟IIR滤波器,其特性为使通带内的幅度响应最大限度地平坦,但同时损失截止频率处的下降斜度。在期望通带平滑的情况下,可使用butter函数。

butter函数的用法为:

[b,a]=butter(n,Wn,/ftype/)
http://vfeng0123.spaces.live.com/
其中n代表滤波器阶数,Wn代表滤波器的截止频率,这两个参数可使用buttord函数来确定。buttord函数可在给定滤波器性能的情况下,求出巴特沃斯滤波器的最小阶数n,同时给出对应的截止频率Wn。buttord函数的用法为:

[n,Wn]= buttord(Wp,Ws,Rp,Rs)

其中Wp和Ws分别是通带和阻带的拐角频率(截止频率),其取值范围为0至1之间。当其值为1时代表采样频率的一半。Rp和Rs分别是通带和阻带区的波纹系数。

不同类型(高通、低通、带通和带阻)滤波器对应的Wp和Ws值遵循以下规则:

1.高通滤波器:Wp和Ws为一元矢量且Wp>Ws;

2.低通滤波器:Wp和Ws为一元矢量且Wp<Ws;

3.带通滤波器:Wp和Ws为二元矢量且Wp<Ws,如Wp=[0.2,0.7],Ws=[0.1,0.8];

4.带阻滤波器:Wp和Ws为二元矢量且Wp>Ws,如Wp=[0.1,0.8],Ws=[0.2,0.7]。

二、契比雪夫I型IIR滤波器的设计

在期望通带下降斜率大的场合,应使用椭圆滤波器或契比雪夫滤波器。在MATLAB下可使用cheby1函数设计出契比雪夫I型IIR滤波器。

cheby1函数可设计低通、高通、带通和带阻契比雪夫I型滤IIR波器,其通带内为等波纹,阻带内为单调。契比雪夫I型的下降斜度比II型大,但其代价是通带内波纹较大。

cheby1函数的用法为:

[b,a]=cheby1(n,Rp,Wn,/ftype/)

在使用cheby1函数设计IIR滤波器之前,可使用cheblord函数求出滤波器阶数n和截止频率Wn。cheblord函数可在给定滤波器性能的情况下,选择契比雪夫I型滤波器的最小阶和截止频率Wn。

cheblord函数的用法为:

[n,Wn]=cheblord(Wp,Ws,Rp,Rs)

其中Wp和Ws分别是通带和阻带的拐角频率(截止频率),其取值范围为0至1之间。当其值为1时代表采样频率的一半。Rp和Rs分别是通带和阻带区的波纹系数。
14:13 | 添加评论 | 发送消息 | 固定链接 | 查看引用通告 (0) | 写入日志Matlab内建滤波器函数filter
Matlab里已经内建了滤波器函数filter,其语法格式为:
        Y = filter(B,A,X)
其中
        B/A 提供滤波器系数,B为分子, A为分母

        X为滤波前序列,

        Y为滤波结果序列。
14:06 | 添加评论 | 阅读评论 (2) | 发送消息 | 固定链接 | 查看引用通告 (0) | 写入日志Matlab 提供的滤波器分析函数freqz
可以使用Matlab 提供的内建函数freqz,可以求得滤波器系统的频率相应特性。其使用语法格式为:
        [H,F] = freqz(B,A,N,Fs)
其中
        B/A 提供滤波器系数 B为分子 A为分母    (b0 + b1Z^-1 +....)/(a0 + a1Z^-1 +....)
        N   表示选取单位圆的上半圆等间距的N个点作为频响输出;
        Fs  为采样频率,该参数可以省略
        H   为N个点处的频率响应复值输出向量,其模即为频响幅值曲线幅值20log10(abs(H))DB,其幅角angle(H)即为频响相位曲线相位值。
        F   为与第N点处对应的频率值f(Hz),如果Fs 参数省略时,则频率值w为rad/sample,w = 2*pi*f/Fs
发表于 2008-5-2 21:14:07 | 显示全部楼层
用matlab 和matlab script跑了下你的程序。判断如下:
1、你的程序有问题,数据类型的转换上考虑下;
2、用COM组件前先用 matlab调试好 ,再用script跑下程序验证下,最后才做COM组件调用。因为COM的目的是为了实现脱离matlab环境,为了应用。script是为了调试的编辑情况。
发表于 2008-5-2 21:16:55 | 显示全部楼层
这个原则已经说的很明白了,我所发的资料包内容已经很清晰、详细,自己好好研究吧,我是不会给你再做一个现成的。给你提供一个方法和例子已经足够了。
 楼主| 发表于 2008-5-3 22:30:37 | 显示全部楼层
这两天不在 原来师兄给我了 这么多建议哈  谢谢^_^谢谢  第二个建议非常的棒, 我试下先

原帖由 wdyjz 于 2008-5-2 21:14 发表
用matlab 和matlab script跑了下你的程序。判断如下:
1、你的程序有问题,数据类型的转换上考虑下;
2、用COM组件前先用 matlab调试好 ,再用script跑下程序验证下,最后才做COM组件调用。因为COM的目的是为了实现 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2024-5-20 07:35 , Processed in 0.553670 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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