matlab 怎么实现相位响应

matlab 怎么实现相位响应,第1张

Fs=80000,n=30;

wp=[9000 11000]2/Fs; %滤波器的通带频率

ws=[8000 12000]2/Fs; %滤波器的过渡带

f=[0 ws(1) wp(1) wp(2) ws(2) 1];

c=[0 0 1 1 0 0];

b=remez(n,f,c);

freqz(b,1,512,2);

这个简单,把两个方波进行异或,用430单片机的定时器A测量异或后的方波的脉冲宽度,在对测量数据进行简单的计算就可得到相位差。。。具体程序如下:

P1SEL

|=

BIT2;

//设置P12端口为功能模块使用

TACTL

|=TACLR;

TACTL

=

TASSEL_2+TAIE+MC1;

//定时器A时钟信号选择SMCLK

8M,清计数寄存器,使能中断,同时设置定时器A计数模式为连续增计模式

CCTL1

=CM0+SCS+CAP+CCIE;

//输入上升沿捕获,同步,capture模式

CCI0A为捕获信号源,中断使能

//TACCTL1

&=~CCIFG;

//清CCR2

的标志位

//中断允许

_EINT();

LPM0;

}

#pragma

vector=TIMERA1_VECTOR

//定时器A中断处理

__interrupt

void

timer_a(void)

{

switch(TAIV)

//向量查询

{

case

2:

//捕获中断

if(CCTL1&CM0)

//上升沿

{

CCTL1=(CCTL1&(~CM0))|CM1;

//更变设置为下降沿触发

start=TACCR1;

//记录初始时间

overflow=0;

//溢出计数变量复位

}

else

if(CCTL1&CM1)

//下降沿

{

CCTL1=(CCTL1&(~CM1))|CM0;

//更变设置为上升沿触发

end=TACCR1;

//用start,end,overflow计算脉冲宽度

TACTL

&=~TAIE;

//不使能中断

CCTL1

&=~CCIE;

P1SEL

&=~BIT2;

_DINT();

LPM0_EXIT;

}

break;

case

10:

//定时器溢出中断

overflow++;

break;

//溢出计数加1

default:break;

}

}

然后再对得到的start,end,overflow处理计算即可。。。

1、利用正弦电压表达式

u(t)

=

Um sin

(ωt

+θ)可以看出:反映正弦量的初始值(

t

=

0

时)为:

u(0)

=

Uₘsinθ;

这里代入所知数值,即可求出θ,而θ反映了正弦电压初始值的大小,即为初相位,

简称初相。

2、初相位是指正弦量在t=0时的相位,也称初相角或初相,其单位可用弧度(rad)或度(°)表示。初相反映了交流电交变的起点,与时间起点的选择有关。

初相可以是正角,也可以是负角。若t=0时正弦量的瞬时值为正值,则其初相为正角;若t=0时正弦量的瞬时值为负值,则其初相为负角。

扩展资料:

性质:

初相θ和相位(ωt

+θ)用弧度作单位,工程上常用度作单位。在正弦交流电路中,经常遇到同频率的正弦量,它们只在幅值及初相上有所区别。右图所示的两个正弦电压,其频率相同,幅值、初相不同,分别表示为:

(1)u₁(t)

=

U₁ₘsin(ωt

+θ₁)

(2)u₂(t)

=

U₂ₘ sin(ωt

+θ₂)

初相不同,表明它们随时间变化的步调不一致。比如,它们不能同时达到各自的正最大值或零。图中θ₁>θ₂,u₁比u₂ 先达到正的最大值,u₁比u₂相位超前一个(θ₁-

θ₂)角,或称u₂比u1滞后一个(θ₁-

θ₂)角。

参考资料来源:百度百科-初相位

y=[18 2 22 32 35 37]

y1=fft(y)

结果:

y =

18000 20000 22000 32000 35000 37000

y1 =164000 -14000 + 25981i -07000 + 03464i -14000 -07000 - 03464i -14000 - 25981i

我自己做了一个程序,和你想象的不一样,

首先用函数产生一个序列f[n],然后调用FFT:

void __stdcall FFT(

long N, // Serial Length, N > 0 for DFT, N < 0 for iDFT - inversed Discrete Fourier Transform

double  inputReal, double  inputImaginary, // inputs

double  AmplitudeFrequences, double  PhaseFrequences) // outputs

比如 FFT(n, &input, 0, &FA, &FP)

然后用printf把f[n],FA[n]和FP[n]打印出来,生成一个文本文件,这个文件可以直接粘到EXCEL里面去,然后用EXCEL生成图表就一目了然了,非常清楚精准

另一种方法更直接,就是我把FFT做成了一个动态链接库wfftdll,然后你打开EXCEL,在第一列产生一个自动生成的函数值,比如cos(2piw) + cos(16pi w),然后用宏调用我这个动态链接库,就在另外两列自动生成了幅频和相频数列,选择这两个序列就可以自动生成曲线和图表了

需要的话我可以把我做的样例FFT/EXCEL发给你

例如:

清屏

clc;

clear;

x= ; %x为输入信号序列

X=fft(x); %

N=length(X);

X=X/N; %DFT后的幅度,此为复数,包含幅度值和相位

f=(0:N-1)/N; %归一化频率轴

H=10log10(abs(X)); %幅度 。单位dB

P=angle(X); %相位

figure()

subplot(2,1,1)

plot(f,H);

title('幅度/频率特性曲线');

subplot(2,1,2)

plot(f,P);

title('相位/频率特性曲线);

%%%%%%%%%%%%%%

%%%%% 如果要求峰值点处的相位,可以做如下 *** 作

X_max=max(abs(X)) ; %找出最大峰值的数值

flag=find(abs(X)==X_max); %找出最大值所在序列中的下标

h=angle(X(flag)); %按着下标求出对应的相位

以上就是关于matlab 怎么实现相位响应全部的内容,包括:matlab 怎么实现相位响应、msp430单片机用定时器A测量方波相位差的程序如何编写真的很急!拜托了!、相位和初相如何计算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9521892.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存