在matlab中怎样用快速傅里叶变换求相位图 例如y=[1.8,2,2.2,3.2,3.5,3.7] 求程序
1个回答
展开全部
y=[1.8 2 2.2 3.2 3.5 3.7]
y1=fft(y)
结果:
y =
1.8000 2.0000 2.2000 3.2000 3.5000 3.7000
y1 =16.4000 -1.4000 + 2.5981i -0.7000 + 0.3464i -1.4000 -0.7000 - 0.3464i -1.4000 - 2.5981i
y1=fft(y)
结果:
y =
1.8000 2.0000 2.2000 3.2000 3.5000 3.7000
y1 =16.4000 -1.4000 + 2.5981i -0.7000 + 0.3464i -1.4000 -0.7000 - 0.3464i -1.4000 - 2.5981i
更多追问追答
追问
这个没有采样频率可以这么用吗,那相位图要每个值的角度绘出的吗,相位图应该是横坐标是频率纵坐标是角度吧,不太理解,您能帮忙解答吗,谢谢
追答
你知道经过傅里叶变换原来的空间域转到频域上了吧?
频域的概念是有实部有虚部的是吧,那你怎么能在平面上表示出来呢?
就用到了复数里的几个概念:
一个是虚部实部的平方和均值(sqrt( RRfdp1.^2+IIfdp1.^2);)
在一个就是夹角问题(b=angle(fftI);)
这个知识高数都有,我就不用说了吧?
关于显示的问题,给你一段程序参考。
>> fftI=fft2(I); % 获取2维离散傅里叶变化后的图像,保存到fftI
>> sfftI=fftshift(fftI); % 将傅里叶变化的中心移到图像中心,保存到sfftI
>> RRfdp1=real(sfftI); % 取实部
>> IIfdp1=imag(sfftI); % 取虚部
>> a=sqrt( RRfdp1.^2+IIfdp1.^2); % 取模,即实部于虚部的平方和再开方
>> a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225; % 灰度拉升,将变换后的图像拉升到0~255区间
>> figure(2) % 创建一个视图,取名2
>> imshow(real(a)); % 将图像a只取实部(如果是虚数的话),并显示在视图2中
>> b=angle(fftI); % 取虚数fftI的弧度
>> figure(3) % 创建一个视图,取名3
>> imshow(real(b)); % 将图像b只取实部(如果是虚数的话),并显示在视图3中
>> theta=30; % 角度常量
>> RR1=a*cos(theta); % RR1 = a*cos(30),注意,这里可能有错误,30度角没有转到弧度,本意可能是cos(theta/180*pi);
>> II1=a*sin(theta); % II1 = a*sin(30),注意,这里可能有错误,30度角没有转到弧度,本意可能是sin(theta/180*pi);
>> fftI1=RR1+i.*II1; % 得到的实部RR1和虚部II1组合成虚数fftI1
>> C=ifft2(fftI1)*255; % 2维傅里叶反变化后*255保存到C
>> figure(4) % 创建一个视图,取名4
>> imshow(real(C)); % 将图像C只取实部(如果是虚数的话),并显示在视图4中
>> MM=150; % 常量
>> RR2=MM*cos(angle(fftI)); % 常量*cos(虚数fftI的弧度)
>> II2=MM*sin(angle(fftI)); % 常量*sin(虚数fftI的弧度)
>> fftI2=RR2+i.*II2; % 得到新的虚数fftI2
>> D=ifft2(fftI2); % 2维傅里叶反变化
>> figure(5) % 创建一个视图,取名5
>> imshow(real(D)); % 将图像D只取实部(如果是虚数的话),并显示在视图5中
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询