
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测量方波相位差的程序如何编写真的很急!拜托了!、相位和初相如何计算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)