dsp。SineWave
产生离散正弦波
描述
的dsp。SineWave
系统对象™生成一个真实或复杂的多通道正弦信号,每个输出通道具有独立的振幅、频率和相位。
对于实正弦和复正弦,振幅,频率,PhaseOffset属性可以是标量或长度N向量,N输出中的通道数。当您指定这些属性中的至少一个为长度-时N向量,为其他属性指定的标量值将应用于每个属性N频道。
要生成一个离散时间正弦信号:
创建
dsp。SineWave
对象并设置其属性。使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
创建
描述
创建一个正弦波对象,生成一个振幅为1,频率为100 Hz,相位偏移为0的实值正弦波。缺省情况下,正弦波对象只生成一个采样。正弦
= dsp。SineWave
创建一个将每个指定属性设置为指定值的正弦波对象。将每个属性名用单引号括起来。正弦
= dsp。SineWave (名称,值
)
例子:正弦= dsp.SineWave('振幅',2);
属性创建正弦波对象振幅属性设置为正弦
= dsp。SineWave (amp,频率,相位,名称,值
)amp
,频率属性设置为频率
,PhaseOffset属性设置为阶段
,以及设置为指定值的任何其他指定属性。
属性
除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放
功能解锁它们。
如果属性为可调,您可以随时更改其值。
有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计.
振幅
- - - - - -正弦波振幅
1
(默认)|标量|向量
正弦波的振幅,指定为下列之一:
scalar——标量应用于所有通道。
向量A的长度N矢量包含了每一个正弦波的振幅N输出通道。的向量长度必须与指定的向量长度相同频率而且PhaseOffset属性。
可调:是的
依赖关系
此属性仅在设置时可调方法要么三角函数的
或“差”
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
频率
- - - - - -正弦波频率
One hundred.
(默认)|标量|向量
正弦波的频率,以Hz为单位,指定为下列之一:
scalar——标量应用于所有通道。
向量A的长度N矢量中包含了正弦波的频率N输出通道。的向量长度必须与指定的向量长度相同振幅而且PhaseOffset属性。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
ComplexOutput
- - - - - -标志,指示波形是实波形还是复波形
假
(默认)|真正的
标志,指示波形是实波形还是复数波形,指定为:
假
——波形输出真实。真正的
——波形输出复杂。
方法
- - - - - -用于生成正弦波的方法
三角函数的
(默认)|“查表”
|“差”
用于生成正弦波的方法,指定为下列之一:
三角函数的
对象通过对连续时间函数采样来计算正弦信号。“查表”
对象在模拟开始时预先计算每个输出正弦信号的唯一样本,并根据需要从内存中召回样本。“差”
——对象使用增量算法。该算法基于前一个采样时间计算的输出值和预先计算的更新项来计算输出样本。
TableOptimization
- - - - - -优化正弦值表的速度或内存
“速度”
(默认)|“记忆”
优化速度或内存的正弦值表,指定为:
“速度”
——该表包含k元素,k是正弦波的一个完整周期内输入样本的数量。每个正弦波的周期必须是1/的整数倍Fs,在那里Fs是值SampleRate属性值。也就是说,每个元素的频率财产必须是形式Fs/米,在那里米整数是否大于1
.“记忆”
——该表包含k/ 4的元素。
依赖关系
属性时才应用此属性方法
财产“查表”
.
SampleRate
- - - - - -输出信号的采样率
1000
(默认)|积极的标量
输出信号的采样率(以Hz为单位),指定为正标量。
例子:44100
例子:22050
SamplesPerFrame
- - - - - -每帧样本数
1
(默认)|正整数
从每个正弦信号缓冲到输出帧的连续采样数,指定为正整数。
例子:1000
例子:5000
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
OutputDataType
- - - - - -正弦波输出数据类型
“双”
(默认)|“单一”
|“自定义”
正弦波输出数据类型,指定为“双”
,“单一”
,或“自定义”
.
CustomOutputDataType
- - - - - -输出字和分数长度
numerictype ([], 16)
(默认)|numerictype([], 32岁,30)
输出字长和分数长,指定为字长为16的自签名数字类型。
例子:numerictype([], 32岁,30)
例子:numerictype([], 16岁,15)
依赖关系
属性时才应用此属性方法财产“查表”
和OutputDataType财产“自定义”
.
使用
输出参数
sineOut
-正弦波输出
向量|矩阵
正弦波输出,作为矢量或矩阵返回。的SamplesPerFrame属性确定输出矩阵中的行数。如果频率或者是PhaseOffset属性是一个向量,向量的长度决定了输出矩阵中的列(通道)数。如果频率
或者是PhaseOffset
属性为标量,则输出矩阵中的通道数为1。
的OutputDataType属性设置输出的数据类型。
数据类型:单
|双
|fi
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj
,使用这种语法:
发行版(obj)
例子
产生一个正弦波信号
请注意:如果您正在使用R2016a或更早的版本,请将对对象的每个调用替换为等效的调用一步
语法。例如,obj (x)
就变成了步骤(obj, x)
.
产生振幅为2,频率为10hz,初始相位为0的正弦波。
sine1 = dsp.SineWave(2,10);sine1。SamplesPerFrame = 1000;Y = sine1();情节(y)
产生两个正弦波,相位偏移为pi/2弧度。
sine2 = dsp.SineWave;sine2。频率= 10;sine2。PhaseOffset = [0 pi/2];sine2。SamplesPerFrame = 1000;Y = sin2 ();情节(y)
噪声正弦波信号滤波帧的MATLAB实现
这个例子展示了如何在MATLAB®中低通滤波噪声信号,并使用频谱分析仪可视化原始和滤波信号。有关此示例的金宝appSimulink®版本,请参见Simulink中噪声正弦波信号的滤波帧金宝app.
指定信号源
输入信号是两个频率为1khz和10khz的正弦波的和。采样频率为44.1 kHz。
Sine1 = dsp。SineWave (“频率”1 e3,“SampleRate”44.1 e3);Sine2 = dsp。SineWave (“频率”, 10 e3,“SampleRate”44.1 e3);
创建低通过滤器
低通FIR滤波器,dsp。LowpassFilter
,利用广义Remez FIR滤波器设计算法设计了一种最小阶FIR低通滤波器。设置通频带频率为5000hz,阻频带频率为8000hz。通带纹波为0.1 dB,阻带衰减为80 dB。
FIRLowPass = dsp。LowpassFilter (“PassbandFrequency”, 5000,...“StopbandFrequency”, 8000);
创建频谱分析仪
设置频谱分析仪,比较原始信号和滤波信号的功率谱。频谱单位为dBm。
光谱分析仪(“PlotAsTwoSidedSpectrum”假的,...“SampleRate”, Sine1。SampleRate,...“ShowLegend”,真的,...“YLimits”, -145年,45);SpecAna。ChannelNames = {“原始噪声信号”,...低通滤波信号};
为每帧指定样本
本例使用基于帧的处理,其中数据一次处理一帧。每一帧数据包含来自独立通道的连续样本。基于帧的处理对于许多信号处理应用是有利的,因为您可以一次处理多个样本。通过将数据缓冲到帧中并处理数据的多采样帧,您可以提高信号处理算法的计算时间。设置每帧样本的数量为4000。
Sine1。SamplesPerFrame = 4000;Sine2。SamplesPerFrame = 4000;
滤波有噪声的正弦波信号
将标准差为0.1的零均值高斯白噪声加到正弦波的和中。使用FIR滤波器对结果进行过滤。在运行模拟时,频谱分析仪显示源信号中超过8000 Hz的频率被衰减。产生的信号保持在1khz的峰值,因为它落在低通滤波器的通带中。
为i = 1: 1000 x = Sine1()+Sine2()+0.1.*randn(Sine1. samplesperframe,1);y = FIRLowPass(x);SpecAna (x, y);结束发行版(SpecAna)
正弦波的带通滤波
带通滤波器是一种离散时间正弦波信号,由频率为1khz, 10khz和15khz的三个正弦波组成。
设计FIR等纹波带通滤波器,首先创建一个带通滤波器设计规范对象,然后使用这些规范设计滤波器。
带通滤波器设计
使用创建一个带通滤波器设计规范对象fdesign.bandpass
.
bandpassSpecs = fdesign.bandpass(, Fst1 Fp1 Fp2, Fst2 Ast1,美联社,Ast2”,...1/4, 3/8, 5/8, 6/8, 60岁,1、60);
列出此对象的可用设计方法。
designmethods (bandpassSpecs)
类fdesign的设计方法。带通(Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2): butter cheby1 cheby2椭圆等纹kaiserwin
为了设计一个等纹波滤波器,选择“equiripple”
.
bpFilter =设计“equiripple”,“Systemobject”,真正的)
bpFilter = dsp。FIRFilter与属性:结构:'直接形式'分子来源:'属性'分子:[-0.0043 -3.0812e-15 0.0136 3.7820e-15 -0.0180…显示所有属性
可视化所设计滤波器的频率响应。
fvtool (bpFilter“Fs”, 44100)
创建正弦信号
创建一个频率为1 kHz、10 kHz和15 kHz的三个正弦波的和的信号。初始化频谱分析仪,查看原始信号和滤波后的信号。
Sine1 = dsp。SineWave (“频率”1 e3,“SampleRate”, 44.1 e3,“SamplesPerFrame”, 4000);Sine2 = dsp。SineWave (“频率”, 10 e3,“SampleRate”, 44.1 e3,“SamplesPerFrame”, 4000);Sine3 = dsp。SineWave (“频率”15 e3,“SampleRate”, 44.1 e3,“SamplesPerFrame”, 4000);光谱分析仪(“PlotAsTwoSidedSpectrum”假的,...“SampleRate”, Sine1。SampleRate,...“ShowLegend”,真的,...“YLimits”, -240年,45);SpecAna。ChannelNames = {“原始噪声信号”,带通滤波信号};
滤波正弦信号
使用所设计的带通滤波器对正弦信号进行滤波。在频谱分析仪中查看原始信号和滤波后的信号。1千赫的音调被过滤和衰减。10 kHz的音调不受影响,15 kHz的音调轻微减弱,因为它出现在滤波器的过渡带中。
为i = 1,1000 x = Sine1()+Sine2()+Sine3();y = bpFilter(x)SpecAna (x, y);结束发行版(SpecAna)
更多关于
正弦信号
一个实值离散时间正弦信号定义为:
在哪里一个是振幅,f为频率,单位为Hz, φ为初始相位,或相位偏移,单位为弧度。
复正弦函数定义为:
算法
三角函数
三角函数法计算正弦函数我th频道,y我,通过对连续函数进行采样
有一段时间T年代,其中指定T年代在采样时间内。
在每个采样时间,算法计算正弦函数在适当的时间值在第一个周期内正弦曲线的。该算法将三角函数计算限制在每个正弦曲线的第一个周期内,避免了计算非常大的正弦曲线的不精确性。当绝对时间变量可能溢出时,此约束还消除了扩展操作中出现不连续的可能性。因此,这种方法避免了表查找方法的内存需求,代价是要进行更多的浮点操作。
查表
表查找方法预先计算独特的每个输出正弦信号在模拟开始时的样本,并根据需要从内存中召回样本。由于只有当所有输出序列都重复时才能构造一个有限长度的表,因此该方法要求输出中每个正弦信号的周期能被样本周期均匀整除。即1/(f我T年代) =k我每个通道必须为整数值我= 1, 2,…N.
当算法优化表的正弦值为速度
,为每个通道构造的表包含k我元素。当优化为时内存
,为每个通道构造的表包含k我/ 4的元素。
对于长输出序列,表查找方法需要的浮点操作比其他任何方法都要少得多。然而,该方法可能需要相当多的内存,特别是对于高采样率(长表)。此方法推荐用于旨在模拟或为DSP硬件生成代码的模型,这些模型需要优化执行速度。
请注意
此对象的查找表由双精度浮点值构造。当你使用查表
计算模式,您可以在输出中实现的最大精度是53位。将输出数据类型的字长设置为大于53位的值不会提高输出的精度。
微分
差分法使用增量算法。该算法利用以下标识,基于前一个采样时间计算的输出值(以及预先计算的更新项)计算输出样本。
正弦函数的更新方程我th频道,y我,因此可以写成矩阵形式为
你指定的地方T年代在采样时间内。自T年代为常数时,右边矩阵为常数,可以在模拟开始时计算一次。的价值一个我罪[2πf我(t+T年代)+ϕ我]则由sin(2πf我t+ϕ我)和cos(2πf我t+ϕ我)通过简单的矩阵乘法在每个时间步。
这种模式提供了较低的计算负荷,但由于累积量化误差而随时间漂移。由于该方法不依赖于绝对时间值,因此在扩展操作期间,当绝对时间变量可能溢出时,没有中断的危险。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
此对象没有用于代码生成的可调属性。
看到系统对象在MATLAB代码生成(MATLAB编码器).
版本历史
在R2012a中引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。