⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 生成白噪声信号(输入输出版).m

📁 to generate the white noise it is very simple.
💻 M
字号:
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); %输出数据文件名
status=fclose(fid);   

n=round(sf*tl)+1;       %计算白噪声信号数据长度n     
t=0:1/sf:(n-1)/sf;      %建立信号离散时间向量t
nfft=2^nextpow2(n);     %大于并最接近n的2的幂次方为FFT长度
ni=round(fi*nfft/sf+1); %四舍五入取整求最小截止频率对应数组元素的下标
na=round(fa*nfft/sf+1); %四舍五入取整求最小截止频率对应数组元素的下标
r=zeros(1,nfft/2);      %建立一个长度为nfft/2元素全为零的向量
r(ni:na)=1;             %将r的正频率带通内的元素赋值1,生成幅值谱
a=2*pi*rand(1,nfft/2);  %生成0~2pi的随机数为随机相位

b=r.*exp(i*a)*nfft/2;   %将幅值谱和相位谱转换成实部和虚部

a=[b,b(nfft/2:-1:1)];   %将正负圆频率向量组合成一个向量
x=real(ifft(a,nfft));   %IFFT变换,并取实部为生成的白噪声信号
y=am*x(1:n)/max(abs(x(1:n)));%取指定长度的数据并使数据的最大值为指定的幅值
nft=1024;               %定义自功率谱的FFT长度
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('幅值');
title('白噪声');grid on;
%绘制自功率谱曲线图
subplot(2,1,2);
plot(f(1:nft/4),y1(1:nft/4));xlabel('频率(Hz)');ylabel('幅值');
title('自功率谱');grid on;
%打开文件输出生成的白噪声信号数据
fid=fopen(fno,'w');
for k=1:n
%每一行输出两个实行数据,t为时间,y为白噪声信号值
fprintf(fid,'%f%f\n',t(k),y(k));
end
status=fclose(fid);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -