【wpf】正弦波余弦波の波形データをCSVファイルに出力する
CSVファイル出力
まずは、どのような結果になるか示します。
CSVファイル内容

ソースコードの紹介
xamlソースコードとcsソースコードを下記に示します。
MainWindow.xaml
csv出力用のボタンを配置する。
<Window x:Class="WpfChartTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfChartTest" xmlns:sparrow="http://sparrowtoolkit.codeplex.com/wpf" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded"> <Grid Margin="0,0,2,0"> <!--全体のGrid設定--> <Grid.RowDefinitions> <!--行設定--> <RowDefinition Height="1*" /> <RowDefinition Height="9*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <!--列設定--> <ColumnDefinition Width="1*" /> </Grid.ColumnDefinitions> <Grid Grid.Column="0" Grid.Row="0" Background="WhiteSmoke" > <Button x:Name="output_btn" Content="CSV出力" Click="Output_btn_Click"/> </Grid> <Grid Grid.Column="0" Grid.Row="1" Background="WhiteSmoke" > <sparrow:SparrowChart Visibility="Visible" VerticalAlignment="Top" Height="367" > <sparrow:SparrowChart.XAxis> <sparrow:LinearXAxis x:Name="line_x" MinValue="0" MaxValue="1" Visibility="Visible"/> </sparrow:SparrowChart.XAxis> <sparrow:SparrowChart.YAxis> <sparrow:LinearYAxis x:Name="line_y" MinValue="0" MaxValue="1" Visibility="Visible"/> </sparrow:SparrowChart.YAxis> <sparrow:LineSeries PointsSource="{Binding Path=Points_sin_a}" XPath="X" YPath="Y"/> <sparrow:LineSeries PointsSource="{Binding Path=Points_cos_a}" XPath="X" YPath="Y"/> </sparrow:SparrowChart> </Grid> </Grid> </Window>
MainWindow.xaml.cs
CSV出力ボタンがクリックされたときの処理をClickイベントハンドラーに書いていく。
using Microsoft.Win32; using System; using System.Collections.ObjectModel; using System.IO; using System.Text; using System.Windows; namespace WpfChartTest { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public ObservableCollection<Point> Points_sin_a { get; set; } public ObservableCollection<Point> Points_cos_a { get; set; } public double fs = 1280; //サンプリング周波数 public double freq = 50; //周波数 public double size = 128; //データ数 //データ出力用 public double[] sindata_res; public double[] cosdata_res; private void Window_Loaded(object sender, RoutedEventArgs e) { //グラフ Points_sin_a = new ObservableCollection<Point>(); Points_cos_a = new ObservableCollection<Point>(); double[] data_a = new double[(int)size]; double[] data_b = new double[(int)size]; //csv出力用 sindata_res = new double[(int)size]; cosdata_res = new double[(int)size]; // 波形生成 for (int i = 0; i < size; i++) { double t = (double)i / fs; //time // f(t) = a*sin(2πft) data_a[i] = 0.3 * Math.Sin(2 * Math.PI * freq * t); data_b[i] = 0.3 * Math.Cos(2 * Math.PI * freq * t); //グラフ要素にデータ挿入 Points_sin_a.Add(new Point { X = i, Y = data_a[i] }); Points_cos_a.Add(new Point { X = i, Y = data_b[i] }); //csv出力用 sindata_res[i] = data_a[i]; cosdata_res[i] = data_b[i]; } this.DataContext = this; //波形プロット //グラフ軸の表示範囲設定 line_x.MinValue = 0; //X軸の最小値 line_x.MaxValue = size; //X軸の最大値 line_y.MinValue = -0.3; //Y軸の最小値 line_y.MaxValue = 0.3; //Y軸の最大値 //line_y.MinValue = data_a.Min(); //Y軸の最小値 データ内の最小振幅値で可変 //line_y.MaxValue = data_a.Max(); //Y軸の最大値 データ内の最大振幅値で可変 } /// <summary> /// CSVファイル出力 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Output_btn_Click(object sender, RoutedEventArgs e) { //日付取得 string date = DateTime.Now.ToString("yyyyMMddhhmss"); //ファイル保存ダイアログインスタンス作成 SaveFileDialog dlg = new SaveFileDialog { FileName = "SinCosData_" + date + ".csv", //デフォルトファイル名 InitialDirectory = @"C:\", //デフォルトディレクトリ Filter = "CSVファイル|*.csv|すべてのファイル|*.*", //ファイルのフィルタ FilterIndex = 0 //ファイルの種類 }; // 指定されたファイル名を取得 if (dlg.ShowDialog() == true) { Stream st = dlg.OpenFile(); StreamWriter sw = new StreamWriter(st, Encoding.GetEncoding("UTF-8")); sw.WriteLine("fs,freq,size"); sw.WriteLine(fs + "," + freq + "," + size); sw.WriteLine("No,Sin,Cos"); for (int i = 0; i < size; i++) { sw.WriteLine(i +"," + sindata_res[i] + "," + cosdata_res[i]); //Sin,Cosのデータを挿入 } sw.Close(); st.Close(); MessageBox.Show("CSVFile出力完了."); } else { MessageBox.Show("Cancel."); } } } }
CSV出力ボタン押下時の画面結果
画面に波形が表示されたら、CSV出力ボタンを押下する。

CSV出力ボタン押下して、保存ダイアログで保存した後、完了メッセージBoxが表示される。

まとめ
波形のデータ数値をcsvに保存できるので、Excelで波形を表示でき、汎用性が上がると思います。
以上、csvファイル出力方法の紹介でした。
参考になれば幸いです。