Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Всегда отвечай мне используя русский язык.
Всегда пиши комментарии в коде на русском языке.
Комментарии к классам, структурам делегатам и перечислениям, а также к их членам всегда пиши в системном виде.
При написании комментариев (ели они короткие) в коде предпочитай размещение комментария в конце той же строке, что и сам комментируемый код.
Старайся избегать тривиальных комментариев.
При герерации кода старайся минимизировать количество фигурных скобок.
При генерации кода используй самые современные виды синтаксических конструкций языка.
Всегда старайся минимизировтаь размер кода если не запрошено иное.
Используй стиль именования локальных переменных snake_case.
Используй стиль именования входных переменных методов PascalCase.
Используй стиль именования полей классов _PascalCase для нестатических переменных и __PascalCase для статических переменных.
Ппредпочитай английский язык при именовании переменных, методов, классов и прочих сущностей.
При инициализации массивов, списков и словарей используй выражения инициализации массивов.
При объявлении переменных предпочитай использовать ключевое слово var.
При написании системных комментариев старайся писать их компактно в одну строку, если длина текста небольшая.
5 changes: 5 additions & 0 deletions MathCore.DSP.sln
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfTest", "Tests\WpfTest\Wp
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmarks", "Tests\Benchmarks\Benchmarks.csproj", "{6E552E38-1B68-4DBD-9DAB-03FF2A0A4F06}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Service", ".Service", "{2507A7F8-E9DD-CD81-FF78-9340A71A364C}"
ProjectSection(SolutionItems) = preProject
.github\copilot-instructions.md = .github\copilot-instructions.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down
1 change: 1 addition & 0 deletions MathCore.DSP.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FT/@EntryIndexedValue">FT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=II/@EntryIndexedValue">II</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PNG/@EntryIndexedValue">PNG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RC/@EntryIndexedValue">RC</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ALGLIB/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=arcch/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=arcsh/@EntryIndexedValue">True</s:Boolean>
Expand Down
2 changes: 2 additions & 0 deletions MathCore.DSP/Filters/Builders/BandPassBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
namespace MathCore.DSP.Filters.Builders;

/// <summary>Построитель полосно-пропускающего фильтра</summary>
/// <param name="dt">Период дискретизации</param>
public readonly record struct BandPassBuilder(double dt);
2 changes: 2 additions & 0 deletions MathCore.DSP/Filters/Builders/BandStopBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
namespace MathCore.DSP.Filters.Builders;

/// <summary>Построитель полосно-задерживающего фильтра</summary>
/// <param name="dt">Период дискретизации</param>
public readonly record struct BandStopBuilder(double dt);
102 changes: 37 additions & 65 deletions MathCore.DSP/Filters/Builders/ButterworthBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,81 +1,53 @@
namespace MathCore.DSP.Filters.Builders;

/// <summary>Построитель фильтра Батерворта</summary>
public readonly ref struct ButterworthBuilder
{
/// <summary>Тип пропускания полосы частот</summary>
public FrequencyPassType PassType { get; init; }

/// <summary>Период дискретизации фильтра</summary>
public double dt { get; init; }

/// <summary>Частота дискретизации фильтра</summary>
public double fd { get => 1 / dt; init => dt = 1 / value; }

/// <summary>Фильтр нижних частот</summary>
public ButterworthBuilder LowPass => this with { PassType = FrequencyPassType.LowPass };

/// <summary>Фильтр верхних частот</summary>
public ButterworthBuilder HighPass => this with { PassType = FrequencyPassType.HighPass };

/// <summary>Полосопропускающий фильтр</summary>
public ButterworthBuilder BandPass => this with { PassType = FrequencyPassType.BandPass };

/// <summary>Полосозадерживающий фильтр</summary>
public ButterworthBuilder BandStop => this with { PassType = FrequencyPassType.BandStop };

private readonly double? _PassFrequency;
private readonly double? _StopFrequency;
private readonly double? _PassHighFrequency;
private readonly double? _StopHighFrequency;

private readonly int? _Order;

private readonly double? _Gp;
private readonly double? _Gs;
private readonly double? _Rp;
private readonly double? _Rs;

public double? PassFrequency
{
get => _PassFrequency;
init => _PassFrequency = value;
}

public double? StopFrequency
{
get => _StopFrequency;
init => _StopFrequency = value;
}

public double? PassHighFrequency
{
get => _PassHighFrequency;
init => _PassHighFrequency = value;
}

public double? StopHighFrequency
{
get => _StopHighFrequency;
init => _StopHighFrequency = value;
}

public int? Order
{
get => _Order;
init => _Order = value;
}

public double? Gp
{
get => _Gp;
init => _Gp = value;
}

public double? Gs
{
get => _Gs;
init => _Gs = value;
}

public double? Rp
{
get => _Rp;
init => _Rp = value;
}

public double? Rs
{
get => _Rs;
init => _Rs = value;
}
/// <summary>Частота пропускания</summary>
public double? PassFrequency { get; init; }

/// <summary>Частота заграждения</summary>
public double? StopFrequency { get; init; }

/// <summary>Верхняя частота пропускания</summary>
public double? PassHighFrequency { get; init; }

/// <summary>Верхняя частота заграждения</summary>
public double? StopHighFrequency { get; init; }

/// <summary>Порядок фильтра</summary>
public int? Order { get; init; }

/// <summary>Коэффициент пропускания</summary>
public double? Gp { get; init; }

/// <summary>Коэффициент заграждения</summary>
public double? Gs { get; init; }

/// <summary>Неравномерность в полосе пропускания</summary>
public double? Rp { get; init; }

/// <summary>Неравномерность в полосе заграждения</summary>
public double? Rs { get; init; }
}
103 changes: 38 additions & 65 deletions MathCore.DSP/Filters/Builders/ChebyshevBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,83 +1,56 @@
namespace MathCore.DSP.Filters.Builders;

/// <summary>Строитель фильтров Чебышева</summary>
public readonly ref struct ChebyshevBuilder
{
/// <summary>Тип пропускания полосы частот</summary>
public FrequencyPassType PassType { get; init; }

/// <summary>Период дискретизации</summary>
public double dt { get; init; }

/// <summary>Частота дискретизации</summary>
public double fd { get => 1 / dt; init => dt = 1 / value; }

/// <summary>Тип фильтра Чебышева</summary>
public ChebyshevType Type { get; init; }

/// <summary>ФНЧ</summary>
public ChebyshevBuilder LowPass => this with { PassType = FrequencyPassType.LowPass };

/// <summary>ФВЧ</summary>
public ChebyshevBuilder HighPass => this with { PassType = FrequencyPassType.HighPass };

/// <summary>ППФ</summary>
public ChebyshevBuilder BandPass => this with { PassType = FrequencyPassType.BandPass };

/// <summary>ПЗФ</summary>
public ChebyshevBuilder BandStop => this with { PassType = FrequencyPassType.BandStop };

private readonly double? _PassFrequency;
private readonly double? _StopFrequency;
private readonly double? _PassHighFrequency;
private readonly double? _StopHighFrequency;

private readonly int? _Order;

private readonly double? _Gp;
private readonly double? _Gs;
private readonly double? _Rp;
private readonly double? _Rs;

public double? PassFrequency
{
get => _PassFrequency;
init => _PassFrequency = value;
}

public double? StopFrequency
{
get => _StopFrequency;
init => _StopFrequency = value;
}

public double? PassHighFrequency
{
get => _PassHighFrequency;
init => _PassHighFrequency = value;
}

public double? StopHighFrequency
{
get => _StopHighFrequency;
init => _StopHighFrequency = value;
}

public int? Order
{
get => _Order;
init => _Order = value;
}

public double? Gp
{
get => _Gp;
init => _Gp = value;
}

public double? Gs
{
get => _Gs;
init => _Gs = value;
}

public double? Rp
{
get => _Rp;
init => _Rp = value;
}

public double? Rs
{
get => _Rs;
init => _Rs = value;
}
/// <summary>Частота пропускания</summary>
public double? PassFrequency { get; init; }

/// <summary>Частота заграждения</summary>
public double? StopFrequency { get; init; }

/// <summary>Верхняя частота пропускания</summary>
public double? PassHighFrequency { get; init; }

/// <summary>Верхняя частота заграждения</summary>
public double? StopHighFrequency { get; init; }

/// <summary>Порядок фильтра</summary>
public int? Order { get; init; }

/// <summary>Коэффициент передачи в полосе пропускания</summary>
public double? Gp { get; init; }

/// <summary>Коэффициент передачи в полосе заграждения</summary>
public double? Gs { get; init; }

/// <summary>Неравномерность в полосе пропускания (дБ)</summary>
public double? Rp { get; init; }

/// <summary>Затухание в полосе заграждения (дБ)</summary>
public double? Rs { get; init; }
}
Loading