声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1454|回复: 0

[编程技巧] 求助:请高手帮忙看下这个白噪声信号生成程序

[复制链接]
发表于 2007-5-24 14:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
程序如下

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
clc
close all hidden
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fni=input('生成白噪声信号-输入数据文件名:','s');
fid=fopen(fni,'r');
sf=fscanf(fid,'%f',1); 采样频率
fi=fscanf(fid,'%f',1);  最小截止频率
fa=fscanf(fid,'%f',1); 最大
tl=fscanf(fid,'%f',1);  时间
am=fscanf(fid,'%f',1); 最大幅值
fno=fscanf(fid,'%s',1);  输出数据文件名
fclose(fid);
%计算白噪声信号数据长度n
n=round(sf*tl)+1;
%建立信号离散时间向量t
t=0:1/sf:(n-1)/sf;
%大于并最接近n的2的幂次方为fft长度
nfft=2^nextpow2(n);
%四舍五入取整求最小截止频率对应数组元素的下标
ni=round(fi*nfft/sf+1);
%四舍五入取整求最大截止频率对应数组元素的下标
na=round(fa*nfft/sf+1);
%建立一个长度为nfft/2元素全为0的向量
r=zeros(1,nfft/2);
%将r的正频率带通内的元素赋值1,生成赋值铺
r(ni:na)=1;
%生成0~2pi的随机数为随机相位
a=2*pi*rand(1,nfft/2);
%将幅值谱和相位谱转换成实部和虚部
b=r.*exp(i*a)*nfft/2;
%将正负圆频率向量组合成一个向量
a=[b,b(nfft/2:-1:1)];
%IFFT变换,并取实部为生成白噪声信号
x=real(ifft(a,nfft));
%取指定长度的数据并使数据的最大值为指定的幅值
y=am*(1:n)/max(abs(x(1:n)));
%定义自功率谱的FFT长度
nft=1024;
%计算生成白噪声信号自功率谱
y1=psd(y,nft,sf,boxcar(nft),nft/2);
%定义自功率谱的离散频率向量
f=0:sf/nft:(nft/2-1)*sf/nft;
%绘制白噪声信号随时间变化的曲线图
subplot(2,1,1);
plot(t,y);
xlabel('时间(s)');
ylabel('幅值');
grid on;
%绘制自功率谱曲线图
subplot(2,1,2);
plot(f(1:nft/4),y1(1:nft/4));
xlabel('频率(Hz)');
ylabel('幅值');
grid on;
fid=fopen(fno,'w');
for k=1:n
    fprintf(fid,'%f%f\n',t(k),y(k));
end
status=fclose(fid);

最后得不到白噪声曲线,看看是不是算法或者程序编写有误,谢谢!
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 11:50 , Processed in 0.058930 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表