使用C++ Matlab中的lp2lp函数教程详解
作者:胡刚2016 发布时间:2023-07-13 17:13:12
标签:C++,Matlab,lp2lp
1. matlab的lp2lp函数的作用
去归一化 H(s) 的分母
2. matlab的lp2lp函数的使用方法
[z, p, k]=buttap(3);
disp("零点:"+z);
disp("极点:"+p);
disp("增益:"+k);
[Bap,Aap]=zp2tf(z,p,k);% 由零极点和增益确定归一化Han(s)系数
disp("Bap="+Bap);
disp("Aap="+Aap);
[Bbs,Abs]=lp2lp(Bap,Aap,86.178823974858318);% 低通到低通 计算去归一化Ha(s),最后一个参数就是去归一化的 截止频率
disp("Bbs="+Bbs);
disp("Abs="+Abs);
3. C++ 实现
3.1 complex.h 文件
#pragma once
#include <iostream>
typedef struct Complex
{
double real;// 实数
double img;// 虚数
Complex()
{
real = 0.0;
img = 0.0;
}
Complex(double r, double i)
{
real = r;
img = i;
}
}Complex;
/*复数乘法*/
int complex_mul(Complex* input_1, Complex* input_2, Complex* output)
{
if (input_1 == NULL || input_2 == NULL || output == NULL)
{
std::cout << "complex_mul error!" << std::endl;
return -1;
}
output->real = input_1->real * input_2->real - input_1->img * input_2->img;
output->img = input_1->real * input_2->img + input_1->img * input_2->real;
return 0;
}
3.2 lp2lp.h 文件
实现方法很简单,将 H(s) 的分母的系数乘以 pow(wc, 这一项的指数) 即可
#pragma once
#include <iostream>
#include <vector>
#include <algorithm>
#include "complex.h"
using namespace std;
vector<pair<Complex*, int>> lp2lp(vector<pair<Complex*, int>> tf, double wc)
{
vector<pair<Complex*, int>> result;
if (tf.size() <= 0 || wc <= 0.001)
{
return result;
}
result.resize(tf.size());
for (int i = 0; i < tf.size(); i++)
{
double coeff = pow(wc, tf[i].second);
Complex* c = (Complex*)malloc(sizeof(Complex));
c->real = coeff * tf[i].first->real;
c->img = coeff * tf[i].first->img;
pair<Complex*, int> p(c, tf[i].second);
result[i] = p;
}
return result;
}
4. 测试结果
4.1 测试文件
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include "buttap.h"
#include "zp2tf.h"
#include "lp2lp.h"
using namespace std;
#define pi ((double)3.141592653589793)
int main()
{
vector<Complex*> poles = buttap(3);
vector<pair<Complex*, int>> tf = zp2tf(poles);
// 去归一化后的 H(s) 的分母
vector<pair<Complex*, int>> ap = lp2lp(tf, 86.178823974858318);
return 0;
}
4.2 测试3阶的情况
4.3 测试9阶的情况
可以看出二者结果一样,大家可以自行验证
来源:https://blog.csdn.net/Redmoon955331/article/details/130199447


猜你喜欢
- 收费版本:Rainbow Brackets免费版本:Rainbow Brackets Lite介绍一款可以将 (圆括号) [方括号] {花括
- MyBatis插入Insert、InsertSelective的区别逆向自动生成的mybatis对应配置Mapper文件里面,有两个方法,分
- 1. WebView 远程代码执行漏洞描述 Android API l
- 一.BASIC认证概述在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,
- 一、首先看图二、lock()跟踪源码这里对公平锁和非公平锁做了不同实现,由构造方法参数决定是否公平。public ReentrantLock
- zookeeper集群配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读
- 第一个方法是计算出阶乘然后计算字符串的0的个数。import java.util.Scanner;import java.math.BigD
- 控制语句——for练习语句的嵌套应用累加求和,计数器循环嵌套一、语句的嵌套应用语句嵌套形式。其实就是语句中还有语句。形式多种多样,没有固定的
- 首先:我们要建一个web项目接着: 我们先来导入struts的xml文件第一步:右击你的项目名,鼠标到MyEclipse会看到一个add s
- 1. 绪论当我们编写了自己的C#程序,有程序自定义的文件类型时,通常希望它满足以下需求:双击自定义文件打开自定义程序 自定义文件有着自己的图
- 源程序揭秘杨辉三角形性质: 每行数字左右对称,由 1 开始逐渐变大,然后变小,回到 1。 第 n 行的数字个数为 n 个。 第 n 行数字和
- 一、匿名结构体struct{ char name[20]; int age;}s1;匿名
- 一、介绍SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解
- 前言在开发中常要处理横竖屏切换,怎么处理先看生命周期申明Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是A
- 概述@SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解。基本用法如下:1. 添加Maven
- 本文实例总结了Android开发中的简单设置技巧。分享给大家供大家参考,具体如下:1开机图片:android-logo-mask.pngan
- 一.需求使用JAVA实现单链表,使用单链表检测字符串是否是回文串二.需求分析回文串最重要的就是对称,那么最重要的问题就是找到那个中心,用快指
- 1、背景一般情况下,有些搜索需求是需要根据拼音和中文来搜索的,那么在elasticsearch中是如何来实现基于拼音来搜索的呢?可以通过el
- 估计学过Unix开发但是没有细致学习Java的同学们会疑惑了,操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制
- 一、分析 本次博客,主要解决文件上传等一系列问题,将从两方面来论述,