大家好。今天我做了个10周期的70KHz的hanning窗调制信号。时域波形我画出来了。但是做傅立叶变换时得到的频谱图却有两个频率成分。且都不是70KHz的中心频率。程序如下: >> t=0:0.0000001:0.00015; >> fc=70000; >> n=10; >> y=0.5*(1-cos(2*pi*fc*t/n)).*sin(2*pi*fc*t); >> subplot(211); >> plot(t,y); >> axis([0 0.00015 -1 1 ]); >> grid; >> x=fft(y); >> x=fftshift(x); >> subplot(212); >> plot(abs(x)); 其中fc是设置中心频率。n是信号的单音频周期数。其实y信号就是一个hanning窗信号和一个正弦信号的乘积。得出的信号如图所示。 ![]() 做频谱分析本该得到如下的图 ![]() 但是我却得到了下面的两个频带。。 ![]() 请问各位高手是怎么回事呢?我是才接触MATLAB.不太懂。请各位高手帮我解决下。 |
34 条回复
多谢songzy41的帮助,,问题是解决了。。但是出于学以致用的考虑,我还是想具体弄明白。这一段: N=8192; df=fs/N; n=1:N; n2=1:N/2+1; ff=(n2-1)*df; x=fft(y,N); %x=fftshift(x); subplot(212); plot(ff,abs(x(n2))); 中,N长度怎么取?我看很多例子N=128啊什么的。还有,n=1:N是什么?因为之前已经定义了一个n。 还有关键的ff=(0:N/2)*fs/N是什么意思?为什么后面的不是整个abs(x)的长度,而是x(n2)呢? 我是才接触Matlab这方面的哈。虽然很多例子都是这么用的,但是就是没解释明白,不知道为什么这样用。希望能帮我解释清楚下,这样以后才能用得明白。谢谢了哈。。。 |
呵呵。。。很详细很明白啊。。豁然开朗。学到不少。。终于知道是怎么回事了。。。。。太谢谢你啦。。。:handshake :) |
:o:ojiangdehao |
songzy41 发表于 2009-7-30 14:31 您好,我冒昧问一句,LZ的采样频率是1e7是怎么看出来的,我初学,望您指教。还有信号长度为1501个点和N是8192怎么得出来的,我思考了很久,没想出来,望赐教。 |
1092834076 发表于 2020-5-12 13:28 1,采样频率1e7不是看出来的。请看第1层LZ的第1条语句: >> t=0:0.0000001:0.00015; 其中包含了dt=0.0000001,而fs=1/dt=1e7,就是这样计算出来的。 2,同样语句t=0:0.0000001:0.00015;,给出 t为1501个战马,所以信号长度只有1501个点。 3,在第4层就用1501个点做FFT,得到的图中可没有看到峰值,这为什么,因为峰值在两个点之间,说明频域分辨率太低。在已知有限长数据时要增加频率分辨率最简单的方法是在做FFT时,数据后面补零: x=fft(y,N); 这N是大于1501,可以2048、4096、8192、16384等等,或其他大于1501的数值。x=fft(y,N);这语句表示数据长1501(数据序列y的长度)后补了N-1501个0值,然后把这个补了0值的数据序列进行FFT变换。 首先是要提高频域分辨率序列做FFT必须要补0;又我选择8192完全是巧合。 |
songzy41 发表于 2020-5-12 15:35 谢谢详细解答,我还有个问题没搞明白,周期10的话反应在图上的话,体现在哪里。 |
1092834076 发表于 2020-5-13 10:03 原LZ的问题中并没有说信号的周期为10,而是说用10个周期的正弦信号,见第1层原文: 今天我做了个10周期的70KHz的hanning窗调制信号。 老实说,LZ也没有严格的10周期的70KHz的信号,而是10个周期多一些。我们来看一下LZ的信号是: >> t=0:0.0000001:0.00015; >> fc=70000; >> n=10; >> y=0.5*(1-cos(2*pi*fc*t/n)).*sin(2*pi*fc*t); 信号由两部分组成:70KHz的正弦信号为sin(2*pi*fc*t);hanning窗调制信号0.5*(1-cos(2*pi*fc*t/n)) 而 t=0:0.0000001:0.00015。这信号两部分的波形图下图所示,可以看出正弦信号有10.5个周期。 |
songzy41 发表于 2020-5-13 15:40 谢谢解答 |
songzy41 发表于 2020-5-12 15:35 您好,请问一下,当fc的值变大之后,比如说取100khz,为什么频谱图会出现多个峰值,怎么才能出现位移峰值,谢谢啦。 |
程序
频谱图
2018030066 发表于 2020-10-15 00:47 在12层中的信号: y=0.5*(1-cos(2*pi*fc*t/n)).*sin(2*pi*fc*t); 由两部分组成:70KHz的正弦信号为sin(2*pi*fc*t);调制信号0.5*(1-cos(2*pi*fc*t/n)),而调制信号在t=0:0.0000001:0.00015的区间中正好接近于hanning窗,所以有以上的讨论。现在你提出的情况发生了变化,fc=100kHz,此时调制信号0.5*(1-cos(2*pi*fc*t/n))再也构不成hanning窗了,而是一个典型的余弦型幅值调制信号,所以它的频谱也是幅值调制信号的频谱,所以你给出的频谱图就是幅值调制信号的频谱。 |
songzy41 发表于 2020-10-16 11:11 感谢您的耐心解答 |
songzy41 发表于 2020-10-16 11:11 您好我是初学者我想问下这个函数 s=1000; n=20; f=240000; x=0:(n/(f*s)):(n/f); for i=1:length(x) y(i)=sin(2*pi*f*x(i))*(0.5-0.5*cos(2*pi*f*x(i)/n)); end x=x'; y=y'; x(:,2)=y; xlswrite('1.xls',x); 是老师给我的资料 我想问下如果我想改变频率 其它参数应该如何变化呢 |
锤爆你羊头 发表于 2021-12-27 20:20 你的信号两部分分别为 y1=sin(2*pi*f*x); y2=(0.5-0.5*cos(2*pi*f*x/n)); 而 y=y1.*y2; 你可以仔细分析一下,可以发现y1和y2都是和f无关,所以你不管是f增大或减小,y1和y2,以及y都没有变化。 所以你可以改变频,其他什么也不要变,得到一样的结果 |
songzy41 发表于 2021-12-28 18:23 谢谢宋老师解答 还想问下那只是改变频率就好了吗 比如我想换成300khz的信号是否只需要将f改为300000,s和n老师给的资料是信号采样点数和信号调制周期数,请问宋老师这两个需要更改吗,这两个参数和信号频率f又有怎样的关系呢 |
锤爆你羊头 发表于 2022-5-7 19:59 你好,笫一层的窗函数设置得并不是很好。我认为你要用 于300khz没有问题,只要采样频率满足采样定理,例如用1e7Hz。vduo金字塔看i哦没他咋啦一下。设数据长度为M, m=0:M-1; x=m/fs; y1=sin(2*pi*f*x); y2=(0.5-0.5*cos(2*pi*m/M)); |
songzy41 发表于 2022-5-10 20:57 好的谢谢宋老师 我用的采样频率就是10MHZ,请问是可以用于大多数频率吗 比如后续还想用150KHZ进行仿真,按照您的建议我修改了一下麻烦您再帮我看看有没有理解对,这个数据长度M应该就是之前的采样点数s吧,但是好像信号调制周期数n这个参数不知道放在哪 M=1000; f=240000; m=0:M-1;; x=m/fs; for i=1:length(x) y1=sin(2*pi*f*x); y2=(0.5-0.5*cos(2*pi*m/M)); end x=x'; y=y'; x(:,2)=y; xlswrite('1.xls',x); |
锤爆你羊头 发表于 2022-5-11 10:07 看来你对于MATLAB还是不很熟悉,例如 for i=1:length(x) y1=sin(2*pi*f*x); y2=(0.5-0.5*cos(2*pi*m/M)); end 求y1和y2完全不要用for-end循环来完成,程序中还缺计算y。你需要信号调制周期数n,而且我们知道在相同采样频率下,不同的信号频率,n个周期的长度各不相同。我现编程序如下: f=240000; fs=1e7; Ts=ceil(fs/f); n=10; M=Ts*n; m=0:M-1; x=m/fs; %for i=1:length(x) y1=sin(2*pi*f*x); y2=(0.5-0.5*cos(2*pi*m/M)); %end y=y1.*y2; subplot 311; plot(x,y1) subplot 312; plot(x,y2) subplot 313; plot(x,y) x=x'; y=y'; x(:,2)=y; xlswrite('1.xls',x); |
songzy41 发表于 2022-5-11 20:17 是的老师我确实对matlab不熟悉 没人指导很难理解代码里的一些含义 谢谢老师指导 我再下去理解下您编的程序 如果后面对某个地方不懂还想请教您 希望您能解答 麻烦您了 |
锤爆你羊头 发表于 2022-5-13 10:04 老师请问第三行是cell语句吗 subplot那里是否应该写成subplot(3,1,3)呢 最后还想请问您这个程序如果想换其它频率是不是只需要更改f的值 我看您在里面用到了fs=1e7我理解的应该是采样频率但是这个我在仿真软件里面也有设置请问是否会重复呢 感谢老师在百忙之中解答我的问题 |
songzy41 发表于 2022-5-11 20:17 老师请问第三行是cell语句吗 subplot那里是否应该写成subplot(3,1,1)呢 最后还想请问您这个程序如果想换其它频率是不是只需要更改f的值 我看您在里面用到了fs=1e7我理解的应该是采样频率但是这个我在仿真软件里面也有设置请问是否会重复呢 感谢老师在百忙之中解答我的问题 |
Powered by Discuz! X3.4
© 2001-2022