如何编写MATLAB程序才能实现对

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关闭文件用fclose函数,调用格式为:sta=fclose(fid)说明:该函数关闭fid所表示的文件。其调用格式为:[A,COUNT]=fscanf(fid,format,size)说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。

matlab fprintf.数据的格式化输出:fprintf(fid, format, variables)fprintf(fid,format,A)说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。>> fid=fopen(""d:\char1.txt"",""w"");>> fid1=fopen(""d:\char1.txt"",""rt"");matlab读txt文件fid=fopen(""fx.txt"",""r"");%得到文件号[f,count]=fscanf(fid,""%f %f"",[12,90]);%把文件号1的数据读到f中。

matlab函数fgetl和fgets:按行读取格式文本函数Matlab提供了两个函数fgetl和fgets来从格式文本文件读取行,并存储到字符串向量中。这两个函数集几乎相同;不同之处是,fgets拷贝新行字符到字符向量,而fgetl则不。下面的M-file函数说明了fgetl的一个可能用法。此函数使用fgetl一次读取一整行。while f eof(fid) == 0 tline = fgetl(fid);

%用Fourier变换求取信号的功率谱---周期图法

clf;

Fs=1000;

N=256;Nfft=256;%数据的长度和FFT所用的数据长度

n=0:N-1;t=n/Fs;%采用的时间序列

xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);

Pxx=10*log10(abs(fft(xn,Nfft).^2)/N);%Fourier振幅谱平方的平均值,并转化为dB

f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列

subplot(2,1,1),plot(f,Pxx);%绘制功率谱曲线

xlabel('频率/Hz');ylabel('功率谱/dB');

title('周期图N=256');grid on;

Fs=1000;

N=1024;Nfft=1024;%数据的长度和FFT所用的数据长度

n=0:N-1;t=n/Fs;%采用的时间序列

xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);

Pxx=10*log10(abs(fft(xn,Nfft).^2)/N);%Fourier振幅谱平方的平均值,并转化为dB

f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列

subplot(2,1,2),plot(f,Pxx);%绘制功率谱曲线

xlabel('频率/Hz');ylabel('功率谱/dB');

title('周期图N=256');grid on;

%用Fourier变换求取信号的功率谱---分段周期图法

%思想:把信号分为重叠或不重叠的小段,对每小段信号序列进行功率谱估计,然后取平均值作为整个序列的功率谱

clf;

Fs=1000;

N=1024;Nsec=256;%数据的长度和FFT所用的数据长度

n=0:N-1;t=n/Fs;%采用的时间序列

randn('state',0);

xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);

Pxx1=abs(fft(xn(1:256),Nsec).^2)/Nsec; %第一段功率谱

Pxx2=abs(fft(xn(257:512),Nsec).^2)/Nsec;%第二段功率谱

Pxx3=abs(fft(xn(513:768),Nsec).^2)/Nsec;%第三段功率谱

Pxx4=abs(fft(xn(769:1024),Nsec).^2)/Nsec;%第四段功率谱

Pxx=10*log10(Pxx1+Pxx2+Pxx3+Pxx4/4);%Fourier振幅谱平方的平均值,并转化为dB

f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列

subplot(2,1,1),plot(f(1:Nsec/2),Pxx(1:Nsec/2));%绘制功率谱曲线

xlabel('频率/Hz');ylabel('功率谱/dB');

title('平均周期图(无重叠)N=4*256');grid on;

%运用信号重叠分段估计功率谱

Pxx1=abs(fft(xn(1:256),Nsec).^2)/Nsec; %第一段功率谱

Pxx2=abs(fft(xn(129:384),Nsec).^2)/Nsec;%第二段功率谱

Pxx3=abs(fft(xn(257:512),Nsec).^2)/Nsec;%第三段功率谱

Pxx4=abs(fft(xn(385:640),Nsec).^2)/Nsec;%第四段功率谱

Pxx5=abs(fft(xn(513:768),Nsec).^2)/Nsec;%第四段功率谱

Pxx6=abs(fft(xn(641:896),Nsec).^2)/Nsec;%第四段功率谱

Pxx7=abs(fft(xn(769:1024),Nsec).^2)/Nsec;%第四段功率谱

Pxx=10*log10(Pxx1+Pxx2+Pxx3+Pxx4+Pxx5+Pxx6+Pxx7/7);%Fourier振幅谱平方的平均值,并转化为dB

f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列

subplot(2,1,2),plot(f(1:Nsec/2),Pxx(1:Nsec/2));%绘制功率谱曲线

xlabel('频率/Hz');ylabel('功率谱/dB');

title('平均周期图(重叠1/2)N=1024');grid on;

%用Fourier变换求取信号的功率谱---welch方法

%思想:welch法采用信号重叠分段,加窗函数和FFT算法等计算一个信号序列的自功率谱(PSD)和两个信号序列的互功率谱(CSD),采用MATLAB自

%带的函数psd

clf;

Fs=1000;

N=1024;Nfft=256;n=0:N-1;t=n/Fs;

window=hanning(256);

noverlap=128;

dflag='none';

randn('state',0);

xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);

Pxx=psd(xn,Nfft,Fs,window,noverlap,dflag);

f=(0:Nfft/2)*Fs/Nfft;

相关文档
最新文档