Module_SignalProcessing_Operations_zh - vorcyc/Vorcyc.Mathematics GitHub Wiki
Vorcyc.Mathematics.SignalProcessing.Operations 命名空间包含多种常用的信号处理操作类,包括卷积操作类(如 ComplexConvolver、Convolver、OlaBlockConvolver、OlsBlockConvolver)、动态处理类(如 DynamicsProcessor)、包络跟随器类(如 EnvelopeFollower)、信号重建类(如 GriffinLimReconstructor)、谐波/打击乐分离器类(如 HarmonicPercussiveSeparator)、调制类(如 Modulator)、通用操作类(如 Operation)、重采样类(如 Resampler)、谱减法滤波类(如 SpectralSubtractor)和波形整形类(如 WaveShaper)。这些类提供了丰富的信号处理功能,适用于各种音频和信号处理需求。
0.9 API 说明:下列各类的 首选重载均接受
Signal(返回Signal或写入Signal.Samples)。Operation.Convolve、CrossCorrelate、BlockConvolve、Resample、TimeStretch、Envelope、FullRectify、HalfRectify、SpectralSubtract等均已提供Signal版本;Convolver/Modulator/SpectralSubtractor内部使用ReadOnlySpan<float>零拷贝路径。DiscreteSignal已标记[Obsolete],请使用Signal(采样率改为float)。ComplexDiscreteSignalFp32保留用于复数值操作。
0.10.19:
Convolver<T>/OlaBlockConvolver<T>/OlsBlockConvolver<T>/ComplexConvolver<T>与Operation.Convolve<T>/CrossCorrelate<T>/BlockConvolve<T>接受float/double(长度N+M-1)。现有 float 类型不动;OLA/OLS 的IEnumerable<double>旧构造函数仍会窄化。
以下类型均位于命名空间 :Vorcyc.Mathematics.SignalProcessing.Operations
📒目录
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.ComplexConvolver 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.Convolver 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.Convolver<T> / Convolver64
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.OlaBlockConvolver 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.OlsBlockConvolver 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.DynamicsMode 枚举
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.DynamicsProcessor 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.EnvelopeFollower 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.GriffinLimReconstructor 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.HarmonicPercussiveSeparator 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Modulator 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Operation 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.Resampler 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.SpectralSubtractor 类
- 🔖 Vorcyc.Mathematics.SignalProcessing.Operations.WaveShaper 类
以下类型均位于 Vorcyc.Mathematics.SignalProcessing.Operations.Convolution 命名空间。
Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.ComplexConvolver 是一个用于实现复数值输入/输出的快速卷积(FFT)的类。
-
public ComplexDiscreteSignalFp32 Convolve(ComplexDiscreteSignalFp32 signal, ComplexDiscreteSignalFp32 kernel, int fftSize = 0)- 使用 FFT 对
signal和kernel进行快速卷积。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。 -
fftSize: FFT 大小,默认为 0。
-
- 返回值: 卷积结果的
ComplexDiscreteSignalFp32。
- 使用 FFT 对
-
public ComplexDiscreteSignalFp32 CrossCorrelate(ComplexDiscreteSignalFp32 signal, ComplexDiscreteSignalFp32 kernel, int fftSize = 0)- 使用 FFT 对
signal和kernel进行快速互相关。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。 -
fftSize: FFT 大小,默认为 0。
-
- 返回值: 互相关结果的
ComplexDiscreteSignalFp32。
- 使用 FFT 对
-
public ComplexDiscreteSignalFp32 Deconvolve(ComplexDiscreteSignalFp32 signal, ComplexDiscreteSignalFp32 kernel, int fftSize = 0)- 使用多项式除法和 FFT 对
signal和kernel进行快速反卷积。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。 -
fftSize: FFT 大小,默认为 0。
-
- 返回值: 反卷积结果的
ComplexDiscreteSignalFp32。
- 使用多项式除法和 FFT 对
以下是一个使用 ComplexConvolver 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations.Convolution;
public class ComplexConvolverExample
{
public static void Main()
{
// 创建 ComplexConvolver 实例
var convolver = new ComplexConvolver();
// 定义输入信号和卷积核
var signal = new ComplexDiscreteSignalFp32(44100, new float[] { 0.5f, 0.6f, 0.55f }, new float[] { 0.1f, 0.2f, 0.15f });
var kernel = new ComplexDiscreteSignalFp32(44100, new float[] { 0.3f, 0.4f }, new float[] { 0.05f, 0.1f });
// 执行卷积
var convolvedSignal = convolver.Convolve(signal, kernel);
Console.WriteLine("Convolved Signal:");
for (int i = 0; i < convolvedSignal.Length; i++)
{
Console.WriteLine($"Real: {convolvedSignal.Real[i]}, Imaginary: {convolvedSignal.Imag[i]}");
}
// 执行互相关
var crossCorrelatedSignal = convolver.CrossCorrelate(signal, kernel);
Console.WriteLine("Cross-Correlated Signal:");
for (int i = 0; i < crossCorrelatedSignal.Length; i++)
{
Console.WriteLine($"Real: {crossCorrelatedSignal.Real[i]}, Imaginary: {crossCorrelatedSignal.Imag[i]}");
}
// 执行反卷积
var deconvolvedSignal = convolver.Deconvolve(signal, kernel);
Console.WriteLine("Deconvolved Signal:");
for (int i = 0; i < deconvolvedSignal.Length; i++)
{
Console.WriteLine($"Real: {deconvolvedSignal.Real[i]}, Imaginary: {deconvolvedSignal.Imag[i]}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.Convolver 是一个用于实现快速卷积(FFT)的类。
-
public Signal Convolve(Signal signal, Signal kernel)- 使用 FFT 对
signal和kernel进行快速卷积。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。
-
- 返回值: 卷积结果的
Signal。
- 使用 FFT 对
-
public void Convolve(float[] input, float[] kernel, float[] output)- 使用 FFT 对
input和kernel进行快速卷积,并将结果存储在output数组中。 - 参数:
-
input: 输入信号数组。 -
kernel: 卷积核数组。 -
output: 输出结果数组。
-
- 使用 FFT 对
-
public Signal CrossCorrelate(Signal signal1, Signal signal2)- 使用 FFT 对
signal1和signal2进行快速互相关。 - 参数:
-
signal1: 输入信号1。 -
signal2: 输入信号2。
-
- 返回值: 互相关结果的
Signal。
- 使用 FFT 对
-
public void CrossCorrelate(float[] input1, float[] input2, float[] output)- 使用 FFT 对
input1和input2进行快速互相关,并将结果存储在output数组中。 - 参数:
-
input1: 输入信号数组1。 -
input2: 输入信号数组2。 -
output: 输出结果数组。
-
- 使用 FFT 对
以下是一个使用 Convolver 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations.Convolution;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class ConvolverExample
{
public static void Main()
{
// 创建 Convolver 实例
var convolver = new Convolver();
// 定义输入信号和卷积核
var signal = Signal.FromCopy(new float[] { 0.5f, 0.6f, 0.55f }, 44100);
var kernel = Signal.FromCopy(new float[] { 0.3f, 0.4f }, 44100);
// 执行卷积
var convolvedSignal = convolver.Convolve(signal, kernel);
Console.WriteLine("Convolved Signal:");
for (int i = 0; i < convolvedSignal.Length; i++)
{
Console.WriteLine($"Sample: {convolvedSignal[i]}");
}
// 执行互相关
var crossCorrelatedSignal = convolver.CrossCorrelate(signal, kernel);
Console.WriteLine("Cross-Correlated Signal:");
for (int i = 0; i < crossCorrelatedSignal.Length; i++)
{
Console.WriteLine($"Sample: {crossCorrelatedSignal[i]}");
}
}
}Convolver<T>(0.10.19)是 float / double 的 FFT conv / xcorr 核。Convolver64 即 Convolver<double>。结果长度 N + M - 1,不改输入。
double[] y = new Convolver<double>().Convolve(x, kernel);
double[] r = Operation.CrossCorrelate(x, kernel);
double[] b = new OlaBlockConvolver64(kernel, 64).ApplyTo(x);
var z = new ComplexConvolver<double>().Convolve(a, k);Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.OlaBlockConvolver 是一个用于实现基于重叠-相加算法的块卷积的信号处理器类。
-
public int HopSize { get; }- 获取跳跃长度:FFT 大小 - 核大小 + 1。
-
public OlaBlockConvolver(IEnumerable<float> kernel, int fftSize)- 构造 OlaBlockConvolver 实例,指定卷积核和 FFT 大小。
- 参数:
-
kernel: 卷积核。 -
fftSize: FFT 大小。
-
-
public OlaBlockConvolver(IEnumerable<double> kernel, int fftSize)- 构造 OlaBlockConvolver 实例,指定卷积核和 FFT 大小。
- 参数:
-
kernel: 卷积核。 -
fftSize: FFT 大小。
-
-
public static OlaBlockConvolver FromFilter(FirFilter filter, int fftSize)- 使用 FIR 滤波器核和 FFT 大小构造 OlaBlockConvolver 实例。
- 参数:
-
filter: FIR 滤波器。 -
fftSize: FFT 大小。
-
- 返回值: OlaBlockConvolver 实例。
-
public void ChangeKernel(float[] kernel)- 在线更改卷积核系数。
- 参数:
-
kernel: 新的卷积核。
-
-
public float Process(float sample)- 处理一个样本。
- 参数:
-
sample: 输入样本。
-
- 返回值: 处理后的样本。
-
public Signal ApplyTo(Signal signal, FilteringMethod method = FilteringMethod.Auto)- 处理整个信号并返回新的滤波信号。
- 参数:
-
signal: 输入信号。 -
method: 滤波方法,默认为FilteringMethod.Auto。
-
- 返回值: 处理后的
Signal对象。
-
public void Reset()- 重置重叠-相加卷积器。
以下是一个使用 OlaBlockConvolver 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations.Convolution;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class OlaBlockConvolverExample
{
public static void Main()
{
// 定义卷积核和 FFT 大小
float[] kernel = { 0.3f, 0.4f, 0.5f }; int fftSize = 8;
// 创建 OlaBlockConvolver 实例
var convolver = new OlaBlockConvolver(kernel, fftSize);
// 定义输入信号
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f, 0.8f, 0.75f, 0.9f };
// 处理整个信号
var outputSignal = convolver.ApplyTo(Signal.FromCopy(inputSignal, 44100));
Console.WriteLine("Filtered Signal:");
foreach (var sample in outputSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 在线更改卷积核
float[] newKernel = { 0.2f, 0.3f, 0.4f };
convolver.ChangeKernel(newKernel);
// 处理单个样本
float processedSample = convolver.Process(0.85f);
Console.WriteLine($"Processed Sample: {processedSample}");
// 重置卷积器
convolver.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Operations.Convolution.OlsBlockConvolver 是一个用于实现基于重叠-保存算法的块卷积的信号处理器类。
-
public int HopSize { get; }- 获取跳跃长度:FFT 大小 - 核大小 + 1。
-
public OlsBlockConvolver(IEnumerable<float> kernel, int fftSize)- 构造 OlsBlockConvolver 实例,指定卷积核和 FFT 大小。
- 参数:
-
kernel: 卷积核。 -
fftSize: FFT 大小。
-
-
public OlsBlockConvolver(IEnumerable<double> kernel, int fftSize)- 构造 OlsBlockConvolver 实例,指定卷积核和 FFT 大小。
- 参数:
-
kernel: 卷积核。 -
fftSize: FFT 大小。
-
-
public static OlsBlockConvolver FromFilter(FirFilter filter, int fftSize)- 使用 FIR 滤波器核和 FFT 大小构造 OlsBlockConvolver 实例。
- 参数:
-
filter: FIR 滤波器。 -
fftSize: FFT 大小。
-
- 返回值: OlsBlockConvolver 实例。
-
public void ChangeKernel(float[] kernel)- 在线更改卷积核系数。
- 参数:
-
kernel: 新的卷积核。
-
-
public float Process(float sample)- 处理一个样本。
- 参数:
-
sample: 输入样本。
-
- 返回值: 处理后的样本。
-
public Signal ApplyTo(Signal signal, FilteringMethod method = FilteringMethod.Auto)- 处理整个信号并返回新的滤波信号。
- 参数:
-
signal: 输入信号。 -
method: 滤波方法,默认为FilteringMethod.Auto。
-
- 返回值: 处理后的
Signal对象。
-
public void Reset()- 重置重叠-保存卷积器。
以下是一个使用 OlsBlockConvolver 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations.Convolution;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class OlsBlockConvolverExample
{
public static void Main()
{
// 定义卷积核和 FFT 大小
float[] kernel = { 0.3f, 0.4f, 0.5f }; int fftSize = 8;
// 创建 OlsBlockConvolver 实例
var convolver = new OlsBlockConvolver(kernel, fftSize);
// 定义输入信号
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f, 0.8f, 0.75f, 0.9f };
// 处理整个信号
var outputSignal = convolver.ApplyTo(Signal.FromCopy(inputSignal, 44100));
Console.WriteLine("Filtered Signal:");
foreach (var sample in outputSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 在线更改卷积核
float[] newKernel = { 0.2f, 0.3f, 0.4f };
convolver.ChangeKernel(newKernel);
// 处理单个样本
float processedSample = convolver.Process(0.85f);
Console.WriteLine($"Processed Sample: {processedSample}");
// 重置卷积器
convolver.Reset();
}
}以下类型均位于命名空间 :Vorcyc.Mathematics.SignalProcessing.Operations
Vorcyc.Mathematics.SignalProcessing.Operations.DynamicsMode 枚举定义了动态处理器的类型(模式)。
-
Compressor- 较小的压缩比,例如 1:1, 2:1。
-
Limiter- 较大的压缩比,例如 5:1, 10:1。
-
Expander- 较小的扩展比,例如 1:1, 2:1。
-
NoiseGate- 非常高的压缩比,例如 5:1。
Vorcyc.Mathematics.SignalProcessing.Operations.DynamicsProcessor 是一个用于实现动态处理(如限制器、压缩器、扩展器或噪声门)的类。
-
public float Threshold { get; set; }- 获取或设置压缩/扩展阈值。
-
public float Ratio { get; set; }- 获取或设置压缩/扩展比率。
-
public float MakeupGain { get; set; }- 获取或设置补偿增益。
-
public float Attack { get; set; }- 获取或设置攻击时间。
-
public float Release { get; set; }- 获取或设置释放时间。
-
public DynamicsProcessor(DynamicsMode mode, int samplingRate, float threshold, float ratio, float makeupGain = 0, float attack = 0.01f, float release = 0.1f, float minAmplitudeDb = -120)- 构造 DynamicsProcessor 实例,指定动态处理器模式、采样率、阈值、比率、补偿增益、攻击时间、释放时间和最小振幅阈值。
- 参数:
-
mode: 动态处理器模式。 -
samplingRate: 采样率。 -
threshold: 压缩/扩展阈值。 -
ratio: 压缩/扩展比率。 -
makeupGain: 补偿增益,默认为 0。 -
attack: 攻击时间,默认为 0.01 秒。 -
release: 释放时间,默认为 0.1 秒。 -
minAmplitudeDb: 最小振幅阈值,默认为 -120 dB。
-
-
public float Process(float sample)- 处理一个样本。
- 参数:
-
sample: 输入样本。
-
- 返回值: 处理后的样本。
-
public void Reset()- 重置动态处理器。
-
public Signal ApplyTo(Signal signal, FilteringMethod method = FilteringMethod.Auto)- 处理整个信号并返回新的信号(动态处理)。
- 参数:
-
signal: 输入信号。 -
method: 滤波方法,默认为FilteringMethod.Auto。
-
- 返回值: 处理后的
Signal对象。
以下是一个使用 DynamicsProcessor 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class DynamicsProcessorExample
{
public static void Main()
{
// 定义动态处理器模式
DynamicsMode mode = DynamicsMode.Compressor;
// 创建 DynamicsProcessor 实例
var processor = new DynamicsProcessor(mode, 44100, -20, 2, 0, 0.01f, 0.1f);
// 定义输入信号
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f, 0.8f, 0.75f, 0.9f };
// 处理整个信号
var outputSignal = processor.ApplyTo(Signal.FromCopy(inputSignal, 44100));
Console.WriteLine("Processed Signal:");
foreach (var sample in outputSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 处理单个样本
float processedSample = processor.Process(0.85f);
Console.WriteLine($"Processed Sample: {processedSample}");
// 重置动态处理器
processor.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Operations.EnvelopeFollower 是一个用于实现包络跟随(包络检测)的类。
-
public float AttackTime { get; set; }- 获取或设置攻击时间(以秒为单位)。
-
public float ReleaseTime { get; set; }- 获取或设置释放时间(以秒为单位)。
-
public EnvelopeFollower(int samplingRate, float attackTime = 0.01f, float releaseTime = 0.05f)- 构造 EnvelopeFollower 实例,指定采样率、攻击时间和释放时间。
- 参数:
-
samplingRate: 采样率。 -
attackTime: 攻击时间,默认为 0.01 秒。 -
releaseTime: 释放时间,默认为 0.05 秒。
-
-
public float Process(float sample)- 处理一个样本。
- 参数:
-
sample: 输入样本。
-
- 返回值: 处理后的样本。
-
public void Reset()- 重置包络跟随器。
-
public Signal ApplyTo(Signal signal, FilteringMethod method = FilteringMethod.Auto)- 处理整个信号并返回新的信号(包络)。
- 参数:
-
signal: 输入信号。 -
method: 滤波方法,默认为FilteringMethod.Auto。
-
- 返回值: 处理后的
Signal对象。
以下是一个使用 EnvelopeFollower 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class EnvelopeFollowerExample
{
public static void Main()
{
// 创建 EnvelopeFollower 实例
var envelopeFollower = new EnvelopeFollower(44100, 0.01f, 0.05f);
// 定义输入信号
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f, 0.8f, 0.75f, 0.9f };
// 处理整个信号
var outputSignal = envelopeFollower.ApplyTo(Signal.FromCopy(inputSignal, 44100));
Console.WriteLine("Envelope Signal:");
foreach (var sample in outputSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 处理单个样本
float processedSample = envelopeFollower.Process(0.85f);
Console.WriteLine($"Processed Sample: {processedSample}");
// 重置包络跟随器
envelopeFollower.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Operations.GriffinLimReconstructor 是一个用于从功率(或幅度)谱图中使用 Griffin-Lim 迭代算法重建信号的类。
-
public float Gain { get; set; }- 获取或设置幅度增益因子。
-
public GriffinLimReconstructor(List<float[]> spectrogram, int windowSize = 1024, int hopSize = 256, WindowType window = WindowType.Hann, int power = 2)- 构造 GriffinLimReconstructor 实例,指定谱图、窗口大小、跳跃大小、窗口类型和功率。
- 参数:
-
spectrogram: 谱图(谱列表)。 -
windowSize: 窗口大小,默认为 1024。 -
hopSize: 跳跃大小,默认为 256。 -
window: 窗口类型,默认为WindowType.Hann。 -
power: 功率(2 - 功率谱,否则 - 幅度谱),默认为 2。
-
-
public GriffinLimReconstructor(List<float[]> spectrogram, Stft stft, int power = 2)- 构造 GriffinLimReconstructor 实例,指定谱图、STFT 变换器和功率。
- 参数:
-
spectrogram: 谱图(谱列表)。 -
stft: STFT 变换器。 -
power: 功率(2 - 功率谱,否则 - 幅度谱),默认为 2。
-
-
public float[] Iterate(float[] signal = null)- 执行一次重建迭代并返回当前步骤的重建信号。
- 参数:
-
signal: 上一次迭代重建的信号,默认为 null。
-
- 返回值: 当前步骤的重建信号。
-
public float[] Reconstruct(int iterations = 20)- 迭代地从谱图中重建信号。
- 参数:
-
iterations: Griffin-Lim 算法的迭代次数,默认为 20。
-
- 返回值: 重建的信号。
以下是一个使用 GriffinLimReconstructor 类中多个方法的示例,并在示例中加入了注释:
using System;
using System.Collections.Generic;
using Vorcyc.Mathematics.SignalProcessing.Operations;
public class GriffinLimReconstructorExample
{
public static void Main()
{
// 定义谱图
var spectrogram = new List<float[]> { new float[] { 0.5f, 0.6f, 0.55f }, new float[] { 0.7f, 0.65f, 0.8f }, new float[] { 0.75f, 0.9f, 0.85f } };
// 创建 GriffinLimReconstructor 实例
var reconstructor = new GriffinLimReconstructor(spectrogram);
// 执行重建
var reconstructedSignal = reconstructor.Reconstruct();
Console.WriteLine("Reconstructed Signal:");
foreach (var sample in reconstructedSignal)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行一次迭代
var iteratedSignal = reconstructor.Iterate(reconstructedSignal);
Console.WriteLine("Iterated Signal:");
foreach (var sample in iteratedSignal)
{
Console.WriteLine($"Sample: {sample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Operations.HarmonicPercussiveSeparator 是一个基于中值滤波的谐波/打击乐分离器类。
-
public HarmonicPercussiveSeparator(int fftSize = 2048, int hopSize = 512, int harmonicWinSize = 17, int percussiveWinSize = 17, HpsMasking masking = HpsMasking.WienerOrder2)- 构造 HarmonicPercussiveSeparator 实例,指定 FFT 大小、跳跃长度、谐波中值滤波器大小、打击乐中值滤波器大小和掩蔽模式。
- 参数:
-
fftSize: FFT 大小,默认为 2048。 -
hopSize: 跳跃长度(样本数),默认为 512。 -
harmonicWinSize: 沿时间轴的中值滤波器大小,默认为 17。 -
percussiveWinSize: 沿频率轴的中值滤波器大小,默认为 17。 -
masking: 掩蔽模式,默认为HpsMasking.WienerOrder2。
-
-
masking参数使用HpsMasking枚举(Binary、WienerOrder1、WienerOrder2),用于选择中值滤波后谐波/打击乐分量的掩蔽方式。
-
public (MagnitudePhaseList, MagnitudePhaseList) EvaluateSpectrograms(Signal signal)- 从给定的信号中评估谐波和打击乐的幅度-相位谱图。两个谱图对象共享相同的相位数组。
- 参数:
-
signal: 输入信号。
-
- 返回值: 包含谐波和打击乐谱图的元组。
-
public (Signal, Signal) EvaluateSignals(Signal signal)- 从给定的信号中提取谐波和打击乐信号。
- 参数:
-
signal: 输入信号。
-
- 返回值: 包含谐波和打击乐信号的元组。
以下是一个使用 HarmonicPercussiveSeparator 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class HarmonicPercussiveSeparatorExample
{
public static void Main()
{
// 创建 HarmonicPercussiveSeparator 实例
var separator = new HarmonicPercussiveSeparator();
// 定义输入信号
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f, 0.8f, 0.75f, 0.9f };
var signal = Signal.FromCopy(inputSignal, 44100);
// 评估谱图
var (harmonicSpectrogram, percussiveSpectrogram) = separator.EvaluateSpectrograms(signal);
Console.WriteLine("Harmonic and Percussive Spectrograms evaluated.");
// 提取谐波和打击乐信号
var (harmonicSignal, percussiveSignal) = separator.EvaluateSignals(signal);
Console.WriteLine("Harmonic and Percussive Signals extracted.");
// 输出谐波信号
Console.WriteLine("Harmonic Signal:");
foreach (var sample in harmonicSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 输出打击乐信号
Console.WriteLine("Percussive Signal:");
foreach (var sample in percussiveSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Operations.Modulator 提供了多种调制方法:
-
public static Signal Ring(Signal carrier, Signal modulator)- 执行环形调制(RM)并返回 RM 信号。
- 参数:
-
carrier: 载波信号。 -
modulator: 调制信号。
-
- 返回值: 调制后的
Signal。
-
public static Signal Amplitude(Signal carrier, float modulatorFrequency = 20, float modulationIndex = 0.5f)- 执行幅度调制(AM)并返回 AM 信号。
- 参数:
-
carrier: 载波信号。 -
modulatorFrequency: 调制频率,默认为 20 Hz。 -
modulationIndex: 调制指数(深度),默认为 0.5。
-
- 返回值: 调制后的
Signal。
-
public static Signal Frequency(Signal baseband, float carrierAmplitude, float carrierFrequency, float deviation = 0.1f)- 执行频率调制(FM)并返回 FM 信号。
- 参数:
-
baseband: 基带信号。 -
carrierAmplitude: 载波幅度。 -
carrierFrequency: 载波频率。 -
deviation: 频率偏移,默认为 0.1 Hz。
-
- 返回值: 调制后的
Signal。
-
public static Signal FrequencySinusoidal(float carrierFrequency, float carrierAmplitude, float modulatorFrequency, float modulationIndex, int length, int samplingRate = 1)- 执行正弦频率调制(FM)并返回正弦 FM 信号。
- 参数:
-
carrierFrequency: 载波频率。 -
carrierAmplitude: 载波幅度。 -
modulatorFrequency: 调制频率。 -
modulationIndex: 调制指数(深度)。 -
length: FM 信号长度。 -
samplingRate: 采样率,默认为 1。
-
- 返回值: 调制后的
Signal。
-
public static Signal FrequencyLinear(float carrierFrequency, float carrierAmplitude, float modulationIndex, int length, int samplingRate = 1)- 执行线性频率调制(FM)并返回 FM 信号。
- 参数:
-
carrierFrequency: 载波频率。 -
carrierAmplitude: 载波幅度。 -
modulationIndex: 调制指数(深度)。 -
length: FM 信号长度。 -
samplingRate: 采样率,默认为 1。
-
- 返回值: 调制后的
Signal。
-
public static Signal Phase(Signal baseband, float carrierAmplitude, float carrierFrequency, float deviation = 0.8f)- 执行相位调制(PM)并返回 PM 信号。
- 参数:
-
baseband: 基带信号。 -
carrierAmplitude: 载波幅度。 -
carrierFrequency: 载波频率。 -
deviation: 频率偏移,默认为 0.8。
-
- 返回值: 调制后的
Signal。
-
public static Signal DemodulateAmplitude(Signal signal)- 基于 Hilbert 变换对信号进行简单的幅度解调。
- 参数:
-
signal: 输入信号。
-
- 返回值: 解调后的
Signal。
-
public static Signal DemodulateFrequency(Signal signal)- 基于 Hilbert 变换对信号进行简单的频率解调。
- 参数:
-
signal: 输入信号。
-
- 返回值: 解调后的
Signal。
以下是一个使用 Modulator 类中多个方法的示例,并在示例中加入了注释:
using System;
using System.Threading;
using Vorcyc.Mathematics.SignalProcessing.Operations;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class ModulatorExample
{
public static void Main()
{
// 定义载波信号和调制信号
var carrier = Signal.FromCopy(new float[] { 0.5f, 0.6f, 0.55f }, 44100);
var modulator = Signal.FromCopy(new float[] { 0.3f, 0.4f, 0.35f }, 44100);
// 执行环形调制
var ringModulatedSignal = Modulator.Ring(carrier, modulator);
Console.WriteLine("Ring Modulated Signal:");
foreach (var sample in ringModulatedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行幅度调制
var amplitudeModulatedSignal = Modulator.Amplitude(carrier);
Console.WriteLine("Amplitude Modulated Signal:");
foreach (var sample in amplitudeModulatedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行频率调制
var frequencyModulatedSignal = Modulator.Frequency(carrier, 1.0f, 1000.0f);
Console.WriteLine("Frequency Modulated Signal:");
foreach (var sample in frequencyModulatedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行相位调制
var phaseModulatedSignal = Modulator.Phase(carrier, 1.0f, 1000.0f);
Console.WriteLine("Phase Modulated Signal:");
foreach (var sample in phaseModulatedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行幅度解调
var demodulatedAmplitudeSignal = Modulator.DemodulateAmplitude(amplitudeModulatedSignal);
Console.WriteLine("Demodulated Amplitude Signal:");
foreach (var sample in demodulatedAmplitudeSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行频率解调
var demodulatedFrequencySignal = Modulator.DemodulateFrequency(frequencyModulatedSignal);
Console.WriteLine("Demodulated Frequency Signal:");
foreach (var sample in demodulatedFrequencySignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Operations.Operation 提供了多种 DSP/音频操作方法:
-
public static Signal Convolve(Signal signal, Signal kernel)- 使用 FFT 对
signal和kernel进行快速卷积。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。
-
- 返回值: 卷积结果的
Signal。
- 使用 FFT 对
-
public static ComplexDiscreteSignalFp32 Convolve(ComplexDiscreteSignalFp32 signal, ComplexDiscreteSignalFp32 kernel)- 使用 FFT 对
signal和kernel进行快速卷积。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。
-
- 返回值: 卷积结果的
ComplexDiscreteSignalFp32。
- 使用 FFT 对
-
public static float[] Convolve(float[] signal, float[] kernel)- 使用 FFT 对
signal和kernel进行快速卷积。 - 参数:
-
signal: 输入信号数组。 -
kernel: 卷积核数组。
-
- 返回值: 卷积结果的数组。
- 使用 FFT 对
-
public static T[] Convolve<T>(T[] signal, T[] kernel, ComputingContext? context = null)- 0.10.19:
T(float/double)上的 FFT 卷积。长度N + M - 1。
- 0.10.19:
-
public static Signal CrossCorrelate(Signal signal1, Signal signal2)- 使用 FFT 对
signal1和signal2进行快速互相关。 - 参数:
-
signal1: 输入信号1。 -
signal2: 输入信号2。
-
- 返回值: 互相关结果的
Signal。
- 使用 FFT 对
-
public static ComplexDiscreteSignalFp32 CrossCorrelate(ComplexDiscreteSignalFp32 signal1, ComplexDiscreteSignalFp32 signal2)- 使用 FFT 对
signal1和signal2进行快速互相关。 - 参数:
-
signal1: 输入信号1。 -
signal2: 输入信号2。
-
- 返回值: 互相关结果的
ComplexDiscreteSignalFp32。
- 使用 FFT 对
-
public static float[] CrossCorrelate(float[] signal1, float[] signal2) -
public static T[] CrossCorrelate<T>(T[] signal1, T[] signal2, ComputingContext? context = null)- 0.10.19:
T上的 FFT 互相关。长度N + M - 1,不改输入。
- 0.10.19:
-
public static Signal BlockConvolve(Signal signal, Signal kernel, int fftSize, FilteringMethod method = FilteringMethod.OverlapSave)- 对
signal和kernel进行块卷积(使用重叠-相加或重叠-保存算法)。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。 -
fftSize: FFT 大小。 -
method: 块卷积方法(OverlapAdd / OverlapSave),默认为FilteringMethod.OverlapSave。
-
- 返回值: 块卷积结果的
Signal。
- 对
-
public static ComplexDiscreteSignalFp32 Deconvolve(ComplexDiscreteSignalFp32 signal, ComplexDiscreteSignalFp32 kernel)- 对
signal和kernel进行反卷积。 - 参数:
-
signal: 输入信号。 -
kernel: 卷积核。
-
- 返回值: 反卷积结果的
ComplexDiscreteSignalFp32。
- 对
-
public static Signal Interpolate(Signal signal, int factor, FirFilter? filter = null)- 对
signal进行插值并进行低通滤波。 - 参数:
-
signal: 输入信号。 -
factor: 插值因子(例如 factor=2 表示从 8000 Hz -> 16000 Hz)。 -
filter: 低通抗混叠滤波器。
-
- 返回值: 插值结果的
Signal。
- 对
-
public static Signal Decimate(Signal signal, int factor, FirFilter? filter = null)- 对
signal进行抽取并进行低通滤波。 - 参数:
-
signal: 输入信号。 -
factor: 抽取因子(例如 factor=2 表示从 16000 Hz -> 8000 Hz)。 -
filter: 低通抗混叠滤波器。
-
- 返回值: 抽取结果的
Signal。
- 对
-
public static Signal Resample(Signal signal, float newSamplingRate, FirFilter? filter = null, int order = 15)- 对
signal进行带限重采样。 - 参数:
-
signal: 输入信号。 -
newSamplingRate: 目标采样率。 -
filter: 低通抗混叠滤波器。 -
order: 滤波器阶数,默认为 15。
-
- 返回值: 重采样结果的
Signal。
- 对
-
public static Signal ResampleUpDown(Signal signal, int up, int down, FirFilter? filter = null)- 对
signal进行简单重采样(插值和抽取的组合)。 - 参数:
-
signal: 输入信号。 -
up: 插值因子。 -
down: 抽取因子。 -
filter: 低通抗混叠滤波器。
-
- 返回值: 重采样结果的
Signal。
- 对
-
public static Signal TimeStretch(Signal signal, float stretch, int windowSize, int hopSize, TsmAlgorithm algorithm = TsmAlgorithm.PhaseVocoderPhaseLocking)- 对
signal进行时间拉伸,参数由用户设置。 - 参数:
-
signal: 输入信号。 -
stretch: 拉伸因子(比率)。 -
windowSize: 窗口大小(对于声码器 - FFT 大小)。 -
hopSize: 跳跃长度。 -
algorithm: 时间拉伸算法,默认为TsmAlgorithm.PhaseVocoderPhaseLocking。
-
- 返回值: 时间拉伸结果的
Signal。
- 对
-
public static Signal TimeStretch(Signal signal, double stretch, TsmAlgorithm algorithm = TsmAlgorithm.PhaseVocoderPhaseLocking)- 对
signal进行时间拉伸,参数自动推导。 - 参数:
-
signal: 输入信号。 -
stretch: 拉伸因子(比率)。 -
algorithm: 时间拉伸算法,默认为TsmAlgorithm.PhaseVocoderPhaseLocking。
-
- 返回值: 时间拉伸结果的
Signal。
- 对
-
public static Signal Envelope(Signal signal, float attackTime = 0.01f, float releaseTime = 0.05f)- 提取
signal的包络。 - 参数:
-
signal: 输入信号。 -
attackTime: 攻击时间(以秒为单位),默认为 0.01 秒。 -
releaseTime: 释放时间(以秒为单位),默认为 0.05 秒。
-
- 返回值: 包络结果的
Signal。
- 提取
-
public static Signal FullRectify(Signal signal)- 对
signal进行全波整流。 - 参数:
-
signal: 输入信号。
-
- 返回值: 全波整流结果的
Signal。
- 对
-
public static Signal HalfRectify(Signal signal)- 对
signal进行半波整流。 - 参数:
-
signal: 输入信号。
-
- 返回值: 半波整流结果的
Signal。
- 对
-
public static Signal SpectralSubtract(Signal signal, Signal noise, int fftSize = 1024, int hopSize = 256)- 使用谱减法对
signal进行去噪。将noise从signal中减去。 - 参数:
-
signal: 输入信号。 -
noise: 噪声信号。 -
fftSize: FFT 大小,默认为 1024。 -
hopSize: 跳跃大小(样本数),默认为 256。
-
- 返回值: 去噪结果的
Signal。
- 使用谱减法对
-
public static void NormalizePeak(float[] samples, float peakDb)- 归一化峰值电平。
- 参数:
-
samples: 样本数组。 -
peakDb: 峰值电平(以分贝为单位),例如 -1dB, -3dB 等。
-
-
public static Signal NormalizePeak(Signal signal, float peakDb)- 归一化峰值电平。
- 参数:
-
signal: 输入信号。 -
peakDb: 峰值电平(以分贝为单位),例如 -1dB, -3dB 等。
-
- 返回值: 归一化结果的
Signal。
-
public static void ChangePeak(float[] samples, float peakDb)- 相对于输入
samples改变峰值电平(就地)。 - 参数:
-
samples: 样本数组。 -
peakDb: 峰值变化(以分贝为单位),例如 -6dB 表示峰值电平减半。
-
- 相对于输入
-
public static Signal ChangePeak(Signal signal, float peakDb)- 相对于输入
signal改变峰值电平。 - 参数:
-
signal: 输入信号。 -
peakDb: 峰值变化(以分贝为单位),例如 -6dB 表示峰值电平减半。
-
- 返回值: 改变峰值后的
Signal。
- 相对于输入
-
public static void NormalizeRms(float[] samples, float rmsDb)- 归一化 RMS。
- 参数:
-
samples: 样本数组。 -
rmsDb: RMS 电平(以分贝为单位),例如 -6dB, -18dB, -26dB 等。
-
-
public static Signal NormalizeRms(Signal signal, float rmsDb)- 归一化 RMS。
- 参数:
-
signal: 输入信号。 -
rmsDb: RMS 电平(以分贝为单位),例如 -6dB, -18dB, -26dB 等。
-
- 返回值: 归一化结果的
Signal。
-
public static void ChangeRms(float[] samples, float rmsDb)- 相对于输入
samples改变 RMS。 - 参数:
-
samples: 样本数组。 -
rmsDb: RMS 变化(以分贝为单位),例如 -6dB 表示 RMS 减半。
-
- 相对于输入
-
public static Signal ChangeRms(Signal signal, float rmsDb)- 相对于输入
signal改变 RMS。 - 参数:
-
signal: 输入信号。 -
rmsDb: RMS 变化(以分贝为单位),例如 -6dB 表示 RMS 减半。
-
- 返回值: 改变 RMS 后的
Signal。
- 相对于输入
-
public static float[] Welch(Signal signal, int windowSize = 1024, int hopSize = 256, WindowType window = WindowType.Hann, int fftSize = 0, int samplingRate = 0, ComputingContext? context = null)- 使用 Welch 方法计算周期图。如果
samplingRate=0,则评估功率谱,否则评估功率谱密度。仅平均完整 STFT 窗(经Stft.AveragePeriodogram)。可选context驱动帧级并行 / SIMD。 - 参数:
-
signal: 输入信号。 -
windowSize: 窗口大小(样本数),默认为 1024。 -
hopSize: 跳跃大小(样本数),默认为 256。 -
window: 窗口函数,默认为WindowType.Hann。 -
fftSize: FFT 大小,默认为 0。 -
samplingRate: 如果采样率=0,则评估功率谱,否则评估功率谱密度。 -
context: 可选ComputingContext(0.10.13+)。
-
- 返回值: 周期图数组。
- 使用 Welch 方法计算周期图。如果
-
public static float[] LombScargle(float[] x, float[] y, float[] freqs, bool subtractMean = false, bool normalize = false)- 计算 Lomb-Scargle 周期图。
- 参数:
-
x: 样本时间。 -
y: 样本时间对应的信号值。 -
freqs: 输出周期图的角频率。 -
subtractMean: 在评估周期图之前从值中减去均值。 -
normalize: 通过数据围绕常数参考模型(零)的残差来归一化周期图。
-
- 返回值: 周期图数组。
以下是一个使用 Operation 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class OperationExample
{
public static void Main()
{
// 定义输入信号和卷积核
var signal = Signal.FromCopy(new float[] { 0.5f, 0.6f, 0.55f }, 44100);
var kernel = Signal.FromCopy(new float[] { 0.3f, 0.4f }, 44100);
// 执行卷积
var convolvedSignal = Operation.Convolve(signal, kernel);
Console.WriteLine("Convolved Signal:");
foreach (var sample in convolvedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行互相关
var crossCorrelatedSignal = Operation.CrossCorrelate(signal, kernel);
Console.WriteLine("Cross-Correlated Signal:");
foreach (var sample in crossCorrelatedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行时间拉伸
var timeStretchedSignal = Operation.TimeStretch(signal, 1.5f, 1024, 256);
Console.WriteLine("Time-Stretched Signal:");
foreach (var sample in timeStretchedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 提取包络
var envelopeSignal = Operation.Envelope(signal);
Console.WriteLine("Envelope Signal:");
foreach (var sample in envelopeSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行全波整流
var fullRectifiedSignal = Operation.FullRectify(signal);
Console.WriteLine("Full-Rectified Signal:");
foreach (var sample in fullRectifiedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行谱减法去噪
var noise = Signal.FromCopy(new float[] { 0.1f, 0.1f, 0.1f }, 44100);
var denoisedSignal = Operation.SpectralSubtract(signal, noise);
Console.WriteLine("Denoised Signal:");
foreach (var sample in denoisedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 归一化峰值电平
var normalizedPeakSignal = Operation.NormalizePeak(signal, -3);
Console.WriteLine("Normalized Peak Signal:");
foreach (var sample in normalizedPeakSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 归一化 RMS
var normalizedRmsSignal = Operation.NormalizeRms(signal, -18);
Console.WriteLine("Normalized RMS Signal:");
foreach (var sample in normalizedRmsSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 计算 Welch 周期图
var welchPeriodogram = Operation.Welch(signal);
Console.WriteLine("Welch Periodogram:");
foreach (var value in welchPeriodogram)
{
Console.WriteLine($"Value: {value}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Operations.Resampler 是一个用于信号重采样(采样率转换)的类。
-
public int MinResamplingFilterOrder { get; set; }- 获取或设置低通抗混叠 FIR 滤波器的阶数,如果未显式指定滤波器,则会自动创建。默认值为 101。
-
public Signal Interpolate(Signal signal, int factor, FirFilter? filter = null)- 对
signal进行插值并进行低通滤波。 - 参数:
-
signal: 输入信号。 -
factor: 插值因子(例如 factor=2 表示从 8000 Hz -> 16000 Hz)。 -
filter: 低通抗混叠滤波器。
-
- 返回值: 插值结果的
Signal。
- 对
-
public Signal Decimate(Signal signal, int factor, FirFilter? filter = null)- 对
signal进行抽取并进行低通滤波。 - 参数:
-
signal: 输入信号。 -
factor: 抽取因子(例如 factor=2 表示从 16000 Hz -> 8000 Hz)。 -
filter: 低通抗混叠滤波器。
-
- 返回值: 抽取结果的
Signal。
- 对
-
public Signal Resample(Signal signal, float newSamplingRate, FirFilter? filter = null, int order = 15)- 对
signal进行带限重采样。 - 参数:
-
signal: 输入信号。 -
newSamplingRate: 目标采样率。 -
filter: 低通抗混叠滤波器。 -
order: 滤波器阶数,默认为 15。
-
- 返回值: 重采样结果的
Signal。
- 对
-
public Signal ResampleUpDown(Signal signal, int up, int down, FirFilter? filter = null)- 对
signal进行简单重采样(插值和抽取的组合)。 - 参数:
-
signal: 输入信号。 -
up: 插值因子。 -
down: 抽取因子。 -
filter: 低通抗混叠滤波器。
-
- 返回值: 重采样结果的
Signal。
- 对
以下是一个使用 Resampler 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class ResamplerExample
{
public static void Main()
{
// 定义输入信号
var signal = Signal.FromCopy(new float[] { 0.5f, 0.6f, 0.55f }, 44100);
// 创建 Resampler 实例
var resampler = new Resampler();
// 执行插值
var interpolatedSignal = resampler.Interpolate(signal, 2);
Console.WriteLine("Interpolated Signal:");
foreach (var sample in interpolatedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行抽取
var decimatedSignal = resampler.Decimate(signal, 2);
Console.WriteLine("Decimated Signal:");
foreach (var sample in decimatedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行带限重采样
var resampledSignal = resampler.Resample(signal, 22050);
Console.WriteLine("Resampled Signal:");
foreach (var sample in resampledSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 执行简单重采样(插值和抽取的组合)
var resampledUpDownSignal = resampler.ResampleUpDown(signal, 2, 3);
Console.WriteLine("Resampled UpDown Signal:");
foreach (var sample in resampledUpDownSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Operations.SpectralSubtractor 是一个用于实现谱减法滤波的类。
-
public float Beta { get; set; }- 获取或设置谱底(beta 系数)。默认值为 0.009f。
-
public float AlphaMin { get; set; }- 获取或设置减法因子的最小阈值(alpha)。默认值为 2f。
-
public float AlphaMax { get; set; }- 获取或设置减法因子的最大阈值(alpha)。默认值为 5f。
-
public float SnrMin { get; set; }- 获取或设置最小信噪比(以 dB 为单位)。默认值为 -5f。
-
public float SnrMax { get; set; }- 获取或设置最大信噪比(以 dB 为单位)。默认值为 20f。
-
public SpectralSubtractor(float[] noise, int fftSize = 1024, int hopSize = 128)- 构造 SpectralSubtractor 实例,指定噪声样本数组、FFT 大小和跳跃长度。
- 参数:
-
noise: 噪声样本数组。 -
fftSize: FFT 大小,默认为 1024。 -
hopSize: 跳跃长度(样本数),默认为 128。
-
-
public SpectralSubtractor(DiscreteSignal noise, int fftSize = 1024, int hopSize = 128)- 构造 SpectralSubtractor 实例,指定噪声信号、FFT 大小和跳跃长度。
- 参数:
-
noise: 噪声信号。 -
fftSize: FFT 大小,默认为 1024。 -
hopSize: 跳跃长度(样本数),默认为 128。
-
-
protected override void ProcessSpectrum(float[] re, float[] im, float[] filteredRe, float[] filteredIm)- 在每个 STFT 步骤中处理一个谱。
- 参数:
-
re: 输入谱的实部。 -
im: 输入谱的虚部。 -
filteredRe: 输出谱的实部。 -
filteredIm: 输出谱的虚部。
-
-
public void EstimateNoise(float[] noise, int startPos = 0, int endPos = -1)- 估计噪声的功率谱。
- 参数:
-
noise: 噪声样本数组。 -
startPos: 数组中处理的第一个样本的索引。 -
endPos: 数组中处理的最后一个样本的索引。
-
-
public void EstimateNoise(DiscreteSignal noise, int startPos = 0, int endPos = -1)- 估计噪声信号的功率谱。
- 参数:
-
noise: 噪声信号。 -
startPos: 信号中处理的第一个样本的索引。 -
endPos: 信号中处理的最后一个样本的索引。
-
以下是一个使用 SpectralSubtractor 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations;
public class SpectralSubtractorExample
{
public static void Main()
{
// 定义噪声样本数组
float[] noiseSamples = { 0.1f, 0.1f, 0.1f, 0.1f, 0.1f };
// 创建 SpectralSubtractor 实例
var subtractor = new SpectralSubtractor(noiseSamples);
// 定义输入信号
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f, 0.8f, 0.75f, 0.9f };
var signal = new DiscreteSignal(44100, inputSignal);
// 执行谱减法去噪
var denoisedSignal = subtractor.ApplyTo(signal);
Console.WriteLine("Denoised Signal:");
foreach (var sample in denoisedSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Operations.WaveShaper 是一个用于波形整形的类。
无
-
public WaveShaper(Func<float, float> waveShapingFunction)- 构造 WaveShaper 实例,指定波形整形函数。
- 参数:
-
waveShapingFunction: 波形整形函数。
-
-
public float Process(float sample)- 处理一个样本。
- 参数:
-
sample: 输入样本。
-
- 返回值: 处理后的样本。
-
public void Reset()- 重置波形整形器。
-
public Signal ApplyTo(Signal signal, FilteringMethod method = FilteringMethod.Auto)- 处理整个信号并返回新的波形整形信号。
- 参数:
-
signal: 输入信号。 -
method: 滤波方法,默认为FilteringMethod.Auto。
-
- 返回值: 处理后的
Signal对象。
以下是一个使用 WaveShaper 类中多个方法的示例,并在示例中加入了注释:
using System;
using Vorcyc.Mathematics.SignalProcessing.Operations;
using Vorcyc.Mathematics.SignalProcessing.Signals;
public class WaveShaperExample
{
public static void Main()
{
// 定义波形整形函数
Func<float, float> waveShapingFunction = x => x * x;
// 创建 WaveShaper 实例
var waveShaper = new WaveShaper(waveShapingFunction);
// 定义输入信号
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f, 0.8f, 0.75f, 0.9f };
var signal = Signal.FromCopy(inputSignal, 44100);
// 处理整个信号
var outputSignal = waveShaper.ApplyTo(signal);
Console.WriteLine("Wave-Shaped Signal:");
foreach (var sample in outputSignal.Samples)
{
Console.WriteLine($"Sample: {sample}");
}
// 处理单个样本
float processedSample = waveShaper.Process(0.85f);
Console.WriteLine($"Processed Sample: {processedSample}");
// 重置波形整形器
waveShaper.Reset();
}
}命名空间:Vorcyc.Mathematics.SignalProcessing.Operations.Tsm
供 Operation.TimeStretch、PitchShiftEffect 等 API 使用。
| 值 | 算法 |
|---|---|
PhaseVocoder |
经典相位声码器 |
PhaseVocoderPhaseLocking |
相位锁定相位声码器(默认) |
Wsola |
波形相似叠加(WSOLA) |
PaulStretch |
Paul stretch |
| 类型 | 说明 |
|---|---|
PhaseVocoder |
相位声码器 TSM(IFilter) |
PhaseLockingVocoder |
相位锁定变体 |
Wsola |
WSOLA 时标拉伸 |
Operation.TimeStretch(Signal, ...) 重载可指定 TsmAlgorithm(优先 Signal)。