《信号与系统》的学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《信号与系统》的学习总结相关的知识,希望对你有一定的参考价值。

参考技术A        世间万物彼此互相联系,孤立存在的事物因不能够对其他事物产生影响,所以孤立存在的事物是没有意义的。将世间存在的万物视成一个整体,那么这个整体就是最大的系统,也就是我们的宇宙。要研究这样一个大的系统,由于它的组成元素如此之多,所以在目前看来研究是比较困难的。

       可以根据研究对象的特点,合理地确定系统的组成元素,由于系统中的元素具有非常多的特点,比如质量、电阻等等,所以根据需要确定要研究的特点,摒弃掉不相关的特点。除了宇宙,其余系统都不是封闭的,都与外界产生一定的联系。明确了与系统相关的外部元素,则要研究的系统也就确定下来了。

       系统中的元素彼此互相联系,互相联系是什么意思呢?元素与元素之间是靠信号来传递的,在面临实际当中的系统时,信号可以表现为各种各样的形式,如声音、语言、电信号等等。系统中的元素是靠信号来连接的。信号经过元素,在元素中经过一定的加工,则产生新的信号。

       外界的元素对系统产生作用,或者说将信号输入到系统当中,系统将对此信号进行加工,进行一系列的反应,即响应。若不想深入系统内部,就可以将不同的信号输入到系统中,观察系统具有不同的反应。信号如此之多,不可能将所有的信号都一一输入到系统当中去观察其反应。所以要对信号进行分析,将信号表达成基信号的组合,再观察系统对基信号的响应,从而把握系统对所有信号的响应特性。

Qt学习总结(C鱼)之信号与槽01

自动关联

第一种自然是手动关联了,只要调用connect函数就能实现自动关联。
这里重点讲第二种,自动关联:
为了实现槽函数自动进行关联,对于Qt窗口部件已经提供的信号,可按照以下规范命名:
void on_<窗口部件名称>_<信号名称>_(<信号参数>);

自动关联只适用于Qt部件已经定义好的信号,如果是程序员自己定义的信号则必须手动关联。还有,对于是在Qt设计器往界面添加的部件,那么就可以直接写上面函数格式,以实现自动关联。但是对于不是在Qt设计器往界面添加的部件,我们就要在调用setUi()函数前定义该部件,而且还要使用setObjectName()函数指定部件的对象名,重点来了,setObjectName()函数设置的对象名必须与窗口部件名称一样,即,全部名字一样,那才能够实现自动关联。

例如:

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    //自动关联
    button=new QPushButton(this);
    button->move(50,100);
    button->setText(tr("二重点击"));
    button->setObjectName(tr("button"));//对象名尤其重要,一定要相同
    ui->setupUi(this);
    //手动关联connect(ui->showChildButton,SIGNAL(clicked()),this,SLOT(showChildDialog()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_button_clicked()
{
    QDialog *dialog=new QDialog(this);
    dialog->show();
}

断开信号和槽(disconnect)

当信号和槽没有必要继续保持连接时,可以通过调用disconnect来断开它们。
bool QObject::disconnect (const QObject sender, const char signal, const Object receiver, const char slot) [static]
有三种情况必须使用 disconnect() 函数:
(1)断开与某个对象相关联的任何对象。

disconnect(sender, 0, 0, 0) ;
//或者
sender->disconnect();

(2)断开与某个特定信号的任何关联。
disconnect(sender, SIGNAL(signal()), 0, 0);```
//或者
sender->disconnect(SIGNAL(signal()));
(3)断开两个对象之间的关联。
disconnect(sender, 0, receiver, 0);
//或者
sender->disconnect(receiver);

信号映射器QSignalMapper类

SignalMapper类可以简单的理解为信号的翻译和转发器, 它可以把一个无参数的信号翻译成带int参数、QString参数、QObject参数或者QWidget参数的信号,并将之转发。经常用在同种却多个信号连接同一个槽的情况下。

//1.第一步:创建信号映射器对象
QSignalMapper *signal_mapper = new QSignalMapper(this);

//2.让同种却多个信号的部件连接信号映射器map槽,map槽会发射mapped信号,mapped信号的参数由setMapping函数的第二个参数决定。
connect(push_button_1, &QPushButton::clicked, signal_mapper, &QSignalMapper::map);
connect(push_button_2, &QPushButton::clicked, signal_mapper, &QSignalMapper::map);
connect(tool_button_1, &QToolButton::clicked, signal_mapper, &QSignalMapper::map);
connect(tool_button_2, &QToolButton::clicked, signal_mapper, &QSignalMapper::map);

//3.设置翻译的内容,也就是第二个参数
signal_mapper->setMapping(push_button_1, QString::number(BUTTON_1, 10));
signal_mapper->setMapping(push_button_2, QString::number(BUTTON_2, 10));
signal_mapper->setMapping(tool_button_1, QString::number(BUTTON_3, 10));
signal_mapper->setMapping(tool_button_2, QString::number(BUTTON_4, 10));

//4.映射器重新发射信号,执行槽函数
connect(signal_mapper, &QSignalMapper::mapped, this, &MyWidget::changeButton);

void MyWidget::changeButton(QString text)
{
    int index = text.toInt();
    QString information = QString("");
    switch(index)
    {
    case BUTTON_1:
        information = QString("clicked 1");
        break;

    case BUTTON_2:
        information = QString("clicked 2");
        break;

    case BUTTON_3:
        information = QString("clicked 3");
        break;

    case BUTTON_4:
        information = QString("clicked 4");
        break;

    default:
        information = QString("which is clicked?");
        break;
    }
    QMessageBox::information(NULL, QString("Title"), information);
}

以上是关于《信号与系统》的学习总结的主要内容,如果未能解决你的问题,请参考以下文章

语音采集回放系统-硬件总结

学习笔记_信号与系统

信号与系统学习记录1——1.1信号的分类

信号与系统学习记录1——1.1信号的分类

信号与系统学习笔记——连续系统的时域分析

离散时间信号与系统:4