下面matlab程序,按照你的要求编写的。
fs=100;N=200;
lag=100;
%randn('state',0); %设置产生随机数的初始状态(噪声)
n=0:N-1;t=n/fs;
x1=sin(2pi10t)+2sin(2pi15t)
y=fft(x1,N); %计算频谱
mag=abs(y);
f=nfs/N;
figure(1)
subplot(2,2,1),plot(t,x1);
title('原始信号'),xlabel('时间/s');
subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)2/N);
title('频谱图'),xlabel('频率/Hz');
[c,lags]=xcorr(x1,lag,'unbiased'); % 自相关
subplot(2,2,3),plot(lags/fs,c);
title('自相关信号'),xlabel('时间/s');
m=length(c)-1;
z=fft(c,m);
mag_z=abs(z);
ff=(0:m-1)fs/m;
subplot(2,2,4),plot(ff(1:m/2),mag_z(1:m/2)2/m);
title('自相关频谱'),xlabel('频率/Hz');
figure(2)
[c1,lags1]=xcorr(x1,randn(1,length(t)),lag,'unbiased');
m1=length(c1)-1;
z1=fft(c1,m1);
mag_z1=abs(z1);
ff1=(0:m1-1)fs/m1;
subplot(2,1,1),plot(lags1/fs,c1);
title('互相关信号'),xlabel('时间/s');
subplot(2,1,2),plot(ff1(1:m1/2),mag_z1(1:m1/2)2/m1);
title('互相关频谱'),xlabel('频率/Hz');
你这LPF函数是别人写的吧,里面还有一个新的F2T()函数不知道是什么,不是MATLAB自带的,也是别人写的,你没拿过来吧。
不管了,你按我给的写,直接全复制到一个文件里,运行就行了。
close all;
clear all;
dt=0001;
fm=1;
fc=10;
T=5;
t=0:dt:T;
mt=sqrt(2)cos(2pifmt);
s_dsb=mtcos(2pifct);
B=2fm;
figure(1);
subplot(311);
plot(t,s_dsb);
hold on;
plot(t,mt,'r--');
title('DSB调制信号');
xlabel('t');
f_dsb=fft(s_dsb);
temp=f_dsb;
temp([50:4953])=0;
s_ssb=ifft(temp);
subplot(312);
plot(t,s_ssb);
hold on;
plot(t,mt,'r--');
title('SSB调制信号(下边带)');
xlabel('t');
temp=f_dsb;
temp([1:49])=0;
temp([4953:end])=0;
s_ssb=ifft(temp);
subplot(313);
plot(t,s_ssb);
hold on;
plot(t,mt,'r--');
title('SSB调制信号(上边带)');
xlabel('t');
去噪有很多种方法,现在小波去噪最为常用,在matlab中有自带的函数进行小波去噪,简单易行。最常用且简单的是阈值去噪,用函数ddencmp()生成信号的默认阈值,然后利用函数wdencmp()进行去噪。如:
%对含噪信号s进行3层小波分解
[c,l]=wavedec(s,3,'db1'); %s为含噪信号,3为小波分解层数,db1为采用的小波基
%获取信号默认值
[thr,sorh,keepapp]=ddencmp('den','wv',s);
%参数den代表去噪,wv代表小波,s代表含有噪声的信号
%实现去噪过程
s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);
%参数gbl表示采用全局去噪
首先,你需要了解下进程的概念:我们都知道计算机的核心是CPU,它承担了所有的计算任务,而 *** 作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于 *** 作系统之上的。进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是 *** 作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。
为什么要说进程,因为你开一次Matlab 就是运行一次进程。如果同时跑的matlab 不是运行于同一个程序文件或者数据文件,相互之间不会有直接影响的。因为进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是 *** 作系统进行资源分配和调度的一个独立单位。
进程具有的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进行一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序,数据和进程控制块三部分组成
个人毕业设计的一些相关代码(供参考)
%获取语音信号
[filename,pathname]=uigetfile('wav','choose a audio file:');
[wavin,fs,nbits]=wavread([pathname filename]);
wav_l=length(wavin); %采样点数,length()返回值是标量
frame_l=004fs; %根据fs选择帧长,
step_l=floor(05frame_l); %设置帧移
num_frame=floor((wav_l-frame_l)/step_l)+1; %确定帧数
win_ham=hamming(frame_l); %在做fft之前,为移除直流分量和加重高频分量,采用汉明窗,对信号进行加权
%加窗处理用来消除分帧时带来的截断效应
%加窗,分帧(矩阵每一行为一帧)
for i=1:num_frame
n1=(i-1)step_l+1;
n2=(i-1)step_l+frame_l;
zy(i,:)=(win_ham')(yt(n1:n2)'); %存储每一帧噪音(行向量) %win_ham、yt是列向量,需转置
yy(i,:)=(win_ham')(wavin(n1:n2)'); %存储每一帧纯净语音
end
是这样的,如果你再程序开始添加holdon这个的画,表示这之后的每一次作图都保留以前的图,这样就可以连续画图了
反之holdoff,表示打开这个之后,每次画图,删除以前的图,
以上就是关于用matlab语言产生一个正弦信号,进行频谱分析和自相关分析,求教~~~~~谢谢啊全部的内容,包括:用matlab语言产生一个正弦信号,进行频谱分析和自相关分析,求教~~~~~谢谢啊、急求用MATLAB编写用滤波法实现SSB调制的程序(提示:使用LPF函数实现滤波)、请问如何在matlab中对信号进行去噪 *** 作。最好用函数的形式,方便其他程序调用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)