diff --git a/categories/Math-model/index.html b/categories/Math-model/index.html index acee07daa..42cbd5281 100644 --- a/categories/Math-model/index.html +++ b/categories/Math-model/index.html @@ -307,3 +307,19 @@

Math Model +n-n1-shared.com","placeholder":"Just go go","avatar":"mm","meta":["nick"],"pageSize":10,"lang":"zh-cn","visitor":false,"comment_count":true,"recordIP":false,"enableQQ":true,"requiredFields":["nick"],"el":"#valine-comments","path":"/categories/Math-model/"} + + + + diff --git a/search.xml b/search.xml index 1114e7156..d772fd09e 100644 --- a/search.xml +++ b/search.xml @@ -1,79 +1,5 @@ - - C&&C++问题总汇(1) - /2021/09/20/C&&C++%E9%97%AE%E9%A2%98%E6%80%BB%E6%B1%87(1)/ - C&&C++问题总汇🙄

- -

二维数组

-

定义一个二维数组如下:

-
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
-

如果采用一个指针去指向这个数组,可以这么做:

-
int (*p)[4]=a; //4代表了一行有多少个元素
-

其中*p要加括号,因为不加括号就是指针数组,而且但是,这时候的*p(p指针指向的数据不在是一个int的数,而是一个数组,代表的是第i行的所有元素)

-
sizeof(*p);
Output: 16
-

那么访问这个二维数组的指针方法是:

-
a[i][j]=*(*(p+i)+j);
-

当然,下面这种方式也对(和一维数组的指针一样)

-
a[i][j]=p[i][j];
-

Y7D20b8621AY6CYryYagUED1

-
    -
  • 指针数组是这样子的吗?
  • -
-
char *strs[3] ={"chinese","zhonguo" } ;//3代表两个string元素,一个'\0'
-

这里使用的就是指针数组,所以这里是3(数组中元素的个数+1),而上面的那个是4数组个每个元素的下一级个数。

-

二维数组赋值的问题

-
    -
  • 二维数组有两个维度,当然可以按照一个一个去赋值,但那样毕竟太慢,所以有没有更好的赋值方法呢?
  • -
-
int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
-

这是我现在使用的方法,并不是十分的好,希望有所改进

-
    -
  • 友元函数访问私有成员问题
  • -
-
//习题5-18

//报错,a[2][2]是私有成员,不可在operator中访问
#include<iostream>
using namespace std;
class List{
public:
List(int i,int j,int k ,int m){
a[0][0]=i,a[0][1]=j,a[1][0]=k,a[1][1]=m;
}
List(int (*p)[2]){
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
a[i][j]=p[i][j];
}
}
}
List(){
}
friend operator+(List &a,List &b);
friend operator-(List &a,List &b);
void disp(){
cout<<a[0][0]<<" "<<a[0][1]<<endl;
cout<<a[1][0]<<" "<<a[1][1]<<endl;

}
private:
int a[2][2];
};
List operator+(List a,List b){
int c[2][2];
for(int i=0;i<2; i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]+b.a[i][j];
}
}
return List(c);
}
List operator-(List &a,List &b){
int c[2][2];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]-b.a[i][j];
}
}
return List(c);
}
int main(){
List a(1,2,3,4);

int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
List b(b1);
List c;
c = a+b;
c.disp();
return 0;
}
-

指针的指针

-
int **p;
//使用方法
int **p; //定义一个指针的指针
int *q; //定义一个int型的指针
int a[3]={1,2,3};
q = a; //q指向a
p =&q; //p指向q
printf("%d",*(*p+1)); //所以*p展现了q,*(*p)为q展现自己储存的地址的内容
return 0;
-
    -
  • 所以说,这个int有用吗?
  • -
-
*((int *)a+n*i+j);  
-
    -
  • 函数的分号问题
  • -
-
T sum(){
.....
}

T sum(){
.....
}; //这个分号是否有必要?
-
    -
  • 答:
  • -
-
//为什么Base和Derived的虚函数地址一样呢 
#include<iostream>
using namespace std;
class Base{
public:
virtual void func(){
};
virtual void func1(){
}
};
class Derived: public Base{
public:
virtual void fun(){
};
virtual void func1(){
};
};

int main(){
Derived d;
if (d.Base::_vptr==d._vptr){
cout<<"yes"<<endl; //显示yes
}
return 0;
}
-
    -
  • 问:Base中的虚函数和Derived的虚函数的地址为什么是一样的呢

  • -
  • 答:

  • -
-

虚表指针指向了一个虚表,虚表中存放着类中的虚函数。如果类中存在虚函数,那么构造对象的时候,就会生一个虚表指针指向虚表,虚表中存放虚函数。所以,要注意的一-点, -在类的构造函数中不要调用虚函数,这是一一个危险的动作,因为很可能它还未 -初始化完毕。

-
    -
  • 问:动态联编和静态联编,可以访问派生类函数
  • -
  • 答:
  • -
-
#include<iostream>
using namespace std;
class A{
public:
void print(){
cout<<"1,2,3";
}
};
class B:public A{
public:
void print1(){
cout<<"4,5,6";
}
};
int main(){
A *ptr;
B a1;
ptr =&a1;
ptr->print1(); //can't called
return 0;
}
-
    -
  • 问:不能调用派生类函数
  • -
  • 答:
  • -
-
#include<iostream>
using namespace std;
class Base{
public:
void func4(){
cout<<"nihao";
}
};
class Derived:public Base{
public:
void func4(){
cout<<" nihao!";
}
};
int main(){
Base d1, *bp;
Derived d2;
bp=&d2;
bp->func4(); //这里直接调用了Base里面的func4(),这个算重载吗?
}
-
    -
  • 问:这个可以算重载嘛?,结果值为第一个
  • -
  • 答:
  • -
-
#include<iostream>
using namespace std;
class Length{
int meter;
public:
Length(int m){
meter = m;
}
operator double(){
return (1*meter/1000); //这个地方一定要使用1.0,否者强制转化会导致结果出错
}
};
int main(){
Length a(1500);
double m =float(a);
cout<<"m="<<m<<"km"<<endl;
return 0;
}
-

注意:这里Length返回值只能是1.0,不能是1,否者将会不准确。

-]]>
- - coding - -
Android Adb Command /2021/10/24/Android-Adb-Command/ @@ -171,6 +97,160 @@ href="">ipforbidden模块,刷入,即可 Android + + C&&C++问题总汇(1) + /2021/09/20/C&&C++%E9%97%AE%E9%A2%98%E6%80%BB%E6%B1%87(1)/ + C&&C++问题总汇🙄

+ +

二维数组

+

定义一个二维数组如下:

+
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
+

如果采用一个指针去指向这个数组,可以这么做:

+
int (*p)[4]=a; //4代表了一行有多少个元素
+

其中*p要加括号,因为不加括号就是指针数组,而且但是,这时候的*p(p指针指向的数据不在是一个int的数,而是一个数组,代表的是第i行的所有元素)

+
sizeof(*p);
Output: 16
+

那么访问这个二维数组的指针方法是:

+
a[i][j]=*(*(p+i)+j);
+

当然,下面这种方式也对(和一维数组的指针一样)

+
a[i][j]=p[i][j];
+

Y7D20b8621AY6CYryYagUED1

+
    +
  • 指针数组是这样子的吗?
  • +
+
char *strs[3] ={"chinese","zhonguo" } ;//3代表两个string元素,一个'\0'
+

这里使用的就是指针数组,所以这里是3(数组中元素的个数+1),而上面的那个是4数组个每个元素的下一级个数。

+

二维数组赋值的问题

+
    +
  • 二维数组有两个维度,当然可以按照一个一个去赋值,但那样毕竟太慢,所以有没有更好的赋值方法呢?
  • +
+
int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
+

这是我现在使用的方法,并不是十分的好,希望有所改进

+
    +
  • 友元函数访问私有成员问题
  • +
+
//习题5-18

//报错,a[2][2]是私有成员,不可在operator中访问
#include<iostream>
using namespace std;
class List{
public:
List(int i,int j,int k ,int m){
a[0][0]=i,a[0][1]=j,a[1][0]=k,a[1][1]=m;
}
List(int (*p)[2]){
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
a[i][j]=p[i][j];
}
}
}
List(){
}
friend operator+(List &a,List &b);
friend operator-(List &a,List &b);
void disp(){
cout<<a[0][0]<<" "<<a[0][1]<<endl;
cout<<a[1][0]<<" "<<a[1][1]<<endl;

}
private:
int a[2][2];
};
List operator+(List a,List b){
int c[2][2];
for(int i=0;i<2; i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]+b.a[i][j];
}
}
return List(c);
}
List operator-(List &a,List &b){
int c[2][2];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]-b.a[i][j];
}
}
return List(c);
}
int main(){
List a(1,2,3,4);

int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
List b(b1);
List c;
c = a+b;
c.disp();
return 0;
}
+

指针的指针

+
int **p;
//使用方法
int **p; //定义一个指针的指针
int *q; //定义一个int型的指针
int a[3]={1,2,3};
q = a; //q指向a
p =&q; //p指向q
printf("%d",*(*p+1)); //所以*p展现了q,*(*p)为q展现自己储存的地址的内容
return 0;
+
    +
  • 所以说,这个int有用吗?
  • +
+
*((int *)a+n*i+j);  
+
    +
  • 函数的分号问题
  • +
+
T sum(){
.....
}

T sum(){
.....
}; //这个分号是否有必要?
+
    +
  • 答:
  • +
+
//为什么Base和Derived的虚函数地址一样呢 
#include<iostream>
using namespace std;
class Base{
public:
virtual void func(){
};
virtual void func1(){
}
};
class Derived: public Base{
public:
virtual void fun(){
};
virtual void func1(){
};
};

int main(){
Derived d;
if (d.Base::_vptr==d._vptr){
cout<<"yes"<<endl; //显示yes
}
return 0;
}
+
    +
  • 问:Base中的虚函数和Derived的虚函数的地址为什么是一样的呢

  • +
  • 答:

  • +
+

虚表指针指向了一个虚表,虚表中存放着类中的虚函数。如果类中存在虚函数,那么构造对象的时候,就会生一个虚表指针指向虚表,虚表中存放虚函数。所以,要注意的一-点, +在类的构造函数中不要调用虚函数,这是一一个危险的动作,因为很可能它还未 +初始化完毕。

+
    +
  • 问:动态联编和静态联编,可以访问派生类函数
  • +
  • 答:
  • +
+
#include<iostream>
using namespace std;
class A{
public:
void print(){
cout<<"1,2,3";
}
};
class B:public A{
public:
void print1(){
cout<<"4,5,6";
}
};
int main(){
A *ptr;
B a1;
ptr =&a1;
ptr->print1(); //can't called
return 0;
}
+
    +
  • 问:不能调用派生类函数
  • +
  • 答:
  • +
+
#include<iostream>
using namespace std;
class Base{
public:
void func4(){
cout<<"nihao";
}
};
class Derived:public Base{
public:
void func4(){
cout<<" nihao!";
}
};
int main(){
Base d1, *bp;
Derived d2;
bp=&d2;
bp->func4(); //这里直接调用了Base里面的func4(),这个算重载吗?
}
+
    +
  • 问:这个可以算重载嘛?,结果值为第一个
  • +
  • 答:
  • +
+
#include<iostream>
using namespace std;
class Length{
int meter;
public:
Length(int m){
meter = m;
}
operator double(){
return (1*meter/1000); //这个地方一定要使用1.0,否者强制转化会导致结果出错
}
};
int main(){
Length a(1500);
double m =float(a);
cout<<"m="<<m<<"km"<<endl;
return 0;
}
+

注意:这里Length返回值只能是1.0,不能是1,否者将会不准确。

+]]>
+ + coding + +
+ + 通信原理笔记 + /2023/05/23/Communication%20principle/ + 通信原理理解性笔记

+ +

信道

+
+

将发送端数字脉冲信号转换成模拟信号的过程称为调制(Modulation);将接收端模拟信号还原成数字脉冲信号的过程称为解调(Demodulation)。将调制和解调两种功能结合在一起的设备称为调制解调器(Modem)

+

模拟信号和数字信号之间可以相互转换:模拟信号一般通过PCM脉码调制(Pulse +Code +Modulation)方法量化为数字信号,即让模拟信号的不同幅度分别对应不同的二进制值,例如采用8位编码可将模拟信号量化为2^8=256个量级,实用中常采取24位或30位编码;数字信号一般通过对载波进行移相(Phase +Shift)的方法转换为模拟信号。

+

数字信道占用信道频带较宽。一路模拟电话的频带为4kHz带宽,一路数字电话约占64kHz,这是模拟通信目前仍有生命力的主要原因。

+
+

数字信道与模拟信道_模拟信道和数字信道_偷轮子的博客-CSDN博客

+

波形成型

+
+

从上图可以看出,相关时延大于符号持续时间,因此,当两个信号在接收侧相加时,来自于时延为的符号将会和来自于时延为的符号相加。

+

不同的符号相加,或者说,不同的符号相互干扰,即为符号间干扰(ISI)

+

一般将多径信号最大时延的倒数定义为多径信道的相关带宽。

+
+

频率选择性失真ISI一体两面,其中,频率选择性失真发生在频域,对应的时域结果ISI

+
+
+

衰落(2)-- +时延扩展,相关带宽,ISI - 知乎

+
+

脉冲整形

+

一、矩形脉冲

+

实际上矩形脉冲无失真传输是不可能的,因为由傅里叶变换可知,时域矩形脉冲,频域是sinc函数,带宽无限,而信道带宽总是有限的。 +失真严重导致采样判决出错,无法正确恢复数字信号。 +显然矩形脉冲信号不合适,sinc脉冲信号合适

+

二、sinc脉冲频谱有限,一个码元达到最大幅值时其他所有码元幅值刚好为零,码元之间不会相互影响,实现了无码间串扰。

+

基带滤波器

+

一般使用基带滤波器来实现脉冲整形

+

假设发送序列{1 1 1 -1 1 -1 -1 1} +发送序列、输入滤波器的冲激信号、每个冲激信号的冲激响应,和输出信号如图所示 +例子

+
+

基带信号的发送和接收的有效理解和掌握_滚降因子为0的系统可以算是理想低通系统吗_BIT小小书童的博客-CSDN博客

+
+

最初,信号是以矩形脉冲通过带限信道,必然会出现脉冲时延扩展引起S1,频域上看是Sa函数的旁瓣千扰。

+
+

简单概述:脉冲成形 +基带成形 (脉冲成型 基带成型) - HQU小西西 - 博客园

+

有点难,待会看

+

为什么要对基带信号进行脉冲成型【转载】 +- Riden - 博客园

+
+

为什么对基带信号要成形滤波?

+

基带信号带宽无限,需要限制带宽。成形滤波器也叫限带滤波器

+

实际中通信传输的信号大都是带通信号,也就是中心频带远大于频带宽度的信号。而这些带通信号的频谱结构只取决于等效低通信号的频谱结构。这里的等效低通信号就是你这里所指的基带数字信号。而基带数字信号的频率特性又取决于两个因素,一个是基带信号中构成每个脉冲符号的基本信号的频谱,另一个就是脉冲信号之间的相关性。换句话说可以通过设计不同的基本脉冲信号的波形和符号之间的相关性,达到改变基带信号频谱结构的目的,从而改变调制后带通信号的频谱特性。 +理解了这一点,你就可以理解为什么要对基带信号进行不同的滤波生成符号脉冲了。

+
+

基带传输与成形滤波_基带成型滤波器_长弓的坚持的博客-CSDN博客

+
+

为什么要->这里有直接结论:

+

(个人简单理解,脉冲成型(形),就是将脉冲变成其他的传输波形,理由就是压缩频谱来降低ISI) +!

+
+

简单概述:脉冲成形 +基带成形 (脉冲成型 基带成型) - 1024搜-程序员专属的搜索引擎

+
+

数字信号想要在信道中传输,必须在发射机的基带部分进行脉冲成形,将数字信号转换成脉冲信号,脉冲信号到达接收机后,在基带部分进行采样判决,将数字信号恢复出来。

+

如下图所示,脉冲成形需要用到脉冲波形,实现脉冲成形要用到基带滤波器,评估基带滤波器要用到眼图。【深入浅出通信原理-学习笔记】基带信号的发送和接收_脉冲怎么发送和接受_DUANDAUNNN的博客-CSDN博客

+
+]]>
+ + 电路 + +
C && C++ (1) /2021/09/03/C_C++/ @@ -272,117 +352,37 @@ struct ,but some place are different,for example:

t math - - -
#include<stdio.h>
#include<stdlib.h>

#define NUM 4
struct{
char name[40];
int num;
char sex;
char pro;
union d{
int score;
char course[10];
}sc;
} bodys[NUM];
int main(){
int i;
for(i=0;i<NUM;i++)
{
printf("Please input info:");
scanf("%s %d %c %c",&bodys[i].name,&bodys[i].num,&bodys[i].sex,&bodys[i].pro);
if (bodys[i].pro == 's'){
scanf("%d",&bodys[i].sc.score);
printf("\n%s\t%d\t%c\t%c\t%d",
bodys[i].name,bodys[i].num,bodys[i].sex,bodys[i].pro,bodys[i].sc.score);
}
else{
scanf("%s",&bodys[i].sc.course);
printf("\n%s\t%d\t%c\t%c\t%s",
bodys[i].name,bodys[i].num,bodys[i].sex,bodys[i].pro,bodys[i].sc.course);
}
}
return 0;
}
- -

Quote

-
    -
  • definition

    -

    give variables a another name after quoted ,the two variables are -equivalent when one of them changed ,the other will change

    -
    int i =5;
    int &j = i; //delcare j is a integer quote ,and initialize j with i
    -

    but j definited in following way is not allowed:

    -
    int i;
    int &j; //incorrect j is not linked some variables
    j = i;
  • -
  • quote and pointer

    -

    quote is another name for a variable ,but pointer is a tool pointing -to variable

    -
    #include<iostream>
    using namespace std;
    int main()
    {
    int i=15;
    int *iptr=&i; //define a pointer
    int &rptr = i; //define a quote
    cout<<"I is "<<i<<endl;
    cout<<"*iptr is "<<*iptr<<endl;
    cout<<"rptr is "<<rptr<<endl;
    i=29;
    cout<<"After changing i to 29:"<<endl;
    cout<<"i is "<<i<<endl;
    cout<<"*iptr is "<<*iptr<<endl;
    cout<<"rptr is "<<rptr<<endl;
    return 0;
    }
    -

    quote: No need & ,pointer : Need * -.

  • -
  • warn

    -
    int i,k;
    int &j =i;
    j =&k; //incorrect , delcare j is the quotation of k is not allowed
    -
    void &r = 10; 	//incorrect, void type is not allow 
    int &r = 10 ; //incorrect,can't assign quote "r" with value

    //can't quote array
    int a[4] = "amd";
    int &a[4] = a;


    //can't define quotation to quotation
    int n=3;
    int && r =n;
    int &*p = n;
  • -
  • used as parameters of function

    -
    #include<iostream>
    using namespace std;
    void swap(int &a,int &b)
    {
    int temp =a;
    a =b;
    b =temp;
    }
    int main(){
    int a=5,b=10;
    cout<<"a="<<a<<" "<<"b="<<b;
    swap(a,b);
    cout<<"a="<<a<<" "<<"b="<<b;
    return 0;
    }
    -

    quotation is used as formal parameter for function variable -transfer,but it seem that we have really passed a,b into the function -"swap"

    -
    #include<iostream>
    using namespace std;
    int a[] = {1,3,5,6,7,3};
    int &index(int);
    int main(){
    index(1)=100; //in fact ,because the return of funciton is not a number ,but a[i]
    cout<<"a[1]="<<a[1]<<endl;
    return 0;

    }
    int &index(int i){
    return a[i];
    }
  • -
-]]> - - coding - -
- - 通信原理笔记 - /2023/05/23/Communication%20principle/ - 通信原理理解性笔记

- -

信道

-
-

将发送端数字脉冲信号转换成模拟信号的过程称为调制(Modulation);将接收端模拟信号还原成数字脉冲信号的过程称为解调(Demodulation)。将调制和解调两种功能结合在一起的设备称为调制解调器(Modem)

-

模拟信号和数字信号之间可以相互转换:模拟信号一般通过PCM脉码调制(Pulse -Code -Modulation)方法量化为数字信号,即让模拟信号的不同幅度分别对应不同的二进制值,例如采用8位编码可将模拟信号量化为2^8=256个量级,实用中常采取24位或30位编码;数字信号一般通过对载波进行移相(Phase -Shift)的方法转换为模拟信号。

-

数字信道占用信道频带较宽。一路模拟电话的频带为4kHz带宽,一路数字电话约占64kHz,这是模拟通信目前仍有生命力的主要原因。

-
-

数字信道与模拟信道_模拟信道和数字信道_偷轮子的博客-CSDN博客

-

波形成型

-
-

从上图可以看出,相关时延大于符号持续时间,因此,当两个信号在接收侧相加时,来自于时延为的符号将会和来自于时延为的符号相加。

-

不同的符号相加,或者说,不同的符号相互干扰,即为符号间干扰(ISI)

-

一般将多径信号最大时延的倒数定义为多径信道的相关带宽。

-
-

频率选择性失真ISI一体两面,其中,频率选择性失真发生在频域,对应的时域结果ISI

-
-
-

衰落(2)-- -时延扩展,相关带宽,ISI - 知乎

-
-

脉冲整形

-

一、矩形脉冲

-

实际上矩形脉冲无失真传输是不可能的,因为由傅里叶变换可知,时域矩形脉冲,频域是sinc函数,带宽无限,而信道带宽总是有限的。 -失真严重导致采样判决出错,无法正确恢复数字信号。 -显然矩形脉冲信号不合适,sinc脉冲信号合适

-

二、sinc脉冲频谱有限,一个码元达到最大幅值时其他所有码元幅值刚好为零,码元之间不会相互影响,实现了无码间串扰。

-

基带滤波器

-

一般使用基带滤波器来实现脉冲整形

-

假设发送序列{1 1 1 -1 1 -1 -1 1} -发送序列、输入滤波器的冲激信号、每个冲激信号的冲激响应,和输出信号如图所示 -例子

-
-

基带信号的发送和接收的有效理解和掌握_滚降因子为0的系统可以算是理想低通系统吗_BIT小小书童的博客-CSDN博客

-
-

最初,信号是以矩形脉冲通过带限信道,必然会出现脉冲时延扩展引起S1,频域上看是Sa函数的旁瓣千扰。

-
-

简单概述:脉冲成形 -基带成形 (脉冲成型 基带成型) - HQU小西西 - 博客园

-

有点难,待会看

-

为什么要对基带信号进行脉冲成型【转载】 -- Riden - 博客园

-
-

为什么对基带信号要成形滤波?

-

基带信号带宽无限,需要限制带宽。成形滤波器也叫限带滤波器

-

实际中通信传输的信号大都是带通信号,也就是中心频带远大于频带宽度的信号。而这些带通信号的频谱结构只取决于等效低通信号的频谱结构。这里的等效低通信号就是你这里所指的基带数字信号。而基带数字信号的频率特性又取决于两个因素,一个是基带信号中构成每个脉冲符号的基本信号的频谱,另一个就是脉冲信号之间的相关性。换句话说可以通过设计不同的基本脉冲信号的波形和符号之间的相关性,达到改变基带信号频谱结构的目的,从而改变调制后带通信号的频谱特性。 -理解了这一点,你就可以理解为什么要对基带信号进行不同的滤波生成符号脉冲了。

-
-

基带传输与成形滤波_基带成型滤波器_长弓的坚持的博客-CSDN博客

-
-

为什么要->这里有直接结论:

-

(个人简单理解,脉冲成型(形),就是将脉冲变成其他的传输波形,理由就是压缩频谱来降低ISI) -!

-
-

简单概述:脉冲成形 -基带成形 (脉冲成型 基带成型) - 1024搜-程序员专属的搜索引擎

-
-

数字信号想要在信道中传输,必须在发射机的基带部分进行脉冲成形,将数字信号转换成脉冲信号,脉冲信号到达接收机后,在基带部分进行采样判决,将数字信号恢复出来。

-

如下图所示,脉冲成形需要用到脉冲波形,实现脉冲成形要用到基带滤波器,评估基带滤波器要用到眼图。【深入浅出通信原理-学习笔记】基带信号的发送和接收_脉冲怎么发送和接受_DUANDAUNNN的博客-CSDN博客

-
+ + +
#include<stdio.h>
#include<stdlib.h>

#define NUM 4
struct{
char name[40];
int num;
char sex;
char pro;
union d{
int score;
char course[10];
}sc;
} bodys[NUM];
int main(){
int i;
for(i=0;i<NUM;i++)
{
printf("Please input info:");
scanf("%s %d %c %c",&bodys[i].name,&bodys[i].num,&bodys[i].sex,&bodys[i].pro);
if (bodys[i].pro == 's'){
scanf("%d",&bodys[i].sc.score);
printf("\n%s\t%d\t%c\t%c\t%d",
bodys[i].name,bodys[i].num,bodys[i].sex,bodys[i].pro,bodys[i].sc.score);
}
else{
scanf("%s",&bodys[i].sc.course);
printf("\n%s\t%d\t%c\t%c\t%s",
bodys[i].name,bodys[i].num,bodys[i].sex,bodys[i].pro,bodys[i].sc.course);
}
}
return 0;
}
+ +

Quote

+
    +
  • definition

    +

    give variables a another name after quoted ,the two variables are +equivalent when one of them changed ,the other will change

    +
    int i =5;
    int &j = i; //delcare j is a integer quote ,and initialize j with i
    +

    but j definited in following way is not allowed:

    +
    int i;
    int &j; //incorrect j is not linked some variables
    j = i;
  • +
  • quote and pointer

    +

    quote is another name for a variable ,but pointer is a tool pointing +to variable

    +
    #include<iostream>
    using namespace std;
    int main()
    {
    int i=15;
    int *iptr=&i; //define a pointer
    int &rptr = i; //define a quote
    cout<<"I is "<<i<<endl;
    cout<<"*iptr is "<<*iptr<<endl;
    cout<<"rptr is "<<rptr<<endl;
    i=29;
    cout<<"After changing i to 29:"<<endl;
    cout<<"i is "<<i<<endl;
    cout<<"*iptr is "<<*iptr<<endl;
    cout<<"rptr is "<<rptr<<endl;
    return 0;
    }
    +

    quote: No need & ,pointer : Need * +.

  • +
  • warn

    +
    int i,k;
    int &j =i;
    j =&k; //incorrect , delcare j is the quotation of k is not allowed
    +
    void &r = 10; 	//incorrect, void type is not allow 
    int &r = 10 ; //incorrect,can't assign quote "r" with value

    //can't quote array
    int a[4] = "amd";
    int &a[4] = a;


    //can't define quotation to quotation
    int n=3;
    int && r =n;
    int &*p = n;
  • +
  • used as parameters of function

    +
    #include<iostream>
    using namespace std;
    void swap(int &a,int &b)
    {
    int temp =a;
    a =b;
    b =temp;
    }
    int main(){
    int a=5,b=10;
    cout<<"a="<<a<<" "<<"b="<<b;
    swap(a,b);
    cout<<"a="<<a<<" "<<"b="<<b;
    return 0;
    }
    +

    quotation is used as formal parameter for function variable +transfer,but it seem that we have really passed a,b into the function +"swap"

    +
    #include<iostream>
    using namespace std;
    int a[] = {1,3,5,6,7,3};
    int &index(int);
    int main(){
    index(1)=100; //in fact ,because the return of funciton is not a number ,but a[i]
    cout<<"a[1]="<<a[1]<<endl;
    return 0;

    }
    int &index(int i){
    return a[i];
    }
  • +
]]>
- 电路 + coding
@@ -1048,57 +1048,6 @@ src="https://picturnl.oss-cn-shanghai.aliyuncs.com/20230613160326.png" />

生活
- - Python 机器学习 - /2022/01/19/Python%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB/ - 下面是本人总结的Python机器学习-图像处理的步骤

- -

环境配置(垃圾分类项目)

-

项目使用树莓派4B,具体流程如下

-
    -
  • 下载win32_disk_imager,烧录镜像,在BOOT分区下建立文件名为SSH的文件,无后缀
  • -
  • 下载PUTTY(记得将后缀it删除)和VNC
  • -
  • 或者使用xshellxftp操作
  • -
  • 使用SSH连接树莓派,树莓派自带Python3和Python2,使用pip配置环境
  • -
-
    -
  1. 修改deb镜像源
  2. -
-
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
-

修改树莓派pip源。请记住,/etc/pip.conf,里面默认是

-
[global]
extra-index-url=https://www.piwheels.org/simple
-

请不要修改,这个网址专为树莓定制

-

pip永久换源(win和linux通用)

-
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
-

linux里面的永久源的地址为/home/pi/.config/pip/pip.conf,需要修改可以直接编辑

-

也可以这样换源

-
mkdir ~/.pip
vim ~/.pip/pip.conf
-
[global]
timeout=100
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url= http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=
pypi.tuna.tsinghua.edu.cn
mirrors.aliyun.com
-

这里的trusted-host只有当链接不是https时需要,即将阿里云的网站改为

-
extra-index-url= https://mirrors.aliyun.com/pypi/simple
-

ubuntu配置opencv

-
    -
  • 网上所有的教程都无法直接成功,所以,个人的踩坑经历
  • -
  • 首先去opencv-python下载对应Python版本的opencv
  • -
  • 然后移入树莓派中,使用pip3 install ...whl即可成功
  • -
  • 很多的包都有这个特点,所以,要注意这个点,当自己的树莓派无法安装时,可以考虑这个专门为树莓派做的网站
  • -
-

安装多线程工具axel

-
apt-get install axel
-

下载方式

-
axel 参数 文件下载地址
常用可选参数:
-s 设置最大下载速度,如果限制到512KB/s,则填写512000
-n 指定连接数
-o 指定另存为目录,或者指定的目录+文件名
-H 指定header
-U 指定useragent
-q 静默模式
-a 更改默认进度条样式

eg:
axel -n 30 http://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.15.2_x86_64.tar.gz
-]]>
- - coding - -
Qt /2021/09/20/Qt1/ @@ -1151,6 +1100,57 @@ href="https://www.piwheels.org/project/opencv-python/">opencv-python下载
  • 问:指针调用和对象调用为什么会出现不一样的结果?
  • 答:
  • +]]> + + coding + +
    + + Python 机器学习 + /2022/01/19/Python%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB/ + 下面是本人总结的Python机器学习-图像处理的步骤

    + +

    环境配置(垃圾分类项目)

    +

    项目使用树莓派4B,具体流程如下

    +
      +
    • 下载win32_disk_imager,烧录镜像,在BOOT分区下建立文件名为SSH的文件,无后缀
    • +
    • 下载PUTTY(记得将后缀it删除)和VNC
    • +
    • 或者使用xshellxftp操作
    • +
    • 使用SSH连接树莓派,树莓派自带Python3和Python2,使用pip配置环境
    • +
    +
      +
    1. 修改deb镜像源
    2. +
    +
    deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
    deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
    +

    修改树莓派pip源。请记住,/etc/pip.conf,里面默认是

    +
    [global]
    extra-index-url=https://www.piwheels.org/simple
    +

    请不要修改,这个网址专为树莓定制

    +

    pip永久换源(win和linux通用)

    +
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    +

    linux里面的永久源的地址为/home/pi/.config/pip/pip.conf,需要修改可以直接编辑

    +

    也可以这样换源

    +
    mkdir ~/.pip
    vim ~/.pip/pip.conf
    +
    [global]
    timeout=100
    index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
    extra-index-url= http://mirrors.aliyun.com/pypi/simple/
    [install]
    trusted-host=
    pypi.tuna.tsinghua.edu.cn
    mirrors.aliyun.com
    +

    这里的trusted-host只有当链接不是https时需要,即将阿里云的网站改为

    +
    extra-index-url= https://mirrors.aliyun.com/pypi/simple
    +

    ubuntu配置opencv

    +
      +
    • 网上所有的教程都无法直接成功,所以,个人的踩坑经历
    • +
    • 首先去opencv-python下载对应Python版本的opencv
    • +
    • 然后移入树莓派中,使用pip3 install ...whl即可成功
    • +
    • 很多的包都有这个特点,所以,要注意这个点,当自己的树莓派无法安装时,可以考虑这个专门为树莓派做的网站
    • +
    +

    安装多线程工具axel

    +
    apt-get install axel
    +

    下载方式

    +
    axel 参数 文件下载地址
    常用可选参数:
    -s 设置最大下载速度,如果限制到512KB/s,则填写512000
    -n 指定连接数
    -o 指定另存为目录,或者指定的目录+文件名
    -H 指定header
    -U 指定useragent
    -q 静默模式
    -a 更改默认进度条样式

    eg:
    axel -n 30 http://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.15.2_x86_64.tar.gz
    ]]>
    coding @@ -1274,6 +1274,16 @@ href="https://pypi.org/project/torch/1.8.0/#modal-close">torch-wheel下载 Code
    + + 学业生涯规划指导经验交流贴 + /2023/10/31/Study%20exchange%20meeting/ + 欢迎交流

    + +]]>
    + + 学习 + +
    DSP /2022/03/14/Signals%20and%20Systems/ @@ -1307,16 +1317,6 @@ href="https://pypi.org/project/torch/1.8.0/#modal-close">torch-wheel下载 电子 - - 学业生涯规划指导经验交流贴 - /2023/10/31/Study%20exchange%20meeting/ - 欢迎交流

    - -]]>
    - - 学习 - -
    出租车载客模型 /2021/08/15/Taxi%20passenger%20model/ @@ -2658,6 +2658,58 @@ Explainer

    Swin Transformer迎来30亿参数的v2.0,我们应该拥抱视觉大模型吗?.

    +]]> + + Code + +
    + + ISAC + /2023/07/06/%E9%80%9A%E4%BF%A1%E6%84%9F%E7%9F%A5%E4%B8%80%E4%BD%93%E5%8C%96/ + 移动通信重点总结

    +

    通感一体化

    + +

    什么是通感一体化(ISAC)

    +

    通信感知一体化——从概念到实践 +- 华为

    +

    天线振子_百度百科

    +

    (35条消息) +3GPP信道模型路损基础知识_3gpp常用信道模型_LinkEverything的博客-CSDN博客

    +
    +

    即非正交多址接入(NOMA)。在正交多址技术(OMA)中,只能为一个用户分配单一的无线资源,例如按频率分割或按时间分割,而NOMA方式可将一个资源分配给多个用户。在某些场景中,比如远近效应场景和广覆盖多节点接入的场景,特别是上行密集场景,采用功率复用的非正交接入多址方式较传统的正交接入有明显的性能优势,更适合未来系统的部署。目前已经有研究验证了在城市地区采用NOMA的效果,并已证实,采用该方法可使无线接入宏蜂窝的总吞吐量提高50%左右。非正交多址复用通过结合串行干扰消除或类最大似然解调才能取得容量极限,因此技术实现的难点在于是否能设计出低复杂度且有效的接收机算法。

    +

    NOMA不同于传统的正交传输,在发送端采用非正交发送,主动引入干扰信息,在接收端通过串行干扰删除技术实现正确解调。与正交传输相比,接收机复杂度有所提升,但可以获得更高的频谱效率。非正交传输的基本思想是利用复杂的接收机设计来换取更高的频谱效率,随着芯片处理能力的增强,将使非正交传输技术在实际系统中的应用成为可能。

    +
    +

    (35条消息) +5G:非正交多址接入(NOMA)与串行干扰删除(SIC)_串行干扰消除_sswzw_cll的博客-CSDN博客.

    +

    NOMA:

    +
    +

    1、串行干扰删除(SIC)

    +

    2、功率复用

    +
    +

    (35条消息) +5G:非正交多址接入(NOMA)与串行干扰删除(SIC)_串行干扰消除_sswzw_cll的博客-CSDN博客.

    +
    +

    对于LTE架构来说,网元包含的很多,其中,基站也是其中的一个网元,除此外还有MME、SGW、PDN等等。基站就是一个网元,基站和网元的关系类似苹果和水果的关系。网元划分的粒度很多,看用途了,有物理网元,逻辑网元,等效网元数等

    +
    +

    网元_百度百科.

    +

    感知与通信从松耦合到完全一体化可分为三个等级:

    +
      +
    1. 通信与感知共享硬件和频谱
    2. +
    3. 实现波形和信号处理一体化
    4. +
    5. 信息可以跨层、跨模块、跨节点 +共享,通信与感知完全一体化,系统性能显著提升,网络系统 +的总体成本和能耗将大大减少、系统规模也更小,基站与用户 设备(User +Equipment,UE)之间更大规模的协同、通信感 +知波形联合设计、先进的干扰消除技术、原生AI 技术等其他技 +术创新还可以进一步提升感知数据的处理能力。
    6. +
    +

    ISAC的作用:在增强定位能力和毫米级

    ]]>
    Code @@ -2717,58 +2769,6 @@ src="https://picturnl.oss-cn-shanghai.aliyuncs.com/image-20220103223731093.png" 思想觉悟
    - - ISAC - /2023/07/06/%E9%80%9A%E4%BF%A1%E6%84%9F%E7%9F%A5%E4%B8%80%E4%BD%93%E5%8C%96/ - 移动通信重点总结

    -

    通感一体化

    - -

    什么是通感一体化(ISAC)

    -

    通信感知一体化——从概念到实践 -- 华为

    -

    天线振子_百度百科

    -

    (35条消息) -3GPP信道模型路损基础知识_3gpp常用信道模型_LinkEverything的博客-CSDN博客

    -
    -

    即非正交多址接入(NOMA)。在正交多址技术(OMA)中,只能为一个用户分配单一的无线资源,例如按频率分割或按时间分割,而NOMA方式可将一个资源分配给多个用户。在某些场景中,比如远近效应场景和广覆盖多节点接入的场景,特别是上行密集场景,采用功率复用的非正交接入多址方式较传统的正交接入有明显的性能优势,更适合未来系统的部署。目前已经有研究验证了在城市地区采用NOMA的效果,并已证实,采用该方法可使无线接入宏蜂窝的总吞吐量提高50%左右。非正交多址复用通过结合串行干扰消除或类最大似然解调才能取得容量极限,因此技术实现的难点在于是否能设计出低复杂度且有效的接收机算法。

    -

    NOMA不同于传统的正交传输,在发送端采用非正交发送,主动引入干扰信息,在接收端通过串行干扰删除技术实现正确解调。与正交传输相比,接收机复杂度有所提升,但可以获得更高的频谱效率。非正交传输的基本思想是利用复杂的接收机设计来换取更高的频谱效率,随着芯片处理能力的增强,将使非正交传输技术在实际系统中的应用成为可能。

    -
    -

    (35条消息) -5G:非正交多址接入(NOMA)与串行干扰删除(SIC)_串行干扰消除_sswzw_cll的博客-CSDN博客.

    -

    NOMA:

    -
    -

    1、串行干扰删除(SIC)

    -

    2、功率复用

    -
    -

    (35条消息) -5G:非正交多址接入(NOMA)与串行干扰删除(SIC)_串行干扰消除_sswzw_cll的博客-CSDN博客.

    -
    -

    对于LTE架构来说,网元包含的很多,其中,基站也是其中的一个网元,除此外还有MME、SGW、PDN等等。基站就是一个网元,基站和网元的关系类似苹果和水果的关系。网元划分的粒度很多,看用途了,有物理网元,逻辑网元,等效网元数等

    -
    -

    网元_百度百科.

    -

    感知与通信从松耦合到完全一体化可分为三个等级:

    -
      -
    1. 通信与感知共享硬件和频谱
    2. -
    3. 实现波形和信号处理一体化
    4. -
    5. 信息可以跨层、跨模块、跨节点 -共享,通信与感知完全一体化,系统性能显著提升,网络系统 -的总体成本和能耗将大大减少、系统规模也更小,基站与用户 设备(User -Equipment,UE)之间更大规模的协同、通信感 -知波形联合设计、先进的干扰消除技术、原生AI 技术等其他技 -术创新还可以进一步提升感知数据的处理能力。
    6. -
    -

    ISAC的作用:在增强定位能力和毫米级

    -]]>
    - - Code - -
    移动通信重点总结 /2023/06/09/mobile%20commuciation/